แนวปฏิบัติที่ดีที่สุดแบบขนาน


9

อะไรคือแนวปฏิบัติที่ดีที่สุดในการตั้งค่าความเท่าเทียมกันโดยทั่วไป? ฉันรู้ว่า SQL Server เป็นค่าเริ่มต้นที่0จะใช้โปรเซสเซอร์ที่มีอยู่ทั้งหมด แต่ในอินสแตนซ์ใดที่คุณต้องการเปลี่ยนพฤติกรรมเริ่มต้นนี้

ฉันจำได้ว่าอ่านที่ไหนสักแห่ง (ฉันจะต้องมองหาบทความนี้) ว่าสำหรับภาระงาน OLTP คุณควรปิด parallelism (ตั้ง maxdop เป็น1) ฉันไม่คิดว่าฉันเข้าใจอย่างถ่องแท้ว่าทำไมคุณถึงทำเช่นนี้

เมื่อใดที่คุณจะรักษา maxdop สูงสุดถึง SQL Server (0) เมื่อใดที่คุณจะปิดการขนานกัน (1) เมื่อใดที่คุณจะระบุ maxdop ให้ชัดเจนกับโปรเซสเซอร์จำนวนหนึ่ง

อะไรที่ทำให้ขนานกัน

คำตอบ:


11

โดยปกติคุณไม่ต้องการปิดการใช้งานขนานซึ่งจะปิดการใช้งานสำหรับผู้ดูแลระบบ ทางออกที่ดีที่สุดของคุณคือการแก้ไขแบบสอบถามที่ทำให้เกิดความเท่าเทียมกันโดยการเพิ่มหรือแก้ไขดัชนีหรือผ่านการเปลี่ยนแปลงแบบแผนเต็มรูปแบบ


ตามคำถามที่อัปเดตของคุณ ...

บางคนจะเปลี่ยน MAXDOP เป็น 1 สำหรับแอปพลิเคชันที่สร้างขึ้นโดยผู้ค้าเนื่องจากไม่สามารถควบคุมฐานข้อมูลหรือสคีมาได้และพวกเขาไม่ต้องการให้มีการสืบค้นเพียงครั้งเดียว

โดยส่วนตัวฉันมักจะเก็บ MAXDOP ไว้ที่ 0 ยกเว้นในบางกรณี

ความขนานเกิดจากการดำเนินการเดียวภายในแผนการดำเนินการที่มีค่าใช้จ่ายในการดำเนินการซึ่งผ่านการตั้งค่าที่ตั้งไว้ล่วงหน้า (ขีด จำกัด ต้นทุนสำหรับการตั้งค่าแบบขนาน) เมื่อสิ่งนี้เกิดขึ้น SQL Server จะเริ่มต้นในแบบคู่ขนานเพื่อให้สามารถมัลติเธรดการร้องขอเพื่อพยายามเร่งกระบวนการให้เร็วขึ้น ค่าเริ่มต้นสำหรับเกณฑ์ค่าใช้จ่ายสำหรับการขนานคือ 5 ในแพลตฟอร์ม OLTP หลายแห่งคุณจะต้องเพิ่มให้สูงถึง 30 หรือ 40 เพื่อให้การขนานนั้นใช้สำหรับการค้นหาที่มีราคาแพงเท่านั้น


4

ฉันไม่เคยเห็นความจำเป็นในการปิดหรือปรับเปลี่ยนการตั้งค่าความขนานใด ๆ ตลอดเวลากับ SQL Server (สหัสวรรษที่ผ่านมา, SQL Sever 6.5)

การติดตามจาก @StanleyJohns ตอบ ...
ระบบ OLTP ที่มีข้อความค้นหาสั้น ๆ ไม่ควรเกินขีด จำกัด ต้นทุน ( "เกณฑ์ต้นทุนสำหรับความเท่าเทียม" ) ดังนั้นจึงไม่สำคัญ หากคุณมีข้อซักถามบางข้อที่ขนานกันไปทำไมคุณจะ จำกัด มันโดยอ้างอิงจากสิ่งที่ไม่ผ่านการพิสูจน์

