Странная проблема производительности отчетов сервера SQL, связанная со статистикой обновления
Я получил сложный отчет, используя службу отчетов, отчет, подключенный к базе данных SQl 2005, и вызов ряда процедур и функций хранилища. Сначала он работает нормально, но через несколько месяцев (данные растут) возникает ошибка тайм-аута.
Я создал несколько индексов для повышения производительности, но странно то, что он работает после создания индекса, но выдает ту же ошибку на следующий день. Затем я пытаюсь обновить статистику базы данных, она снова работает (время выполнения запроса улучшается в 10 раз). Но опять же, он перестает работать на следующий день.
Теперь временное решение заключается в том, что я запускаю статистику обновлений каждый час. Но я не могу найти разумного объяснения этому поведению. база данных не очень занята, за один день не будет обновлено много данных. как статистика обновлений может иметь такое большое значение?
2 ответа
Я подозреваю, что у вас есть сниффинг параметров. Обновление статистики просто вынуждает отказаться от всех планов запросов, так что, похоже, оно работает какое-то время
CREATE PROC dbo.MyReport
@SignatureParam varchar(10),
...
AS
...
DECLARE @MaskedParam varchar(10), ...
SELECT @MaskedParam = @SignatureParam, ...
SELECT...WHERE column = @MaskedParam AND ...
...
GO
Я видел эту проблему, когда индексы в базовых таблицах должны быть скорректированы, или SQL должен работать.
Индекс перестроения и статистика обновлений считывают таблицу в кеш, что повышает производительность. На следующий день таблица была выгружена из кеша и проблемы с производительностью возвращаются.
SQL Profiler очень полезен в этих ситуациях, чтобы определить, какие изменения выполняются.