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,
Ketika opsi ini diatur ke 1, Mesin Database menyimpan rintisan paket terkompilasi kecil di cache paket saat kumpulan dikompilasi untuk pertama kalinya, alih-alih paket terkompilasi penuh. Ini membantu mengurangi tekanan memori dengan tidak membiarkan cache rencana dipenuhi dengan paket terkompilasi yang tidak digunakan kembali. Stub paket yang dikompilasi memungkinkan Mesin Database untuk mengenali bahwa batch ad hoc ini telah dikompilasi sebelumnya tetapi hanya menyimpan stub paket yang sudah dikompilasi, jadi ketika batch ini dipanggil (dikompilasi atau dieksekusi) lagi, Engine Database mengkompilasi ... dan menambahkan paket kompilasi penuh ke cache paket.
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,
Bandingkan jumlah nilai query_hash yang berbeda dengan jumlah total entri di sys.query_store_query. Jika rasionya mendekati 1, beban kerja ad-hoc Anda menghasilkan kueri yang berbeda.
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:
- Itu tidak parameter
- Ini tidak secara terprogram disimpan dalam database (proc tersimpan, fungsi, pemicu, dll.)
- Permintaan yang sama hanya dieksekusi satu kali ATAU Permintaan yang sama dieksekusi beberapa kali tetapi menghasilkan rencana permintaan yang berbeda untuk setiap eksekusi berikutnya.