Найти устаревшую статистику на сервере SQL?

У меня есть хранимая процедура, которая ищет "плохие" данные в нашей базе данных приложения (sql server 2016 enterprise, ~ 500gb данных). "плохо" с точки зрения бизнеса / процесса.

Обычно на выполнение требуется 10-30 секунд. Через несколько дней выполнение внезапно займет 5+ минут.

Мое текущее решение - пересчитать всю статистику, и время выполнения снова низкое:

EXECUTE dbo.IndexOptimize @Databases = 'myDB',
 @FragmentationLow = NULL,
 @FragmentationMedium = NULL,
 @FragmentationHigh = NULL,
 @FragmentationLevel1 = 5,
 @FragmentationLevel2 = 30,
 @UpdateStatistics = 'ALL',
 @OnlyModifiedStatistics = 'Y'

Оптимизация индекса, Ола Халленгрен

Очевидно, регенерация статистики приводит к новый и лучший план запроса. Есть ли целевой способ выявить недостоверную статистику, которая вводит план медленного запроса? Или как мне найти причину этого? Таблицы, индексы, статистика и эта хранимая процедура сложны, поэтому я не могу об этом догадаться. Могу ли я программно сравнить статистику «до» и «после» обновления?

У нас есть много отфильтрованных индексов, которые обычно очень крошечные, поэтому правило 20% может применяться к ним часто.

Индексы оптимизируются еженедельно.

0
задан 22 June 2018 в 17:41
1 ответ

Не уверен, каков настоящий ответ (пока), но после предложения @yoonix я переместил вопрос на dba.stackexchange.com

0
ответ дан 5 December 2019 в 05:48

Теги

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