У меня есть запрос, запущенный из приложения Delphi, которое внезапно начало отсчеты на прошлой неделе после безупречного функционирования в течение нескольких месяцев. еще более, когда он работает он замедляет сервер ползти оставляя другие пользователи полагают, что система имеет сбой Запуск от Management Studio, я остановить запрос после более 5 минут спиннинг SERVER SqlExpress ID 2008 R2Запрос, который работал в течение нескольких месяцев, теперь отключен
Ныне задеть запрос
SELECT *
FROM SignelOutilsListeJobs_View4
WHERE (CreatedDate > (GETDATE() - 365))
Чтобы сделать его интересным здесь является время, необходимое & строки вернуться, когда я просто изменить количество дней назад. Мониторинг активности не показывает больше, чем выполняется запрос
SELECT *
FROM SignelOutilsListeJobs_View4 -- 00.00.02 38882 ROWS
SELECT *
FROM SignelOutilsListeJobs_View4
WHERE (CreatedDate > (GETDATE() - 600)) -- 00.00.02 16217 ROWS
SELECT *
FROM SignelOutilsListeJobs_View4
WHERE (CreatedDate > (GETDATE() - 500)) -- 00.00.02 13013 ROWS
SELECT *
FROM SignelOutilsListeJobs_View4
WHERE (CreatedDate > (GETDATE() - 200)) -- 00.00.12 4118 ROWS
Так что мне осталось интересно, что здесь происходит? Есть идеи?
Благодаря
Первое предположение: плохой план запроса получил кэшируются для этого запроса. –
... почему бы не просто предварительно вычислить предел даты в вашем коде Delphi, а затем передать его как параметр запроса? Он может быть менее подвержен ошибкам, позволяет легко повторно использовать один и тот же оператор с различными смещениями, а также совместим со всеми бэкэндами БД ... –
Не ответ на вызов производительности, но вы должны использовать DATEADD вместо математического ярлыка. Понятно, что вы делаете и не полагаетесь на поведение по умолчанию, которое может измениться. DATEADD (день, -200, getdate()) –