Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jakie czynniki mogą spowodować ponowną kompilację procedur zapisanych w programie SQL Server?

Istnieje kilka sposobów, aby zapewnić ponowną kompilację procedury składowanej:

  • używając WITH RECOMPILE ,
  • uczynienie procedury składowanej dynamiczną (pomyśl exec() )
  • oznaczenie proc do rekompilacji za pomocą sp_recompile .
  • zmiana schematu, na którym opiera się buforowany plan zapytań
  • wywołanie DBCC FREEPROCCACHE
  • Na poziomie zapytania indywidualna instrukcja w proc może zostać ponownie skompilowana za pomocą wskazówki dotyczącej zapytania RECOMPILE (SQL 2008).

Czynniki ponownej kompilacji

Poza wymienionymi powyżej twardymi czynnikami, co powoduje ponowną kompilację procedury składowanej? Cóż, wiele rzeczy. Niektóre z nich przeplatają się z powyższą listą, ale chcę je ponownie przedstawić, ponieważ może to nie być oczywiste.

  • Wstawianie lub usuwanie dużej ilości danych (gęstość danych w indeksach i tabelach często kontroluje plany zapytań)
  • Przebudowa indeksów (zmiana w podstawowych obiektach)
  • Tworzenie/usuwanie tabel tymczasowych (ponownie, podstawowe zmiany DML).
  • plan zapytań wygasa (myśl, że nie był ostatnio używany, a sql chce wyczyścić zużycie pamięci)

Nie jest to w żadnym wypadku wyczerpująca lista. Optymalizator zapytań ewoluuje i zaskakuje bez względu na to, jak długo korzystasz z SQL Server. Ale oto kilka zasobów, które mogą być przydatne:

ALE CZEKAJ – WIĘCEJ!

Mając to na uwadze, założenie w twoim pytaniu jest takie, że rekompilacje zawsze są złe dla wydajności. W rzeczywistości często ponowna kompilacja jest dobra.

Więc kiedy chciałbyś, żeby się ponownie skompilował? Spójrzmy na jeden przykład proc, który wyszukuje według nazwiska. Procedury przechowywane umożliwiają „podsłuchiwanie parametrów ' co jest błogosławieństwem (jeśli działa na ciebie) i przekleństwem (jeśli działa przeciwko tobie). Najpierw przejdź, ktoś szuka w Zebr% dla Żerbrowskiego. Indeks nazwisk uświadamia sobie, że jest to bardzo specyficzne i zwróci, powiedzmy, 3 wiersze z miliona -- więc budowany jest jeden plan wykonania. Po skompilowaniu proc dla wyniku o niskim wierszu, następne wyszukiwanie to S% . Cóż, S to Twoje najbardziej popularne imię i pasuje do 93 543 wierszy na 1 milion.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest CZAS STATYSTYKI w SQL Server?

  2. Jak w SQL mogę podzielić wartości w sumie bitów na ciąg rozdzielany przecinkami?

  3. Jak przekonwertować ciąg na datę/godzinę w SQL Server za pomocą funkcji CONVERT()

  4. Co to jest @@MAX_PRECISION w programie SQL Server?

  5. Czy mogę zserializować dane daty i godziny w formacie JSON w zapytaniu SQL Server 2008?