Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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