Странная проблема производительности отчетов сервера 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 очень полезен в этих ситуациях, чтобы определить, какие изменения выполняются.

Другие вопросы по тегам