Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перестроение индексов в T-SQL / 25 сообщений из 51, страница 1 из 3
25.05.2017, 13:33
    #39459608
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
Здравствуйте, прошу сильно не бить, а если и бить то не по почкам.
С sql я знаком дня этак 3, нужен скрипт перестроения индекса в T-SQL, кто может подсказать как сформировать правильный запрос?
Нужно что-то универсальное, т.к. серверов несколько, везде свой лес (свои настройки и структура бд), времени на изучение вопроса катастрофически нет. Ну и если не сильно универсальное то хотя бы в какую сторону копать, синтаксис команды ALTER INDEX (Transact-SQL) в силу отсутсвия знаний не дает ровным счетом ничего, просто из-за того, что нужно понимать всю суть всего что касается индексов, на что сейчас просто нет времени :(
Делаю обслуживание БД через sqlcmd с логированием результата и подтягиванием аларма в систему мониторинга, что бы быть в курсе где что не так с БД.

Так же хотел бы уточнить, верно ли я понимаю суть обслуживания БД SQL
1) проверка целостности БД
2) перестроение индекса
3) обновление статистики
4) очистка процедурного кэша
5) собственно сам бэкапинг базы
6) очистка журнала

p.s. ну и предвидя возможные вопросы, почему не делать все это через планы обслуживания - используем sql express :) ну и лично для меня в систему мониторинга так проще запросы подтягивать наверное
...
Рейтинг: 0 / 0
25.05.2017, 13:53
    #39459633
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
IvanIvan48,
тут на форуме скрипты ребилда индексов регулярно бегают. Например
...
Рейтинг: 0 / 0
25.05.2017, 13:54
    #39459634
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
...
Рейтинг: 0 / 0
25.05.2017, 14:01
    #39459648
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
Так же хотел бы уточнить, верно ли я понимаю суть обслуживания БД SQL
1) проверка целостности БД
2) перестроение индекса
3) обновление статистики
4) очистка процедурного кэша
5) собственно сам бэкапинг базы
6) очистка журналаВсе верно.
Еще возможен перенос на другой сервер, перенос некот. файлов БД на другой диск.
...
Рейтинг: 0 / 0
25.05.2017, 14:03
    #39459652
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
IvanIvan48,

а кэш вам чем мешает?
...
Рейтинг: 0 / 0
25.05.2017, 14:05
    #39459655
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
TaPaKIvanIvan48,

а кэш вам чем мешает?

У какого-то индуса прочитал.
...
Рейтинг: 0 / 0
25.05.2017, 14:38
    #39459696
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
Владислав КолосовTaPaKIvanIvan48,

а кэш вам чем мешает?

У какого-то индуса прочитал.
именно так) но вроде как аргументирванно)

[youtube=
YouTube Video
...
Рейтинг: 0 / 0
25.05.2017, 14:39
    #39459697
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
Короче вот тут он про очистку процедурного кэша, в предыдущем сообщении что-то ролик не заработал как должен был)

YouTube Video
...
Рейтинг: 0 / 0
25.05.2017, 14:40
    #39459699
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
в ролике на 29ой минуте 17 секнде
...
Рейтинг: 0 / 0
25.05.2017, 14:46
    #39459709
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
есть ALTER INDEX (Transact-SQL)
можно ли сделать универсальный запрос по перестройке индексов или тут нужно прям дла каждой отдельно взятой базы все подстраивать до мелочей? сори если задаю глупые вопросы :)
...
Рейтинг: 0 / 0
25.05.2017, 14:47
    #39459712
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
IvanIvan48,

божественно... сразу после статистики... он мой кумир
...
Рейтинг: 0 / 0
25.05.2017, 14:48
    #39459713
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
автор https://ola.hallengren.com/downloads.html
ну я так понял это что-то типа процедуры, по проще варианта нет, чем портянка на 5 страница 10 шрифтом?!)
...
Рейтинг: 0 / 0
25.05.2017, 14:53
    #39459720
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
TaPaK,

