Конкретната заявка работи добре директно или когато се направи някаква промяна в нея, но изпълнението в текущото състояние отнема повече време

Основна актуализация след няколко дни отстраняване на грешки:

Пускам няколко заявки, подобни на:

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 на една таблица, която беше във всичките 3 заявки и сега нещата вървят добре. - person jzd; 28.01.2011