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.
sumber
Apakah Anda sering menjalankan pekerjaan SQL Server di kotak ini? Perhatikan bahwa pada tahun 2005 permintaan pekerjaan agen TIDAK di-cache dan dapat menyebabkan kompilasi bloat & sql juga.
Lihatlah jumlah paket dengan jumlah penggunaan kembali yang rendah. Itulah pelakunya.
Beberapa catatan terkait tentang caching paket di bawah.
http://www.sqlskills.com/BLOGS/KIMBERLY/post/Plan-cache-adhoc-workloads-and-clearing-the-single-use-plan-cache-bloat.aspx
http://www.sqlskills.com/BLOGS/KIMBERLY/post/Clearing-the-cache-are-there-other-options.aspx
sumber
Efek ini dikenal sebagai "polusi rencana kueri", di mana banyak query SQL serupa menghasilkan rencana eksekusi yang terpisah, tetapi setara.
Kueri Ad-Hoc menyebabkan overhead oleh penguraian individu, tetapi biasanya bukan kueri rencana polusi, karena rencana mereka tidak disimpan. Ini berbeda untuk kueri dengan hanya satu parameter (di bawah MS SQL Server), ini akan diperlakukan seperti permintaan parameter.
Ada beberapa kasus umum untuk pencemaran paket permintaan:
sumber