Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Faktor-faktor apa yang dapat menyebabkan Kompilasi Ulang Prosedur Tersimpan di SQL Server?

Ada beberapa cara untuk memastikan kompilasi ulang prosedur tersimpan:

  • menggunakan WITH RECOMPILE ,
  • membuat prosedur tersimpan menjadi dinamis (pikirkan exec() )
  • menandai proc untuk dikompilasi ulang dengan sp_recompile .
  • mengubah skema yang diandalkan oleh rencana kueri yang di-cache
  • memanggil DBCC FREEPROCCACHE
  • Pada tingkat kueri, pernyataan individual dalam proc dapat dikompilasi ulang dengan petunjuk kueri RECOMPILE (SQL 2008).

Faktor dalam Kompilasi Ulang

Selain faktor-faktor keras yang tercantum di atas, apa yang menyebabkan kompilasi ulang prosedur tersimpan? Yah, banyak hal. Beberapa di antaranya terjalin dengan daftar di atas, tetapi saya ingin menyajikannya kembali karena mungkin tidak terlalu jelas.

  • Memasukkan atau menghapus banyak data (kepadatan data dalam indeks &tabel sering kali mengontrol rencana kueri)
  • Membangun kembali indeks (perubahan pada objek yang mendasarinya)
  • Membuat/menjatuhkan tabel sementara (sekali lagi, mendasari perubahan DML).
  • paket kueri sudah habis (pikirkan tidak digunakan baru-baru ini dan sql ingin membersihkan penggunaan memori)

Ini sama sekali bukan daftar yang lengkap. Pengoptimal kueri berkembang dan mengejutkan tidak peduli berapa lama Anda telah menggunakan SQL Server. Tapi berikut adalah beberapa sumber yang mungkin berguna:

TAPI TUNGGU - ADA LAGI !

Dengan demikian, anggapan dalam pertanyaan Anda adalah bahwa kompilasi ulang selalu buruk untuk kinerja. Bahkan, seringkali pembalasan itu baik.

Jadi kapan Anda ingin mengkompilasi ulang? Mari kita lihat salah satu contoh proc yang mencari berdasarkan nama belakang. Prosedur tersimpan melakukan 'pengendus parameter ' yang merupakan berkah (jika bekerja untuk Anda) dan kutukan (jika bekerja melawan Anda). Lulus pertama seseorang menelusuri Zebr% untuk zerbrowski. Indeks nama belakang menyadari ini sangat spesifik dan akan mengembalikan, katakanlah, 3 baris dari satu juta -- jadi satu rencana eksekusi dibuat. Dengan proc yang dikompilasi untuk hasil baris rendah, pencarian berikutnya adalah untuk S% . Nah, S adalah nama Anda yang paling umum dan cocok dengan 93.543 baris dari 1 juta.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buat Pemicu untuk mencatat SQL yang memengaruhi tabel?

  2. Msg 8672, Level 16, State 1, Line 1 Pernyataan MERGE mencoba untuk UPDATE atau DELETE baris yang sama lebih dari sekali

  3. kehilangan skala saat melakukan perhitungan

  4. Cara membuat daftar semua tanggal di antara dua tanggal

  5. Cara Melihat Beberapa Kueri dan Hasil Berdampingan di SQL Server Management Studio (SSMS) - Tutorial SQL Server / TSQL Bagian 14