Witam.
Mam taki problem.
Procedura pisana w T-SQL pod MSSQL 2014 zwraca 70 kolumn. W pewnych warunkach (większa ilość danych, baza od dłuższego czasu nie reindeksowana) zaczyna się mulić. Dobrze to widać podczas testów procedury wykonywanych w Managenent Studio. Po usunięciu jej i założeniu od nowa pierwsze wykonanie potrafi trwać około 20 sekund. Następne wykonanie to już milisekundy.
Jak udało mi się zdiagnozować przyczyną takiego opóźnienia jest zastosowanie klauzuli ORDER BY w zapytaniu. Wtedy takie opóźnienie występuje.
Co ciekawe sprawdzam czas wykonania zapytania w samej procedurze (zapisuję czas przed i po zapytaniu metodą GETDATE() i pokazuję ich różnicę).
Czas ten wynosi kilka milisekund a czas wykonania całej procedury to 20 sekund. Przed i po wywołaniu tego zapytania w środku procedury nic już się nie wykonuje.
Czy możecie mi wytłumaczyć skąd taka różnica w czasach wykonania?
I jak rozwiązać ten problem?
Dodam że ORDER BY jest wykonywany po 9 polach, a zmniejszenie sortowania do 1 pola skutkuje skróceniem czasu wykonania procedury do dwóch sekund. Chyba że zastosuję pole mało rozróżnialne wtedy czas wykonania nie skraca się.
Próbowałem zapisać wynik do tabeli tymczasowej bez sortowania i wynik zwrócić z tej tabeli i ją posortować ale wtedy podobne opóźnienie daje wpis do tabeli. Niezależnie czy jest to tabela tymczasowa czy zwykła.
Po reindeksacji bazy efekt opóźnienia znika.
Ale niestety nie mogę robić często reindeksacji a efekt opóźnienia pojawia się co jakiś czas, gdy baza ma większą ilość danych.
Czy ktoś może spotkał się już z takim przypadkiem?