Jika sebuah instance telah MAXDOP
ditetapkan pada 1 dan petunjuk kueri digunakan untuk memungkinkan kueri spesifik untuk paralel, apakah nilai ambang biaya untuk nilai paralelisme masih digunakan oleh SQL untuk memutuskan apakah benar-benar paralel atau tidak?
Jawaban sederhana: ya .
Detail
Ada beberapa hal terpisah yang terjadi di sini, yang penting untuk dipisahkan:
Apa tingkat paralelisme maksimum yang efektif yang tersedia untuk kueri?
Kontributor untuk ini adalah (secara luas dalam urutan kepentingan):
MAX_DOP
Pengaturan Gubernur Sumber Daya
MAXDOP
Pengaturan petunjuk kueri
- The
max degree of parallelism
pilihan contoh konfigurasi
Rinciannya dijelaskan dalam pengaturan "Max Degree of Parallelism" Server, MAX_DOP, Resource Governor, dan petunjuk kueri MAXDOP - yang mana yang harus digunakan SQL Server? oleh Jack Li, Insinyur Eskalasi Senior untuk Layanan dan Dukungan Pelanggan Microsoft SQL Server. Tabel di bawah ini direproduksi dari tautan itu:
Apakah rencana permintaan menggunakan paralelisme?
Pengoptimal permintaan SQL Server selalu menemukan paket serial pertama *.
Lalu jika:
- Optimasi lebih lanjut dibenarkan; dan
- Biaya paket serial terbaik melebihi nilai
cost threshold for parallelism
konfigurasi
... pengoptimal akan mencoba menemukan rencana paralel.
Lalu jika:
- Rencana paralel ditemukan (yaitu mungkin); dan
- Biaya paket paralel kurang dari paket seri terbaik
... rencana paralel akan diproduksi.
Catatan: yang cost threshold for parallelism
hanya mempengaruhi apakah penampilan optimizer untuk rencana paralel. Setelah rencana paralel di-cache, itu akan dieksekusi menggunakan paralelisme ketika digunakan kembali (selama utas tersedia) terlepas dari pengaturan CTFP.
Contohnya
Untuk kedua contoh, dengan instance maxdop 1 dan query hint maxdop 2, DOP efektif yang tersedia adalah 2. Jika rencana paralel dipilih, ia akan menggunakan DOP 2.
Contoh 1
Dengan CTFP 50 dan paket serial termurah ditemukan dengan biaya 30, SQL Server tidak akan mencoba menemukan paket paralel. Rencana serial akan diproduksi.
Contoh 2
Dengan CTFP 50 dan paket serial termurah ditemukan dengan biaya 70, SQL Server akan mencoba menemukan paket paralel. Jika rencana ini (jika ditemukan) memiliki biaya kurang dari 70 (biaya rencana seri) maka rencana paralel akan dihasilkan.
Hasil akhir dari pengoptimalan kueri selalu berupa paket cache tunggal: serial atau paralel. Pengoptimal hanya menemukan paket serial dalam fase search0 (TP) dan search1 (QP).
Ini mungkin kemudian (seperti yang dijelaskan) kembali menjalankan search1 dengan syarat untuk menghasilkan rencana paralel. Pilihan kemudian dibuat antara seri dan paralel berdasarkan biaya paket keseluruhan terbaik sejauh ini. Pilihan itu mengikat jika optimasi berjalan ke search2 (Optimasi Penuh). Setiap fase optimasi mempertimbangkan banyak alternatif, tetapi output dari suatu tahap selalu merupakan satu rencana terbaik, baik serial maupun paralel.
Saya menulis tentang beberapa hal ini dalam Mitos: SQL Server Cache Paket Seri dengan setiap Paket Paralel