Kompilasi ulang tak terbatas yang mungkin terdeteksi untuk SQLHANDLE

10

Saya telah menemukan pesan kesalahan aneh pada log galat sql:

Bocss: kebuntuan yang sama terjadi setiap jam - perlu diselidiki

Juga banyak kompilasi yang terdaftar dalam log kesalahan untuk SPID lain seperti contoh berikut:

2015/09/04 14: 30: 10, spid64, Unknown, A mengkompilasi ulang tak terbatas yang mungkin terdeteksi untuk SQLHANDLE 0x0200000059631A288882589E0C54B76404CAE1B97E08D3680000000000000000000000000000000000000000 PlanHandle 0x0600040059631A2860A62B654100000001000000000000000000000000000000000000000000000000000000 dimulai dari offset 1038 ending diimbangi 2600. Alasan mengkompilasi ulang terakhir adalah 2. 2015/09/04 14:30:10 , spid150, Unknown, A mengkompilasi ulang tak terbatas yang mungkin terdeteksi untuk SQLHANDLE 0x02000000EF886F018C4E0B163812B8B20150FE8FC7E6A06A0000000000000000000000000000000000000000 PlanHandle 0x06000400EF886F01901A816E0600000001000000000000000000000000000000000000000000000000000000 dimulai dari offset 998 ending diimbangi 2520. alasan mengkompilasi ulang terakhir adalah 2. 2015/09/04 14: 30: 09, spid67, Unknown,Sebuah mengkompilasi ulang tak terbatas yang mungkin terdeteksi untuk SQLHANDLE 0x0200000057C4C632D9052275CFF2B683B80F29501EE91D730000000000000000000000000000000000000000 PlanHandle 0x0600040057C4C63200EAC2BE3000000001000000000000000000000000000000000000000000000000000000 mulai diimbangi 1064 ending diimbangi 2652. Alasan mengkompilasi ulang terakhir adalah 2. 2015/09/04 14: 30: 09, spid163, Unknown, A mengkompilasi ulang tak terbatas yang mungkin terdeteksi untuk SQLHANDLE 0x02000000E7C7BF0E5D70DE55759C7842860272AD474D69AB0000000000000000000000000000000000000000 PlanHandle 0x06000400E7C7BF0EF0EB68A52C0000000100000000000000000000000000000000000000000000000000000000000000 mulai offset 1028 dan offset 2580. Alasan kompilasi terakhir adalah 2.

apa yang bisa menyebabkan ini?

Sepertinya saya tidak memiliki paket dalam cache lagi. masukkan deskripsi gambar di sini

mengikuti saran dari posting ini http://www.sqlservercentral.com/Forums/Topic1479420-146-1.aspx

kemudian sebagai langkah keamanan menonaktifkan katalog teks lengkap, ini tidak ada bedanya, jadi saya sepenuhnya memutar kembali perubahan (menjatuhkan objek baru dll). Ini juga tidak membuat perbedaan, pada akhirnya satu-satunya hal yang tampaknya menghentikannya adalah restart dari contoh SQL, ini segera menyelesaikan masalah.

ini membuat saya kesal juga, namun, saya masih menemukan apa yang menyebabkan kekacauan ini pada awalnya?

Marcello Miorelli
sumber
2
Pesan kesalahan Anda tidak menandakan bahwa paket tidak lagi dalam cache. Saya yakin Anda salah menyalin pegangan paket dan itu salah satu nilai terlalu lama, atau terlalu pendek. Saya dapat menjalankan SELECTpada dm_exec_sql_textmenggunakan pegangan yang ada di pesan kesalahan Anda, tanpa mendapatkan kesalahan
Mark Sinkinson
+1 terlihat dengan baik
Marcello Miorelli

Jawaban:

11

Menurut pesan ulang Infinite di log kesalahan pada SQL Programmability & API Development Team Blog, pesan ini dipicu ketika pernyataan dalam kumpulan mengkompilasi ulang 100 kali berturut-turut.

Pesan ini tidak selalu berarti ada masalah; itu ada untuk membantu memecahkan masalah pernyataan yang mungkin secara sah mengkompilasi ulang yang sering (misalnya, karena perubahan cepat dalam statistik), serta loop kompilasi tak terbatas nyata (yang akan jarang terjadi di ekstrem).

Anda harus mulai dengan mengidentifikasi pernyataan pemicu dari informasi yang diberikan, dan mengevaluasinya dalam konteks kode numerik yang memberikan alasan untuk kompilasi ulang. Ada tabel kode-kode ini dan artinya di beberapa tempat di Books Online, termasuk di bawah SP: Recompile Event Class .

Ada informasi lebih lanjut yang tersedia di Plan Caching dan Recompilation di SQL Server 2012 .

Daftar nilai

Paul White 9
sumber