авторКороче вот тут он про очистку процедурного кэша, в предыдущем сообщении что-то ролик не заработал как должен был)
раз бложике написал, не вырубишь топором из пытливых юных умов
...
Рейтинг: 0 / 0
25.05.2017, 15:29
    #39459766
Перестроение индексов в T-SQL
1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.
Не поможет если после проверки булет выполнено резервное копирование БД.
Не очень нужна для GPT-партиций (вопрос спорный).
В БД нужно включить запись checksum.

Суть в том, что если будет ошибка, то база об этом узнает в момент когда будет выполнен доступ к повреждённым данным и запретит доступ к БД ВСЕМ. После обнаружения ошибки, с большой вероятностью придётся БД из бекапа восстанавливать. Это реальный опыт обслуживания 200 машин со скулями на торговых точках.

2) перестроение индекса
Какое перестроение?

rebuild + reorganize по стандартному алгоритму microsoft нужен если БД (filegroup) расположена на одном шпиндельном диске.

rebuild не нужен если БД (filegroup) расположена на СХД.
rebuild не нужен если БД (filegroup) расположена на SSD диске.

Если если БД (filegroup) расположена на SSD диске или на СХД:
reorganize не нужен если sys.dm_db_index_physical_stats page_count меньше 1000
reorganize не нужен если sys.dm_db_index_physical_stats avg_page_space_used_in_percent меньше 75%, для таблиц c page_count от 1000 страниц и до 1310720 страниц. Для больших таблиц нужно смотреть индивидуально.

3) обновление статистики
Лучше сделать, чем не сделать.
Не нужно если делался rebuild индекса.
Нужно если статистики в таблице устаревают раньше чем SQL их автоматически обновляет.
Нужно если в таблице были есть операции вставки/удаления/обновления.
Нужно с полным сканированием, если простое обновление не помогает.

На простейшем уровне опеки БД, достаточно смотреть на изменения в sys.dm_db_index_usage_stats, и если есть изменения в цифрах user_updates+system_updates, то обновлять.

4) очистка процедурного кэша
Не нужно. Я б даже сказал вредно.

5) собственно сам бэкапинг базы
Нужно, причём такое чтоб базу потом восстановить можно было за удоволетворительный срок. Нужно об этом договориться с бизнесом.

6) очистка журнала
shrink? -- SHRINK нужен до того размера при котором не произойдёт вырастание журнала в рабочее время.
...
Рейтинг: 0 / 0
25.05.2017, 16:00
    #39459802
o-o
o-o
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
человек_ниоткуда1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.

RAID что, в курсе, какой порядок страниц индекса?
или знает, что каждой строке индекса должна соответствовать строка таблицы?
...
Рейтинг: 0 / 0
25.05.2017, 16:05
    #39459806
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
o-oчеловек_ниоткуда1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.

RAID что, в курсе, какой порядок страниц индекса?
или знает, что каждой строке индекса должна соответствовать строка таблицы?
главное что бы файлик был целый
...
Рейтинг: 0 / 0
25.05.2017, 16:52
    #39459848
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
человек_ниоткудаrebuild не нужен если БД (filegroup) расположена на СХД.
rebuild не нужен если БД (filegroup) расположена на SSD диске.Ой, какая милота. Ребилд индексов, расположенных на схд, нужен из соображений перфоманса для любых индексов с случайной вставкой ключей. Ребилд индексов на SSD нужен для экономии места на SSD (и оперативной памяти вместе с этим).
...
Рейтинг: 0 / 0
25.05.2017, 17:05
    #39459859
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.Спорно. Есть возможность поломать БД не касаясь работы оборудования.
Помницца, как-то пришлось прервать работу шринка большой базы. Закончилось suspect-ом. :)
А регулярная проверка действительно не нужна. Только при подозрениях.

