Saya ingin mencari tahu apa yang menyebabkan Kompilasi SQL yang tinggi (bukan kompilasi ulang) yang saya lihat di penghitung monitor kinerja.
Inilah pendapat saya: Jika saya melihat banyak kompilasi SQl, maka itu berarti bahwa kueri pada sistem kami tidak di-cache karena alasan berikut:
- Banyak pertanyaan adhoc
Menjalankan kueri yang tidak disimpan oleh SQl misalnya:
UPDATE table1 SET col1 = 'String lebih panjang dari 8000 karakter .....' WHERE key_column = int
Paket waktu habis dan dihapus dari cache karena: Cache kehabisan ruang atau rencana tidak digunakan cukup lama.
Satu-satunya hal yang mendekati menangkap sisipan cache di profiler adalah Stored Procedures-> SP: CacheInserts tetapi hanya terlihat setelah cache prosedur tersimpan.
Jadi saya mencoba yang berikut untuk mendapatkan pertanyaan adhoc:
SELECT [cp].[refcounts] -- when Refcounts becomes 0, plan is excluded from cache.
, [cp].[usecounts]
, [cp].[objtype]
, st.[dbid]
, st.[objectid]
, st.[text]
, [qp].[query_plan]
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text ( cp.plan_handle ) st
CROSS APPLY sys.dm_exec_query_plan ( cp.plan_handle ) qp ;
Saya pikir pertanyaan yang menyebabkan kompilasi harus yang dengan objtype = Adhoc tetapi ini juga bisa berhubungan dengan kompilasi ulang. Sekarang saya harus menjalankan profiler, menangkap query yang menyebabkan kompilasi ulang dan kemudian mengeluarkannya dari daftar di atas.
Apakah saya pergi ke arah yang benar?
Apakah ada satu query yang bisa saya gunakan untuk mencapai hanya kompilasi SQL tanpa terlalu banyak bekerja?
Sumber daya yang membantu saya mencapai pengetahuan di atas:
http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/954b4fba-3774-42e3-86e7-e5172abe0c83
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=143946
http: //technet.microsoft.com/en-nz/library/cc966425(en-us).aspx
http://www.sqlservercentral.com/Forums/Topic914951-360-1.aspx
Bantuan apa pun sangat dihargai.