Cache planów wykonania w MS SQL Server (procedure cache)

29-Lis-2010

Kiedy po raz pierwszy wykonujesz określone zapytanie w SQL serwerze, jest dla tego zapytania tworzony plan zapytania (Execution plan). Właściwie to nawet nie jeden execution plan, ale wiele, a wszystko po to aby potem spośród tych wielu planów wybrać najardziej optymalny. Ten najlepszy plan wykonania jest następnie komilowany i przechowywany na w procedure cache.

Kiedy to zapytanie wykonujesz kolejny raz, serwr nie musi na nowo przeprowadzać selekcji nowego planu wykonania, ani go kompilować. Może skorzystać z odłożonego wcześniej planu i skompilowanej procedury w procedure cache.

Jak sprawdzić przebieg tego procesu?

Jest w serwerze specjalny widok dynamiczny zwany sys.dm_exec_query_stats. Kolumna execution_count mówi ile razy dany plan wykonania został użyty. Zapytaniem:

można sprawdzić czy istnieją jakieś procedury wykonywane częściej niż inne. Nie wierzysz? Wpisz w innej sesji polecenie:

Wróć teraz do poprzedniej sesji i zobacz jak jeden z rekordów przyjmuje coraz większą wartość w kolumnie execution_count! To właśnie wyżej zapisane zapytanie wywoływane w nieskończonej pętli.

Przy okazji – polecenie

powoduje opróżnienie procedure cache. Jeżeli jednak wykonasz to polecenie na maszynie produkcyjnej, to teraz serwer trochę się zmęczy, żeby znowu wymyślić na nowo wszystkie plany wykonania…

Dodaj komentarz:

Autor: Rafał Kraik