У меня есть хранимая процедура, которая ищет "плохие" данные в нашей базе данных приложения (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% может применяться к ним часто.
Индексы оптимизируются еженедельно.
Не уверен, каков настоящий ответ (пока), но после предложения @yoonix я переместил вопрос на dba.stackexchange.com