Saya telah melakukan penyelaman yang dalam ke SQL Server Query Store dan saya sering melihat referensi ke pertanyaan 'ad-hoc'. Namun, saya belum melihat apa yang Query Store tentukan sebagai permintaan ad-hoc. Saya telah melihat tempat-tempat yang dapat disimpulkan sebagai kueri tanpa parameter atau kueri yang dieksekusi hanya satu kali. Apakah definisi formal ada untuk ini? Maksud saya tidak secara umum. Maksud saya terkait dengan Query Store.
Sebagai contoh, halaman ini menunjukkan contoh menghapus kueri ad-hoc dari toko kueri, tetapi tampaknya kriteria yang digunakannya adalah jumlah eksekusi hanya satu. Ini sepertinya definisi aneh dari permintaan ad-hoc. BTW, jika Anda pergi ke halaman, cari 'Hapus permintaan ad-hoc'.
sql-server
query-store
Randy Minder
sumber
sumber
Jawaban:
Setelah sedikit mencari, saya tidak dapat menemukan sumber yang konkret dan memuaskan dari dokumentasi Microsoft untuk menjawab pertanyaan ini. Ada banyak deskripsi pihak ketiga yang baik dan definisi adhoc / ad-hoc / ad hoc di luar sana, tetapi untuk kekhususan dari pertanyaan ini saya pikir yang dekat dengan sumber itu ideal.
Bergerak melewati definisi umum (tetapi masih akurat) seperti pos SO ini (terima kasih SqlWorldWide), jika kita melihat apa yang dikatakan dokumentasi tentang topik tersebut, ia setuju dengan apa yang Anda sebutkan tentang definisi yang didasarkan pada jumlah eksekusi , Saya pikir kita bisa menganggapnya sebagai fakta.
Artikel tentang pengoptimalan untuk alur kerja ad hoc mengatakan,
Jadi akan muncul opsi konfigurasi server permintaan ad hoc juga menggunakan definisi eksekusi tunggal sebagai definisi ad hoc. Jika kueri terus dieksekusi dan menghasilkan rencana yang sama, maka tidak akan lagi diperlakukan seperti itu.
Artikel tentang Praktik Terbaik untuk Query Store juga selaras dengan ini,
Ini, tentu saja, untuk pertanyaan yang belum digunakan sebagai prosedur tersimpan, parameter, dll. Karena mereka dapat dikenali dan diperlakukan dengan tepat langsung dari kelelawar.
Jadi berdasarkan semua ini, kita dapat mengatakan bahwa permintaan diperlakukan sebagai ad hoc jika:
sumber
Untuk kueri ad-hoc, kolom object_id di
sys.query_store_query
DMV akan menjadi 0, seperti yang dinyatakan dalam dokumentasi sys.query_store_query :Anda dapat mengidentifikasi kueri ad-hoc berdasarkan nilai itu, meskipun tidak secara eksplisit dinyatakan sebagai "ini adalah yang definisi dari ad-hoc query ". :)
sumber
Istilah ad-hoc digunakan untuk merujuk ke pertanyaan yang hanya dieksekusi sekali. Ini konsisten dengan definisi yang digunakan untuk pengaturan database "Optimalkan untuk beban kerja ad-hoc".
Tautan yang Anda rujuk tentang penghapusan kueri ad-hoc menyertakan definisi khusus ini "Hapus kueri ad-hoc: Ini menghapus kueri yang hanya dieksekusi sekali saja dan yang lebih dari 24 jam."
sumber
Ad-hoc dari sys.dm_exec_cached_plans dmv ini
objtype
kolom di docs.microsoft.com.Salah satu penggunaan kolom ini adalah untuk melihat dalam kasus Permintaan dengan beberapa paket untuk melihat apakah beberapa paket disebabkan oleh
Adhoc
.sumber