Mengukur rencana penggusuran

9

Kami memiliki SQL Server 2016 SP1 dengan memori maks ditetapkan ke 24GB.
Server ini memiliki jumlah kompilasi yang tinggi, hanya 10% dari kompilasi ini berasal dari permintaan Ad-Hoc. Jadi paket yang baru dikompilasi harus disimpan dalam cache paket tetapi ukuran cache paket tidak bertambah (sekitar 3,72GB).

Saya menduga bahwa ada tekanan memori lokal yang mengarah pada penghapusan paket dari cache. Batas tekanan cache rencana adalah 5GB. (75% memori target terlihat dari 0-4GB + 10% memori target terlihat dari 4GB-64GB + 5% dari memori target terlihat> 64GB). Ketika cachestore mencapai 75% dari batas tekanan, rencana harus dihapus dari cache. Dalam kasus saya 75% dari 5 GB adalah 3,75GB. Jadi masuk akal ini adalah penyebab kompilasi tinggi.

Apakah ada cara untuk mengukur (perfmon, peristiwa yang diperpanjang, ...) penghapusan dari rencana keluar dari cache? Jadi saya bisa yakin tekanan memori lokal benar-benar penyebab kompilasi tinggi?

Frederik Vanderhaegen
sumber

Jawaban:

9

Ada XEvent untuk itu:

query_cache_removal_statistics

Terjadi ketika rencana kueri dihapus dari cache rencana dan statistik historis untuk objek akan segera dihancurkan

Jadi sesuatu seperti:

CREATE EVENT SESSION [PlanCacheEvictions] ON SERVER 
ADD EVENT sqlserver.query_cache_removal_statistics(
    ACTION(sqlserver.sql_text))

Juga jika cache rencana Anda memiliki sejumlah besar rencana penggunaan tunggal pertimbangkan pengaturan optimalisasi untuk beban kerja ad hoc .

David Browne - Microsoft
sumber