Обновление статистики крупных нагруженных таблиц тоже время от времени нужно делать. В небизнес-время.
У нас вдруг почти колом стала большая база. В теч. неск. дней скорость упала до неприемлимой. Еле ворочалась. Оказалось в самую важную таблицу добавили поле и статистики грохнулись... После обновления ст-ки всего одной таблицы база снова ожила.
...
Рейтинг: 0 / 0
25.05.2017, 17:11
    #39459864
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
человек_ниоткуда1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.
Гм... Это как? Что означает "с проверкой целостности"?
RAID5/1/10 и т.д.?
Так они могут писать "мимо" - только в путь! Какая-нибудь бяка в драйвере контроллера, и всё, понеслось!
(Дада. Я люблю сервера DEPO, куда деваться то).
человек_ниоткуда Не поможет если после проверки булет выполнено резервное копирование БД.
Ну, первым шагом джоба DBCC CHECKDB, вторым (если не обломилось на первом шаге) - полный бэкап (ну, например).
Если база, скажем так, сотня-другая гигабайт - то всё за вполне себе небольшое время завершается.
Почему нет то?
человек_ниоткуда Не очень нужна для GPT-партиций (вопрос спорный).

Почему? Объясните, правда не понимаю!
человек_ниоткуда В БД нужно включить запись checksum.

Ну, это понятно...
...
Рейтинг: 0 / 0
25.05.2017, 18:13
    #39459907
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
uaggsterчеловек_ниоткуда1) проверка целостности БД
Не нужна если БД на СХД или RAID с проверкой целостности.
...
RAID5/1/10 и т.д.?
Какая-нибудь бяка в драйвере контроллера, и всё, понеслось!
...
у нас такой случай был, бэкапилось все на тот же диск, думали что raid 10 это что-то вечное, из гранита, в итоге умерло все) после этого рейдам я доверяю еще меньше чем раньше.
...
Рейтинг: 0 / 0
25.05.2017, 18:16
    #39459910
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
Вы мне глупому нубу скажите, копать или не копать?)
Я так понял переиндексацию делать не стоит, базы максимум по 30-40 гиг и не сильно нагружены, т.е. изменения не прямо вот быстрые какие-то, просто пополняют потиху)
Что выполнять, что не выполнять? А то тут холивар разгорается :D
...
Рейтинг: 0 / 0
25.05.2017, 18:34
    #39459922
o-o
o-o
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
Бэкап всех баз раз в сутки или за сколько времени не жалко данные потерять
И dbcc checkdb всем базам раз в неделю.
...
Рейтинг: 0 / 0
25.05.2017, 18:54
    #39459937
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
1) проверяю целостность БД
2) обновляю статистику
3) делаю шринк
4) бэкаплю
так?

еще по t-sql
тут все верно по скриптам или как-то не так? а то sql сказал что он мол не отвечает за последствия предоставленного им кода)))

1) проверяю целостность БД
/chesk.sql
USE [mytest001]
GO
DBCC CHECKDB(N'mytest001') WITH NO_INFOMSGS

2) обновляю статистику
/stat.sql
use [mybase123]
GO
UPDATE STATISTICS [dbo].[Table_1]
WITH FULLSCAN

3)
/shrink.sql
USE [mytest001]
GO
DBCC SHRINKDATABASE (mytest001, TRUNCATEONLY)

