Как часто следует вызывать sp_updatestats?

A мой вопрос, который касался медленно исполняемого запроса, представил мне функцию sp_updatestats(). Я хочу предпринять активные действия, чтобы называть его на регулярной основе, а не ждать, когда мои запросы будут случайным образом запускать тайм-аут в рабочее время. Я подумывал забегать в полночь каждую ночь. Мои вопросы:

  • Есть ли полезный способ определить, когда следует вызывать эту процедуру, а не слепо запускать ее каждую ночь? В документации говорится, что SQL Server автоматически обновляет эти статистические данные. Но с какой частотой? Как узнать, когда мне нужно войти и выполнить его вручную?

  • Заблокирована ли база данных во время выполнения этой процедуры? Кажется, на это ушло около четырех или пяти минут. Доступна ли база данных в течение этого периода или будут ли попытки блокировать запросы? Мои тесты показывают, что я все еще могу выполнять запросы, но я не уверен, что это только потому, что мне повезло, обратившись к таблице, для которой статистика не была рассчитана в этот момент.

Ответ 1

Вот цитата из книг в сети:

sp_updatestats обновляет только статистику, требующую обновления на основе информации о rowmodctr в представлении каталога sys.sysindexes, что позволяет избежать ненужных обновлений статистики в неизменных строках.

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

Пол Рэндал - Как работает rowmodctr

Kendra Маленькая статья - Стальная статистика

Белая книга за 2008 год

От Внутренней книги SQL Server 2008 от Kalen Delany. Если у вас нет копии этой книги, вы должны ее получить.

До 2008 года использовался rowmodctr. После 2008 года используется colmodctr.

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

Для небольших таблиц должно быть выполнено не менее 500 изменений. Для больших таблиц не менее 500 изменений плюс 20% от количества строк. Для очень маленьких таблиц должно быть не менее 6 изменений.

И последнее, но не менее важное: существуют опции FULL, SAMPLE N% и RE-SAMPLE, которые определяют, сколько строк сканировать для создания новой статистики.

Итак...

Что это означает в двух словах?

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