MAXDOP = 1, Petunjuk Kueri dan Ambang Batas Biaya Untuk Paralelisme

11

Jika sebuah instance telah MAXDOPditetapkan 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?

Saya belum dapat menggali informasi khusus ini meskipun tautan ini menunjukkan bahwa CTFP diabaikan jika MAXDOP1. Apakah ini masuk akal tanpa petunjuk kueri karena tidak ada permintaan, terlepas dari biaya, akan paralel ketika MAXDOP1.

Adakah yang bisa memberi tahu saya apa perilaku yang diharapkan dari kedua permintaan ini?

Contoh 1:

Instance Maxdop: 1 
CTFP: 50 
Query hint: Maxdop=2 
Query cost: 30

Contoh 2:

Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 70
Martin Bansey
sumber

Jawaban:

20

Jika sebuah instance telah MAXDOPditetapkan 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:

  1. Apa tingkat paralelisme maksimum yang efektif yang tersedia untuk kueri?

    Kontributor untuk ini adalah (secara luas dalam urutan kepentingan):

    • MAX_DOPPengaturan Gubernur Sumber Daya
    • MAXDOPPengaturan petunjuk kueri
    • The max degree of parallelismpilihan 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:

    tabel paralelisme

  2. 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 parallelismkonfigurasi


    ... 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 parallelismhanya 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

Paul White 9
sumber
2

Contoh 1 Instance Maxdop: 1 CTFP: 50 Petunjuk kueri: Maxdop = 2 Biaya kueri: 30

Petunjuk kueri MAXDOP mengesampingkan tingkat maks dari contoh pengaturan paralelisme lebar tetapi karena CTPF adalah 50 dan biaya kueri 30, itu mungkin berlaku untuk rencana seri.

Contoh 2 Instance Maxdop: 1 CTFP: 50 Petunjuk kueri: Maxdop = 2 Biaya kueri: 70

Di sini, lagi, tingkat paralelisme maks akan dianggap 2 karena ada petunjuk MAXDOP tetapi CTFP akan dianggap 50 dan kueri, jika mungkin seperti yang disebutkan Paul dapat berjalan secara paralel.

Jika turunan memiliki MAXDOP ditetapkan pada 1 dan petunjuk kueri digunakan untuk memungkinkan kueri tertentu paralel, apakah nilai Ambang Batas Untuk nilai Paralelisme masih digunakan oleh SQL untuk memutuskan apakah benar-benar paralel atau tidak?

Petunjuk MAXDOP akan mengesampingkan pengaturan lebar contoh tingkat maks paralelisme.

Mengutip dari petunjuk petunjuk MAXDOP docs.microsoft

Nomor MAXDOP Berlaku untuk: SQL Server 2008 hingga SQL Server 2017.

Mengganti tingkat maksimal opsi konfigurasi paralelisme maksimal sp_configure dan Resource Governor untuk kueri yang menentukan opsi ini. Petunjuk kueri MAXDOP dapat melebihi nilai yang dikonfigurasi dengan sp_configure. Jika MAXDOP melebihi nilai yang dikonfigurasi dengan Resource Governor, Mesin Basis Data menggunakan nilai MAXDOP Governor,

Shanky
sumber