У меня есть хранимая процедура, которая ищет «плохие» данные в нашей базе данных приложений (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