Я намагаюся зрозуміти проблему, яку ми маємо з SQL Server 2000. Ми є веб-сайтом з помірною трансакцією, і у нас є збережена програма, sp_GetCurrentTransactions
яка називається, яка приймає ID клієнта та дві дати.
Тепер, залежно від дат та замовника, цей запит може повернути що-небудь від нуля до 1000-ти рядків.
Проблема: те, що ми пережили, полягає в тому, що раптом ми отримаємо ряд помилок (як правило, Execution Timeout Expired
або подібних) для конкретного клієнта, коли вони намагаються виконати цей збережений процес. Тож ми вивчаємо запит, запускаємо його в SSMS і виявляємо, що він займає 30 років. Таким чином, ми перекомпілюємо збережені proc і -bang- він працює зараз через 300 мс.
Я говорив з нашою DBA про це. Він сказав мені, що база даних створила план запитів, коли ми створили збережений додаток. Він сказав, що це гарний план для цього набору параметрів, але якщо ви кинете на нього певний набір параметрів, то план буде не найкращим планом для цих даних, і тому ви побачите, що він працює повільно.
Представлені мною варіанти - це переміщення цього запиту проблеми із збереженого протоколу та повернення в динамічний SQL, у якому створений план виконання на кожному запуску.
Це відчувається як крок назад до мене, і я відчуваю, що повинен бути шлях для цього. Чи є якийсь інший спосіб вирішити це питання?
Будь-які відповіді високо оцінені.