ฉันยังไม่เห็นระบบ OLTP ที่บริสุทธิ์เหมือนกัน ที่สุดแล้วอาจจะมี แต่ระบบโดยเฉลี่ยก็รายงานเช่นกัน ไม่ว่าจะเป็นวันหรือข้ามคืน ข้อความค้นหาเหล่านี้มีแนวโน้มที่จะเป็นแบบขนานและได้รับประโยชน์มากกว่า

ด้วยคอร์ CPU จำนวนมากที่มีอยู่ในปัจจุบันจึงมีกรณีที่ต้องตั้งค่า"ระดับขนานสูงสุด"ทั่วโลกหากคุณสามารถวัดและสังเกตเห็นความแตกต่างได้

อย่างที่ฉันพูดคำแนะนำของฉันคือไม่ทำอะไรเลย คล้ายกับ @mrdenny แต่ฉันต้องการรวม "ไม่มีสิ่งเช่นระบบ OLTP บริสุทธิ์"

อาจกล่าวได้ว่าอาจมีบางไมล์ที่กำลังปิดการใช้งานแกนไฮเปอร์เธรดที่ระดับ BIOS แต่นั่นเป็นคำถามที่แตกต่างออกไป ...

นอกจากนี้โปรดดู


3

สิ่งที่ทำให้เกิดความเท่าเทียม ?: cost threshold for parallelismมีการตั้งค่าที่เรียกว่าเป็น เมื่อเกินขีด จำกัด นี้แล้วการขนานจะใช้ (หากตรงตามข้อกำหนดเบื้องต้น)

ลักษณะของระบบ OLTP คือการทำธุรกรรมรวดเร็วและสั้นจำนวนมาก บางครั้งการใช้การขนานจะเพิ่มเวลาในการประมวลผลแบบสอบถามเนื่องจากคิวรีจะถูกแยกออกเพื่อประมวลผลแบบขนานและจากนั้นจะรวมเข้าด้วยกันก่อนที่จะส่งคืน ดังนั้นคุณจะเห็นคำแนะนำในการตั้งค่า maxdop ที่ 1

ประโยชน์ของการตั้งค่า MAXDOP ที่ 1 เป็นที่ขนานถูกปิดโดยค่าเริ่มต้น query hintsแต่คุณสามารถเปิดใช้งานได้ในระดับแบบสอบถามโดยใช้

สำหรับระบบคลังข้อมูลหรือระบบ OLAP ที่ส่งคืนชุดผลลัพธ์ขนาดใหญ่อาจมีประโยชน์ในการแยกเคียวรีโดยใช้การขนาน สิ่งนี้ทำให้แบบสอบถามสามารถควบคุมแกนที่มีอยู่เพื่อลดเวลาในการประมวลผลแบบสอบถาม


2

ฉันเคยเห็นคิวรีที่ซับซ้อนแบ่งออกเป็นหลายกระบวนการซึ่งใช้เวลาหลายชั่วโมงในการดำเนินการ - โดยปกติคุณจะเห็นสิ่งนี้ใน sp_who2 เป็นรายการหลายรายการที่มี spid เดียวกัน

เปลี่ยนเป็น maxdop 1 และแบบสอบถามดำเนินการในเวลาน้อยกว่าหนึ่งนาที

บทเรียนที่นี่คือเครื่องยนต์ไม่ได้ถูกต้องเสมอเมื่อพูดถึงการขนาน


0

เรามีเซิร์ฟเวอร์จำนวนมากที่มี 4 คอร์และบางส่วนมี 8 คอร์ ฉันขอแนะนำด้วยแกนไม่กี่ที่ขนานกัน (MAXDOP) ถูกตั้งค่าเป็น 1 ดังนั้นเพื่อหลีกเลี่ยงการรอคอย CPU (และปัญหาการหมดเวลา) สำหรับผู้ใช้ระบบ OLTP สำหรับ OLAP หรือเซิร์ฟเวอร์การรายงานที่มีคอร์น้อยเช่นนี้ฉันขอแนะนำให้ตั้งค่า MAXDOP เป็น 2 และตั้งค่าขีด จำกัด ต้นทุนเป็น 30 (ซึ่งอาจสูงกว่าหรือต่ำกว่าสำหรับสถานการณ์ของคุณเล็กน้อย) เพื่อให้เฉพาะแบบสอบถามที่หนักที่สุดเท่านั้นที่จะใช้ความขนาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.