CXPACKET สูงและ LATCH_EX กำลังรอ


13

ฉันมีปัญหาด้านประสิทธิภาพกับระบบประมวลผลข้อมูลที่ฉันกำลังทำงานอยู่ ฉันได้รวบรวมสถิติการรอจากเวลาหนึ่งชั่วโมงที่แสดง CXPACKET และ LATCH_EX รอเหตุการณ์จำนวนมาก

ระบบประกอบด้วยการประมวลผล SQL เซิร์ฟเวอร์ 3 เครื่องซึ่งมีจำนวนการกระทืบและการคำนวณจำนวนมากจากนั้นป้อนข้อมูลลงในเซิร์ฟเวอร์คลัสเตอร์กลาง เซิร์ฟเวอร์ประมวลผลสามารถมีงานได้ถึง 6 งานในแต่ละครั้ง สถิติการรอเหล่านี้มีไว้สำหรับคลัสเตอร์กลางซึ่งฉันคิดว่าเป็นสาเหตุของปัญหาคอขวด เซิร์ฟเวอร์คลัสเตอร์ส่วนกลางมี 16 คอร์และ 64GB RAM MAXDOP ถูกตั้งค่าเป็น 0

ฉันเดาว่า CXPACKET นั้นมาจากการสืบค้นหลายขนานที่ทำงานอยู่ แต่ฉันไม่แน่ใจว่าสิ่งที่ LATCH_EX รอเหตุการณ์ระบุไว้ จากสิ่งที่ฉันได้อ่านนี้อาจเป็นการรอแบบไม่บัฟเฟอร์?

ทุกคนสามารถแนะนำสาเหตุของการรอคอยสถิติเหล่านี้ได้อย่างไรและฉันควรดำเนินการอย่างไรเพื่อตรวจสอบสาเหตุที่แท้จริงของปัญหาประสิทธิภาพการทำงานนี้

ผลลัพธ์ข้อความค้นหายอดนิยมคือสถิติการรอคอยทั้งหมดและผลลัพธ์ข้อความค้นหาด้านล่างคือสถิติในช่วงเวลา 1 ชั่วโมง ตัวอย่าง SQL Wait


4
คุณได้ดูบล็อกของ Paul Randal ที่ Latch แล้วหรือยัง sqlskills.com/blogs/paul/ ...... มีข้อมูลที่เป็นประโยชน์ค่อนข้างมากในการพิจารณาว่า Latch Wait หมายถึงอะไรโดยเลือกจาก sys.dm_os_latch_stats
Mark Sinkinson

CXPacket คือเมื่อเธรดหลักของแบบสอบถามกำลังรอเธรดแบบขนานเพื่อส่งคืน สำหรับคำอธิบายที่ดีและวิธีการลดดูบล็อกของเบรนท์โอซาร์ในหัวข้อbrentozar.com/archive/2013/08/…
RubberChickenLeader

คำตอบ:


8

CXPACKET สามารถมาพร้อมกับ LATCH_XX (อาจเป็น PAGEIOLATCH_XX หรือ SOS_SCHEDULER_YIELD ก็ได้เช่นกัน) หากเป็นกรณีนี้ (และฉันเชื่อว่าเป็นไปตามคำถาม) ค่า MAXDOP ควรลดลงให้พอดีกับฮาร์ดแวร์ของคุณ

นอกเหนือจากนี้ต่อไปนี้เป็นขั้นตอนที่แนะนำเพิ่มเติมในการวิเคราะห์สาเหตุของค่า CXPACKET สูงที่รอค่าสถิติ (ก่อนที่จะเปลี่ยนบางอย่างใน SQL Server):

  • อย่าตั้งค่า MAXDOP เป็น 1 เพราะนี่จะไม่แก้ปัญหา

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

  • ตรวจสอบดัชนีและสถิติของตารางที่ใช้โดยแบบสอบถามและตรวจสอบให้แน่ใจว่าเป็นข้อมูลล่าสุด

  • ตรวจสอบเกณฑ์ต้นทุนสำหรับ Parallelism (CTFP) และตรวจสอบให้แน่ใจว่าค่าที่ใช้นั้นเหมาะสมกับระบบของคุณ

  • ตรวจสอบว่า CXPACKET นั้นมาพร้อมกับ LCK_M_XX (มักมาพร้อมกับ IO_COMPLETION และ ASYNC_IO_COMPLETION) หากเป็นกรณีนี้การขนานจะไม่ใช่ปัญหาคอขวด แก้ไขปัญหาสถานะรอเหล่านั้นเพื่อค้นหาสาเหตุของปัญหาและวิธีแก้ไข

ถ้าคุณต้องการจริงๆที่จะเข้าใจชนิด CXPACKET รอในเชิงลึกผมจะแนะนำให้อ่านการแก้ไขปัญหาประเภท CXPACKET รอใน SQL Serverบทความ


7

อ่านการวินิจฉัยและการแก้ไข Latch Contention บน SQL Serverเป็นบทความที่ครอบคลุมที่สุดในหัวข้อ คุณจะต้องขุดลงไปsys.dm_os_latch_statsและดูว่าประเภทการสลักคืออะไร

ดูว่าการอ่านวิธีการวิเคราะห์ประสิทธิภาพของ SQL Serverช่วยคุณได้ทุกทางหรือไม่


3

นอกเหนือจากการอ่านลิงก์ที่ให้ไว้ข้างต้นและน่าจะเป็นการเปลี่ยนการตั้งค่า "Max Degree of Parallelism" จาก 0 เป็น 8 อย่างเช่นคุณจะต้อง จำกัด ขอบเขตการสืบค้นของคุณให้เท่ากันและราคาเท่าไหร่

หลังจากเห็นผลกระทบของการเปลี่ยนแปลงนี้คุณยังสามารถพิจารณาแก้ไข "เกณฑ์ต้นทุนสำหรับความเท่าเทียม" ของคุณเพื่อปรับสิ่งที่จะขนานกัน

นี่คือวิดีโอยอดเยี่ยมจาก Brent Ozar ที่จะช่วยคุณได้: การเรียนรู้ศิลปะของ CXPACKET และ MAXDOP

เป้าหมายของคุณคือ <= 50% เปอร์เซ็นต์เวลารอของ CXPACKET โชคดี!!

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