SQL Server 2005 - Как часто вы должны перестраивать индексы? - PullRequest
7 голосов
/ 26 августа 2009

Я недавно взял на себя управление проектом, и у них есть настройка задания SQL для запуска каждые три часа, которая перестраивает индексы, найденные в таблицах базы данных членства ASP.NET.

Это кажется довольно высоким, перестраивать индексы 8 раз в день. Каждый день я получаю около 2000 новых пользователей и около 2 миллионов зарегистрированных пользователей.

Что бы вы посоветовали для правильного графика перестроения индекса?

Ответы [ 4 ]

11 голосов
/ 26 августа 2009

Ваши взаимные блокировки определенно могут быть связаны с перестройкой индексов. Также нет сомнений в том, что эти индексы не нужно перестраивать так часто. Хотя, как минимум, вам следует рассмотреть возможность использования опции ONLINE, если вы можете предотвратить падение индекса до его перестройки.

Вот руководство, которое мы используем:

Индекс должен быть перестроен, когда индекс фрагментация больше 40%. Индекс должны быть реорганизованы, когда индекс фрагментация составляет от 10% до 40%. Процесс перестроения индекса использует больше ресурсов процессора и это блокирует ресурсы базы данных. Версия для разработки SQL Server и Корпоративная версия имеет опцию ONLINE, который может быть включен, когда индекс перестроен. Опция ONLINE сохранит индекс доступно при перестройке.

Источник: http://blog.sqlauthority.com/2007/12/22/sql-server-difference-between-index-rebuild-and-index-reorganize-explained-with-t-sql-script/

6 голосов
/ 26 августа 2009

Хорошее эмпирическое правило: REBUILD, когда фрагментировано более 30%, REORGANIZE, когда между 10% и 30%.

Не беспокойтесь ни о одной из таблиц менее 1000 страниц, вы не заметите, и даже после запуска REBUILD для более 30%, он часто остается на уровне 30%.

Вероятно, вы должны стремиться к перестройке / реорганизации довольно редко, самое большее в неделю для средней базы данных. Если вам приходится выполнять дефрагментацию индексов чаще, чем это, вам, вероятно, придется пересмотреть ваши коэффициенты заполнения и отступы.

Исключение составляет после массовой загрузки данных, когда может быть распространено фрагментирование индексов (иногда лучше отключить индекс или отбросить индексы и перестроить или их в зависимости от загружаемых данных).

Итак, 8 раз в день кажутся чрезмерными.

Ссылки:
http://technet.microsoft.com/en-us/library/ms189858.aspx
http://www.sqlmusings.com/2009/03/15/a-more-effective-selective-index-rebuildreorganize-strategy/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/
http://realworlddba.wordpress.com/2008/01/27/indexes-to-rebuild-or-reorganize/

3 голосов
/ 26 августа 2009

Захватите график взаимоблокировки, и вы получите реальный ответ о взаимоблокировке, в отличие от догадки . Учитывая, что взаимоблокировка является (или, по крайней мере, должна быть) довольно редкой ситуацией (менее 10 / с), вы можете довольно безопасно подключать профилировщик в течение длительного времени и захватывать только График блокировок / тупиков событие.

0 голосов
/ 26 августа 2009

Влияет ли восстановление на стабильность системы или занимает слишком много системного времени?

Если вы ответите "нет" - не трогайте :)

...