Praktik Terbaik Paralelisme

9

Apa praktik terbaik dengan menetapkan paralelisme secara umum? Saya tahu bahwa SQL Server default untuk 0menggunakan semua prosesor yang tersedia, tetapi dalam hal apa Anda ingin mengubah perilaku default ini?

Saya ingat pernah membaca di suatu tempat (saya harus mencari artikel ini) bahwa untuk beban kerja OLTP Anda harus mematikan paralelisme (atur maxdop ke 1). Saya rasa saya tidak sepenuhnya mengerti mengapa Anda melakukan ini.

Kapan Anda menyimpan maxdop hingga SQL Server (0)? Kapan Anda mematikan paralelisme (1)? Kapan Anda akan secara eksplisit menyatakan maxdop ke sejumlah prosesor?

Apa yang menyebabkan paralelisme?


sumber

Jawaban:

11

Anda biasanya tidak ingin menonaktifkan paralelisme karena itu juga akan menonaktifkannya untuk tugas admin. Taruhan terbaik Anda adalah untuk memperbaiki kueri yang menyebabkan paralelisme melalui menambah atau memperbaiki indeks atau melalui membuat penuh tentang perubahan skema.


Berdasarkan pertanyaan Anda yang diperbarui ...

Beberapa orang akan mengubah MAXDOP menjadi 1 untuk aplikasi yang dibuat oleh vendor karena mereka tidak dapat mengontrol database atau skema dan mereka tidak ingin satu permintaan untuk mengambil alih seluruh sistem.

Secara pribadi saya selalu menjaga MAXDOP pada 0 kecuali untuk beberapa kasus yang jarang terjadi.

Paralelisme disebabkan oleh satu operasi dalam rencana eksekusi yang memiliki biaya eksekusi yang melampaui pengaturan yang ditetapkan sebelumnya (ambang biaya untuk pengaturan paralelisme). Ketika ini terjadi, SQL Server akan melakukan paralelisme sehingga dapat melakukan multi-utas permintaan dalam upaya untuk mempercepat proses. Nilai default untuk ambang biaya untuk paralelisme adalah 5. Dalam banyak platform OLTP Anda ingin menaikkannya hingga 30 atau 40 sehingga paralelisme hanya cocok untuk kueri yang benar-benar mahal.

mrdenny
sumber
4

Saya belum pernah melihat kebutuhan untuk mematikan atau memodifikasi pengaturan paralelisme sepanjang waktu saya dengan SQL Server (milenium terakhir, SQL Sever 6.5)

Menyusul dari @StanleyJohns jawab ...
Sistem OLTP dengan kueri pendek dan tajam tidak boleh mencapai ambang biaya ( "ambang biaya untuk paralelisme" ) sehingga tidak masalah. Jika Anda memiliki beberapa kueri yang paralel, lalu mengapa Anda membatasi berdasarkan sesuatu yang tidak terbukti

Saya belum melihat sistem OLTP murni juga. Pada titik ekstrim, mungkin ada, tetapi sistem rata-rata juga melaporkannya; apakah dalam hari atau semalam. Pertanyaan-pertanyaan ini lebih cenderung berjalan paralel dan mendapat manfaat darinya.

Dengan begitu banyak core CPU yang tersedia saat ini, ada kemungkinan untuk mengatur "derajat paralelisme maksimum" global jika Anda dapat mengukur dan melihat perbedaan.

Seperti yang saya katakan, saran saya adalah tidak melakukan apa-apa . Mirip dengan @rdenny, tapi saya akan memasukkan "tidak ada yang namanya sistem OLTP murni"

Mengatakan itu, mungkin ada beberapa jarak tempuh yang menonaktifkan core hyperthreaded di level BIOS tapi itu pertanyaan yang berbeda ...

Juga, silakan lihat

gbn
sumber
3

Apa yang menyebabkan paralelisme ?: Ada pengaturan yang disebut cost threshold for parallelism. Setelah ambang ini terlampaui maka paralelisme digunakan (jika prasyarat terpenuhi).

Sifat sistem OLTP adalah memiliki sejumlah besar transaksi cepat dan pendek. Menggunakan paralelisme kadang-kadang meningkatkan waktu pemrosesan kueri, karena kueri akan dibagi untuk diproses secara paralel, dan kemudian dijahit kembali sebelum dikembalikan. Karenanya Anda akan melihat saran untuk menetapkan maxdop pada 1.

Salah satu manfaat dari pengaturan maxdop pada 1 adalah bahwa paralelisme dimatikan secara default, tetapi Anda dapat mengaktifkannya di tingkat permintaan menggunakan query hints.

Untuk sistem data warehouse atau sistem OLAP di mana set hasil besar dikembalikan, mungkin ada manfaat untuk memisahkan kueri menggunakan paralelisme. Ini memungkinkan kueri untuk memanfaatkan inti yang tersedia untuk memangkas waktu pemrosesan kueri.

StanleyJohns
sumber
2

Saya telah melihat pemisahan permintaan yang kompleks menjadi beberapa proses yang membutuhkan waktu berjam-jam untuk dieksekusi - Anda biasanya dapat melihat ini di sp_who2 sebagai beberapa entri dengan spid yang sama.

Mengubahnya ke maxdop 1 dan permintaan dieksekusi dalam waktu kurang dari satu menit.

Pelajaran di sini adalah bahwa mesin tidak selalu bisa melakukannya dengan benar ketika datang ke paralelisme.

Jimbo
sumber
0

Kami memiliki banyak server dengan 4 core dan beberapa dengan 8 core. Saya merekomendasikan dengan beberapa inti sehingga paralelisme (MAXDOP) diatur ke 1 sehingga untuk menghindari menunggu pada CPU (dan juga masalah batas waktu) untuk pengguna sistem OLTP. Untuk OLAP atau server pelaporan, dengan beberapa inti seperti itu, saya sarankan mengatur MAXDOP ke 2 dan mengatur Batas Biaya hingga 30 (ini mungkin lebih tinggi atau sedikit lebih rendah untuk skenario Anda) sehingga hanya kueri terberat yang akan menggunakan paralelisme.

Todd
sumber