PAGELATCH_ สูงและรอ WRITELOG พวกเขาเกี่ยวข้องกันไหม


11

เราเห็นประเภทรอ PAGELATCH_EX และ PAGELATCH_SH สูงมากพร้อมกับรอ WRITELOG สูง ฉันได้วินิจฉัยแบบสอบถามที่ทำให้ PAGELATCH รอและสามารถกำจัดได้โดยลดอัตราการแทรกลงในคีย์หลักที่ทำคลัสเตอร์ไม่ว่างที่กำหนดด้วยค่าตัวตน ฉันเข้าใจว่าปรากฏการณ์นี้เป็นที่รู้จักกันในหน้าสุดท้ายแทรก latch contention

อย่างไรก็ตามคำถามของฉันคือเมื่อมีการแทรกระเบียนใหม่ SQL Server จะใช้ PAGELATCH_EX แบบเอกสิทธิ์เฉพาะบุคคลบนหน้าบัฟเฟอร์แทรกระเบียนไปยังหน้าบัฟเฟอร์เขียนระเบียนลงในบันทึกธุรกรรมและจากนั้นปล่อย PAGELATCH_EX แบบละเอียดโดยละเอียดhttps: // www.microsoft.com/en-ie/download/details.aspx?id=26665หน้า 24 หรือเขียนบันทึกลงในบันทึกการทำธุรกรรมครั้งแรกก่อนที่จะใช้ PAGELATCH_EX โดยมีรายละเอียดว่า "การแก้ปัญหา PAGELATCH การแก้ปัญหาบนเวิร์กโหลด INSERT" ข้อมูลความเป็นมาSQLCAT's Guide to: Relational Engine

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

นอกจากนี้การมีดัชนีที่ไม่ทำคลัสเตอร์หลายรายการจะทำให้ PAGELATCH_ * latch จัดขึ้นอีกต่อไปเช่นหากตารางมีดัชนีที่ทำคลัสเตอร์และหลายดัชนีที่ไม่ได้ทำคลัสเตอร์นั้นจะเพิ่มและปล่อยไปยังหน้าบัฟเฟอร์ดัชนีแต่ละหน้าพร้อมกันหรือไม่

อัปเดต 1 หลังจากอ่านconfio-sql-server-writelog-waitเลื่อนสองและสถาปัตยกรรม WAL ทั่วไป ตอนนี้ฉันเข้าใจแล้วว่าขั้นตอน "บันทึกรายการบันทึกที่มีการแก้ไขแถว" ซึ่งมีรายละเอียดในเอกสารสีขาวทั้งสองอ้างถึง SQL Server บันทึกการเปลี่ยนแปลงในแคชบันทึกธุรกรรมไม่ใช่ดิสก์ เมื่อการทำธุรกรรมเสร็จสมบูรณ์หรือบัฟเฟอร์เต็มระเบียนทั้งหมดจะถูกล้างออกไปยังดิสก์ทันที


1
มองไปที่ปัญหาคล้ายกับสิทธินี้ขณะนี้ ..
เดฟอเรนซ์

คุณเคยมองว่า VLF สูงอาจก่อให้เกิดปัญหาหรือไม่?
Kin Shah

@ คุณหมายถึงอะไรในแง่ของการบันทึกที่ช้าไปยังดิสก์ที่ถือแผ่นดิสก์เปิดสลัก PAGELATCH_EX และทำให้เกิดข้อขัดแย้งกับสลัก?
ตัวหนังสือ

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

คำตอบ:


1

อย่างไรก็ตามคำถามของฉันคือเมื่อมีการแทรกระเบียนใหม่ SQL Server จะใช้ PAGELATCH_EX แบบเอกสิทธิ์เฉพาะบุคคลบนหน้าบัฟเฟอร์แทรกระเบียนไปยังหน้าบัฟเฟอร์เขียนระเบียนลงในบันทึกธุรกรรมและจากนั้นปล่อย PAGELATCH_EX แบบเอกสิทธิ์เฉพาะบุคคล

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

  • สร้างบันทึกข้อมูล

  • อัปเดตหน้า LSN เพื่อให้ตรงกับข้อมูลบันทึก

  • เปลี่ยนข้อมูล (ทำให้หน้าสกปรก)

  • สลักปลดล็อค

  • กระทำธุรกรรมเริ่มต้น

  • FlushToLSN of Commit

  • ปลดล็อค

  • กระทำธุรกรรมเสร็จสมบูรณ์

สำหรับรายละเอียดเพิ่มเติมและคำอธิบายเกี่ยวกับขั้นตอนข้างต้นโปรดอ่านบล็อกการนำเสนอ I / O ของ Bob Dorr

Pagelatch * การรอไม่ใช่การรอ I / O และฉันได้เห็นเวลาส่วนใหญ่การรอเหล่านี้จะโดดเด่นเนื่องจากการช่วงชิงการจัดสรร tempdb is configuredลางสังหรณ์ของฉันคือว่ามันมีที่จะทำอะไรกับวิธีการ ดังนั้น tempdb ของคุณมีการกำหนดค่าอย่างไรไฟล์ข้อมูล tempdb มีอยู่เท่าไหร่? ตรวจสอบให้แน่ใจว่ามีขนาดการค้นหาอัตโนมัติและขนาดเท่ากัน เมื่อหน้าใหม่ถูกสร้างหน้าระบบเช่นGAM, หน้า SGAM และ PFSจำเป็นต้องได้รับการปรับปรุงหรือเข้าถึงและเมื่อ SQL Server พบการช่วงชิงในการเข้าถึงหน้าเหล่านี้การรอจะปรากฏขึ้น


สวัสดี @Shanky อิง sys.dm_os_waiting_tasks.resource_description ควบคู่ไปกับ DBCC PAGE และประเภทของ PAGELATCH_ * ฉันได้ปกครอง tempDB แล้ว ตามห่วงโซ่ของเหตุการณ์โดย Bob Dorr ดูเหมือนว่าขั้นตอน "สร้างบันทึกข้อมูล" เสร็จสมบูรณ์ภายในกลไกการล็อคหรือไม่
ตัวหนังสือ

3
ทั้งสองเป็นเหตุการณ์ที่ไม่เกิดร่วมกันซึ่งการเขียนในล็อกไฟล์นั้นไม่เกี่ยวข้องกับการ latching เพียง SQL Server ตามโพรโทคอล WAL เพื่อเขียนข้อมูลในบันทึกก่อนทำธุรกรรมจริง
Shanky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.