Зачем устанавливать автоматическую статистику обновлений в значение «ложь»?

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

Я вижу ежедневные обновления индексов (я могу справиться с этим), а также ежедневное ручное обновление статистики.

Около половины баз данных было установлено в Auto Update Statistics = False, по причинам, которые не ясны, кроме того, что мне говорят, что это должно уменьшить «проблемы производительности» ...

Я всегда думал и работал над лучшей практикой установки этого True и считал, что обновление вручную не требуется, если этот параметр был True. Я не прав?

Может ли кто-нибудь объяснить, в чем преимущество будет заключаться в том, что этот параметр установлен как False, но вместо этого он делает ежедневное обновление вручную?

Я должен упомянуть, что некоторые из баз данных очень транзакционны (миллионы Вкладышей, Удалений, Обновлений в день). Другие имеют низкую скорость транзакций, а некоторые - только для чтения. Существует не рифма или причина, хотя по умолчанию для параметра «Автообновление» установлено значение «Ложь». Кажется, это лотерея.

10 голосов | спросил Molenpad 4 Mayam16 2016, 11:42:54

3 ответа


6

Вы правы, я также считаю, что в большинстве случаев значение Auto Update statistics должно быть равно true, мы должны разрешить SQL Server решать, когда чтобы обновить статистику и поверить, что она делает хорошую работу. Когда это значение равно true, убедитесь, что статистика обновлена ​​о распределении данных в поле, что в конечном итоге поможет оптимизатору подготовить лучший план. Важно отметить, что Auto обновляет статистику, когда 20% данных изменяется в таблице. Таким образом, вы не должны чувствовать, что на столе со 100K строк, если обновляется 10 строк, тогда будет обновлено обновление статуса.

Более глубокий анализ сделан Полом Рэндалом в блоге Понимание Когда Статистика будет автоматически обновляться . Я не видел никакого недостатка, если для этого параметра установлено значение true. Да, вы можете увидеть некоторые операции ввода-вывода, если для этой опции установлено значение true.

Важный вывод, который можно сделать из блога,

  

Даже если статистика устаревает в результате изменения,   он не будет автоматически обновляться после завершения модификации.   статистика автоматически обновится при следующем использовании плана запроса   он.

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

ответил Shanky 4 Maypm16 2016, 12:22:15
9

Это слишком длинный комментарий, поэтому я буду перекликаться с другим случаем, когда можно было бы отключить статистику автоматического обновления. Я работал с базами данных, поддерживающими большие объемы OLTP-нагрузки и строгой SLA-производительности запросов в миллисекундах. Почти все запросы были тривиальны с большим вниманием к деталям настройки запроса и индекса, а некоторые из таблиц были довольно большими. Не было большой ценности при обновлении статистики во время пиковых периодов в этой ситуации, и статистика автоматического обновления нарушила бы SLA. Следовательно, техническое обслуживание проводилось в непиковые периоды через запланированное задание.

Другой вариант - включить оба AUTO_UPDATE_STATISTICS и AUTO_UPDATE_STATISTICS_ASYNC. Это позволит запросам выполнять планы выполнения на основе устаревшей статистики, а не выполнять накладные расходы на обновление статистики синхронно. Это особенно подходит для рабочей нагрузки OLTP, если размер сервера соответствует рабочей нагрузке запроса и обновлению фоновой статистики.

ответил Dan Guzman 4 Maypm16 2016, 14:04:52
5

Вообще-то я бы сказал, что автоматическое обновление статистики полезно. Но, как и любая настройка, есть причины, по которым вы можете включить или выключить ее.

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

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

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

ответил Aaron Bertrand 4 Maypm16 2016, 12:16:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132