Kami memiliki satu permintaan SQL Server 2008 tertentu (bukan proc yang disimpan, tetapi string SQL yang sama - dijalankan setiap 5 menit) yang sebentar-sebentar menyimpan rencana kueri yang sangat buruk.
Kueri ini biasanya berjalan dalam beberapa milidetik, tetapi dengan rencana kueri yang buruk ini, dibutuhkan 30+ detik.
Bagaimana cara operasi menghapus hanya satu rencana kuota cache yang buruk dari SQL Server 2008, tanpa menghilangkan seluruh cache kueri pada server database produksi?
sql-server
sql-server-2008
cache
query
Jeff Atwood
sumber
sumber
Jawaban:
Saya menemukan beberapa hal
akan menampilkan semua paket permintaan yang di-cache. Sayangnya, tidak ada teks SQL yang ditampilkan di sana.
Namun, Anda dapat bergabung dengan teks SQL ke paket seperti:
Dari sini cukup sepele untuk menambahkan
WHERE
klausa untuk menemukan SQL yang saya tahu ada dalam kueri, dan kemudian saya dapat menjalankan:untuk menghapus setiap paket permintaan dari cache paket permintaan. Tidak persis mudah atau nyaman, tetapi tampaknya berfungsi ..
sunting: membuang seluruh cache permintaan juga akan berfungsi, dan lebih tidak berbahaya daripada yang terdengar, setidaknya dalam pengalaman saya:
sumber
Jika Anda tahu bagaimana rencana yang baik itu, gunakan saja petunjuk rencana .
Anda tidak dapat menghapus entri cache tertentu, tetapi Anda dapat membersihkan seluruh kumpulan cache dengan
DBCC FREESYSTEMCACHE(cachename/poolname)
.Anda bisa mendapatkan nama cache dari paket kueri yang buruk jika Anda memiliki pegangan paket (dari sys.dm_exec_requests.plan_handle untuk session_id yang bermasalah selama eksekusi, atau dari sys.dm_exec_query_stats pasca eksekusi):
Namun semua rencana SQL memiliki nama 'SQL Plans' yang menjadikan memilih yang tepat untuk DBCC FREESYSTEMCACHE ... pilihan sulit.
Memperbarui
Jangan lupa, lupakan
DBCC FREEPROCCACHE(plan_handle)
, ya itu akan berhasil.sumber
sys.dm_exec_cached_plans
tidak ada entri di dalamnya untukplan_handle
darisys.dm_exec_requests
?The FREEPROCCACHE solusi baik-baik saja, tapi cara yang lebih langsung untuk melakukan hal ini adalah dengan menggunakan OPTION (mengkompilasi ulang) pada Anda SQL String (Anda sebutkan itu bukan SP), ini menceritakan Engine nya rencana Single Use, karena kemungkinan Anda menduga ada Parameter Sniffing atau Statistik Anda secara drastis berbeda dari menjalankan ke menjalankan dan Anda menduga itu masalah Rencana Cached Buruk.
sumber