Конкретный запрос работает нормально напрямую или когда в него вносятся какие-либо изменения, но в текущем состоянии выполнение занимает больше времени

Основное обновление после пары дней отладки:

Я запускаю несколько запросов, похожих на:

SELECT RTRIM(part) as part 
FROM tableP pm 
LEFT join tableS s on pm.id = s.id 
INNER JOIN tableC cm ON cm.id = pm.id 
WHERE name = 'NGW'  AND  status NOT IN ('NL', 'Z') 
GROUP BY RTRIM(part), isnull(s.value,0) 
ORDER BY isnull(s.value,0) 

Он запускается на Java следующим образом:

    PreparedStatement select = con.prepareStatement(
        "SELECT RTRIM(part) as part" +
        "FROM tableP pm " +
        "LEFT JOIN tableS s ON pm.id= s.id " +
        "INNER JOIN tableC cm ON cm.id= pm.id " +
        "WHERE name =? AND  status NOT IN ('NL', 'Z') " + 
        "GROUP BY RTRIM(part), isnull(s.value,0) " +
        "ORDER BY isnull(s.value,0) " );
    select.setString(1, name);
    ResultSet rs = select.executeQuery();
    while(rs.next()){
          ... Data is Loaded...

Запросы выполнялись нормально внутри приложения Java. Внезапно 3 или 4 запроса в такой форме перешли от менее секунды к более чем минуте.

Я скопировал точный запрос из SQL Profiler, и при запуске непосредственно в базе данных он выполняется менее чем за секунду. Я начал вносить изменения в запрос и обнаружил, что любое изменение в запросе вернет его к производительности в 1 секунду, даже добавив один пробел между операторами. Но как только я вернул его в исходное точное состояние, это заняло бы 60+ секунд.

Основной вопрос. Итак, у меня есть исправление, но что может привести к тому, что запрос будет выполняться по-другому, даже если изменить всего лишь пробел?


person jzd    schedule 25.01.2011    source источник
comment
Пожалуйста, дайте более точный запрос, с фильтрами, с параметрами. Из Java и MSSQL EM.   -  person gbn    schedule 25.01.2011
comment
@gbn, обновленный вопрос, содержащий точный запрос (имена изменены для защиты невиновных) и код Java, который его вызывает.   -  person jzd    schedule 25.01.2011
comment
Спасибо. Это исключает то, что я собирался ответить... извините!   -  person gbn    schedule 25.01.2011
comment
Обновил вопрос теперь, когда я сосредоточился на проблеме.   -  person jzd    schedule 28.01.2011


Ответы (1)


Возможно ли, что план выполнения поврежден? Можете ли вы попробовать явно очистить кеш плана? http://msdn.microsoft.com/en-us/library/aa175244(v=sql.80).aspx

person Matthew    schedule 28.01.2011
comment
Звучит логично, я читаю вашу ссылку и попробую. - person jzd; 28.01.2011
comment
Это сработало отлично. В частности, я использовал sp_recompile для одной таблицы, которая была во всех трех запросах, и теперь все работает нормально. - person jzd; 28.01.2011