Когда обновлять статистику?

42

Я унаследовал планы обслуживания, которые выполняют следующее:

  • Очистить старые данные
  • Проверяет целостность БД
  • Выполняет резервное копирование базы данных и журнала транзакций
  • Реорганизует наши индексы
  • Статистика обновлений
  • Удалить старые резервные копии и файлы плана обслуживания

Из 23-минутного плана обслуживания обновление статистики занимает ошеломляющие 13 минут. В течение этого 13-минутного периода доступ к базе данных блокируется (или, по крайней мере, репликация из этой БД в нашу другую приостанавливается).

Мой вопрос:

Когда мы должны обновлять статистику и почему?

Это похоже на то, что мы должны делать реже, чем каждый день. Я пытаюсь вывести нас из разума «только потому, что» делать ненужное обслуживание.

Лук-Knight
источник
2
Как часто / как какие-либо строки вставляются / обновляются / удаляются? Для меня это решающий фактор.
JNK
@JNK Мы вставляем ~ 70000 строк в день по всей базе данных. Обновление ~ 100 строк в месяц.
Лук-рыцарь
1 - это более уместно, если мы знаем по TABLE, сколько строк, а 2 - как процент. 70 тыс. Строк в день в таблице 1 м. Сильно отличается от таблицы в 500 м.
JNK
Я бы порекомендовал использовать что-то вроде ola.hallengren.com/… Это решение только перестраивает / реорганизует и обновляет то, что необходимо, таким образом, вы можете сократить время, которое занимает ваш план обслуживания, а также сэкономить много места в журнале ..
Питер

Ответы:

28

Если у вас нет окна обслуживания, ежедневное обновление статистики, вероятно, немного излишне. Особенно, если у вас включена функция автоматического обновления статистики для базы данных. В своем исходном сообщении вы сказали, что пользователи видят снижение производительности из-за этого плана обслуживания. Нет ли другого времени для запуска этого плана обслуживания? Нет другого окна? Я вижу, что ваш план охватывает реорганизацию индексов, когда вы перестраиваете индексы? Когда эта операция происходит, статистика автоматически обновляется (при условии, что она не отключена для индекса).

То, как часто вы должны обновлять статистику, во многом зависит от того, насколько сильно изменяются ваши индексы и данные . Если есть очень мало модификации ( INSERT, UPDATE, DELETE) к данным, то вы могли бы иметь более редкий график работу обновления статистики.

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

Если вы используете статистику автоматического обновления для своей базы данных, см. Эту ссылку для определения порога обновления статистики.

Томас Стрингер
источник
Мы перестраиваем индексы раз в неделю.
Лук-рыцарь
5
@ Onion-Knight Затем вы также обновляете статистику раз в неделю, когда перестраиваете свои индексы. Этого может быть достаточно, если вы перестраиваете общий индекс для всей базы данных.
Томас Стрингер
25

Когда обновлять статистику?

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

тогда я предлагаю остановить команду Статистика обновлений из ваших планов обслуживания

обновление статистики является важным и полезным: 1. позволяет оптимизатору запросов SQL Server последовательно генерировать хорошие планы запросов, сохраняя при этом низкие затраты на разработку и администрирование. 2. Статистика используется оптимизатором запросов для оценки избирательности выражений и, следовательно, размера промежуточных данных. и окончательные результаты запроса. 3. Хорошая статистика позволяет оптимизатору точно оценить стоимость различных планов запросов, а затем выбрать качественный план.


Если вы хотите обновить статистику вручную, вы должны сначала знать, когда статистика обновляется автоматически

Если оптимизатору запросов SQL Server требуется статистика для определенного столбца в таблице, которая подверглась существенному обновлению с момента последнего создания или обновления статистики, SQL Server автоматически обновляет статистику путем выборки значений столбца (с помощью статистики автоматического обновления) , Автоматическое обновление статистики запускается оптимизацией запроса или выполнением скомпилированного плана и включает только подмножество столбцов, указанных в запросе. Статистика обновляется перед компиляцией запроса, если AUTO_UPDATE_STATISTCS_ASYNC выключено

Вот хорошие статьи, которые говорят о том, когда обновление статистики запускается на сервере SQL

  1. из простого разговора Раздел 13. Когда происходит автоматическое обновление статистики?
  2. support.microsoft Раздел: Автоматизация определения Autostats
  3. Раздел msdn.microsoft : ведение статистики в SQL Server 2008

узнав, когда запускается статистика, это поможет вам решить, когда обновлять статистику вручную

Чтобы узнать больше о статистике и ее влиянии на производительность, я рекомендую BrentOzar и Kimberly в sqlskills очень хорошие блоги и блоггеры.

AmmarR
источник