เราเห็นประเภทรอ 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 บันทึกการเปลี่ยนแปลงในแคชบันทึกธุรกรรมไม่ใช่ดิสก์ เมื่อการทำธุรกรรมเสร็จสมบูรณ์หรือบัฟเฟอร์เต็มระเบียนทั้งหมดจะถูกล้างออกไปยังดิสก์ทันที