4)
/backup.sql
BACKUP DATABASE [mybase123] TO DISK = N'C:\script\BASE\mybase' WITH RETAINDAYS = 3, NOFORMAT, INIT, NAME = N'mybase123_backup_2017_05_24_234900_4553030', SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'mybase123' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'mybase123' )
if @backupSetId is null begin raiserror(N'Ошибка верификации. Сведения о резервном копировании для базы данных "mybase123" не найдены.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'C:\script\BASE\mybase' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND

так?
...
Рейтинг: 0 / 0
25.05.2017, 19:10
    #39459950
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
IvanIvan48,

индусы занятные люди, если их методику программирования спроецировать на повседневность, то они штаны, например, снимали бы, разрезая их по боковому шву, а при одевании - сшивали. Выглядит правильно, в общем-то, и свежо.
...
Рейтинг: 0 / 0
25.05.2017, 21:34
    #39460000
IvanIvan48
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перестроение индексов в T-SQL
авторsp_updatestats выполняет инструкцию UPDATE STATISTICS, указывая ключевое слово ALL, на всех пользовательских и внутренних таблиц в базе данных. sp_updatestats выводит сообщения о ходе своего выполнения. По завершении обновления выдается отчет о том, что обновление статистики произведено для всех таблиц.

Процедура sp_updatestats обновляет статистику по отключенным некластеризованным индексам и не обновляет статистику по отключенным кластеризованным индексам.

Для дисковых таблиц sp_updatestats обновляет только статистику, требующую обновления, основываясь на modification_counter сведения в sys.dm_db_stats_properties представления каталога, таким образом предотвращаются ненужные обновления статистики по неизменным строкам. Статистика в таблицах, оптимизированных для памяти всегда обновляется при выполнении sp_updatestats. Поэтому не следует вызывать sp_updatestats чаще, чем необходимо.

sp_updatestats можно запустить повторную компиляцию хранимых процедур или других скомпилированного кода. Тем не менее sp_updatestats может не вызвать повторную компиляцию, если только один план запроса для целевых таблиц и индексов на них. Повторная компиляция в этих случаях будет не нужна даже при обновлении статистики.

Для баз данных с уровнем совместимости ниже 90 при выполнении процедуры sp_updatestats не сохраняет последнее значение параметра NORECOMPUTE для заданной статистики. Для баз данных с уровнем совместимости 90 или выше sp_updatestats сохраняет последнее значение параметра NORECOMPUTE для заданной статистики. Дополнительные сведения об отключении и повторном включении обновления статистики см. в разделе статистики.


я так понял, что просто по дефолту UPDATE STATISTICS делается только для строго указанных таблиц и прочего, когда их много, то видимо замудохаешься их переписывать, для удоства сделали процедуру sp_updatestats, которая автоматом все подтягивает, лучше использовать ее или все таки руками все шкрябать в скрипт?

рабочий вариант скрипта:
авторUSE [mytest001]
GO
EXEC sp_updatestats

лог после выполнения:
авторКонтекст базы данных изменен на "mytest001".
Обновление [sys].[sqlagent_jobs]
[sqlagent_jobs_clust], обновление не обязательно...
[sqlagent_jobs_nc1_name], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[sqlagent_jobsteps]
[sqlagent_jobsteps_clust], обновление не обязательно...
[sqlagent_jobsteps_nc1], обновление не обязательно...
[sqlagent_jobsteps_nc2], обновление не обязательно...
Статистика по индексам 0 обновлена, 3 не потребовало обновления.
Обновление [sys].[sqlagent_job_history]
[sqlagent_job_history_clust], обновление не обязательно...
[sqlagent_job_history_nc1], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[sqlagent_jobsteps_logs]
[sqlagent_jobsteps_logs_nc1], обновление не обязательно...
Статистика по индексам 0 обновлена, 1 не потребовало обновления.
Обновление [dbo].[Table_1]
[PK_Table_1], обновление не обязательно...
Статистика по индексам 0 обновлена, 1 не потребовало обновления.
Обновление [dbo].[sysdiagrams]
[PK__sysdiagr__C2B05B61256235CA], обновление не обязательно...
[UK_principal_name], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[queue_messages_1977058079]
[queue_clustered_index], обновление не обязательно...
[queue_secondary_index], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[queue_messages_2009058193]
[queue_clustered_index], обновление не обязательно...
[queue_secondary_index], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[queue_messages_2041058307]
[queue_clustered_index], обновление не обязательно...
[queue_secondary_index], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[filestream_tombstone_2073058421]
[FSTSClusIdx], обновление не обязательно...
[FSTSNCIdx], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[syscommittab]
[ci_commit_ts], обновление не обязательно...
[si_xdes_id], обновление не обязательно...
Статистика по индексам 0 обновлена, 2 не потребовало обновления.
Обновление [sys].[filetable_updates_2105058535]
[FFtUpdateIdx], обновление не обязательно...
Статистика по индексам 0 обновлена, 1 не потребовало обновления.
Статистика по всем таблицам обновлена.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перестроение индексов в T-SQL / 25 сообщений из 51, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]