Mam kilka pytań dotyczących wydajności programu Microsoft SQL Server 2008, głównie dotyczących planów wykonania.Buforowanie wykonania instrukcji SQL
Według, aby MSDN, procedury składowane mają lepszą wydajność w porównaniu do bezpośrednich zapytań SQL, ponieważ:
Baza danych może przygotować, optymalizacji i buforować plan wykonania tak, że plan wykonania mogą być ponownie wykorzystane przy A pozniej.
Moje pierwsze pytanie brzmi: dlaczego tak jest. Wcześniej czytałem, że przy użyciu sparametryzowanych zapytań (przygotowanych instrukcji) plan wykonania jest buforowany dla kolejnych wykonań z potencjalnie różnymi wartościami (kontekst wykonania). Czy procedura przechowywana nadal byłaby bardziej wydajna? Jeśli tak, czy plan wykonania procedury składowanej jest odtwarzany tylko na żądanie, czy jest po prostu mniej prawdopodobne, że zostanie wyczyszczony z pamięci podręcznej? Czy sparametryzowane zapytanie jest traktowane jako ad-hoc query, co oznacza, że plan wykonania zostanie prawdopodobnie usunięty z pamięci podręcznej?
Ponadto, ponieważ nadal jestem nowicjuszem w tej dziedzinie, zastanawiam się, czy istnieją pewne polecenia, które działają tylko w T-SQL. Mam zapytanie, które trwa ~ 12 sekund, aby wykonać w pierwszym uruchomieniu, a następnie ~ 3 sekundy po tym, zarówno w Microsoft SQL Management Studio i ADO.NET. Zapytanie ma być nieskuteczne w ramach mojej prezentacji. Chodzi o to, że w moim zapytaniu używam zarówno CHECKPOINT
i DBCC DROPCLEANBUFFERS
jak i , a także OPTION (RECOMPILE)
. Jednak co najmniej dwa pierwsze nie wydają się mieć znaczenia, ponieważ zapytanie trwa jeszcze 3 sekundy. Zgaduję, że to dlatego, że pamięć podręczna danych nie jest czyszczona. Wszelkie pomysły, dlaczego pamięć podręczna nie wydaje się być wyczyszczone, lub wszelkie pomysły, dlaczego moje zapytanie jest znacznie szybciej po pierwszym wykonaniu?
Oto pytania, na które mogę teraz liczyć.
Dobre pytania - podzieliłbym ten post na kilka postów, może jeden post na pytanie o przechowywane-proc vs sparametryzowane zapytania, jeden post dla wielu uruchomień zapytania, itp. –
Być może masz rację; mój umysł myślał, żeby nie spamować. :-) – Andy0708
Ideą stackoverflow jest utrzymywanie pytań skupionych na tym, aby z kolei odpowiedzi mogły być również skupione - więc nie martw się o załadowanie strony z mnóstwem pytań. –