ไม่สามารถตัดทอนบันทึกธุรกรรม log_reuse_wait_desc - AVAILABILITY_REPLICA


9

เช้านี้ฉันตื่นขึ้นมาด้วยการทำธุรกรรมบันทึกการแจ้งเตือนอย่างเต็มรูปแบบในหนึ่งในฐานข้อมูลของเรา เซิร์ฟเวอร์นี้เป็นคลัสเตอร์ alwayson และยังเป็นสมาชิกการจำลองแบบของทรานแซคชัน ฉันตรวจสอบ log_reuse_wait_desc และพบว่ามีการสำรองข้อมูล มีคนปิดการใช้งานการสำรองข้อมูลโดยไม่ตั้งใจ 4 วันก่อนหน้าฉันเปิดใช้งานงานสำรองข้อมูลบันทึกอีกครั้งและบันทึกถูกล้าง ตั้งแต่ 4 โมงเช้าฉันคิดว่าฉันจะไปทำงานในภายหลังในเช้าวันนั้นและปัดท่อนไม้ตามที่มันโตขึ้นเป็น 400GB

10:00 น. - ฉันอยู่ในสำนักงานและฉันตรวจสอบการใช้งานบันทึกก่อนที่จะย่อขนาดลงและประมาณ 16% ฉันประหลาดใจและตรวจสอบ log_reuse_wait_desc ซึ่งแสดงการจำลองแบบ ฉันสับสนเพราะนี่เป็นสมาชิกการจำลองแบบ จากนั้นเราเห็นว่า db ถูกเปิดใช้งานสำหรับ CDC และคิดว่าอาจเป็นสาเหตุ CDC ที่ถูกปิดใช้งานและตอนนี้ log_reuse_wait_desc แสดง AVAILABILITY_REPLICA

การใช้งานบันทึกในขณะที่ยังคงเติบโตอย่างต่อเนื่องและที่ 17% ในขณะนี้ ฉันตรวจสอบแดชบอร์ด alwayson และตรวจสอบคิวที่ส่งและทำซ้ำและทั้งคู่นั้นแทบจะเป็นศูนย์ ฉันไม่แน่ใจว่าทำไมการใช้บันทึกซ้ำจึงแสดงเป็น AVAILABILITY_REPLICA และไม่สามารถล้างบันทึกได้

มีความคิดว่าทำไมสิ่งนี้เกิดขึ้น?

คำตอบ:


7

หากคุณทำสิ่งนี้:

SELECT * FROM sys.databases

และ log_reuse_wait_desc แสดง AVAILABILITY_REPLICA นั่นหมายความว่า SQL Server กำลังรอส่งข้อมูลบันทึกไปยังแบบจำลอง Always On Availability Group ของคุณ แบบจำลองหนึ่งอาจล้าหลังเนื่องจากเครือข่ายช้าหรืออาจลงทั้งหมด

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

หากชายคนสุดท้ายตั้งค่าแบบจำลอง AG และไม่ควรมีอยู่อีกต่อไปดังนั้นถึงเวลาที่จะลบ AG และ / หรือแบบจำลองนั้น เพียงระวังว่าแอปไม่ได้ชี้ไปที่ชื่อผู้ฟังเพื่อเชื่อมต่อกับ SQL Server ของคุณ


จะเป็นอย่างไรถ้าตั้งค่ารองเป็นโหมด Async หากรองถูกปิด (รอการแก้ไข) บันทึกหลักจะเติบโตต่อไปหรือไม่ ขอบคุณ!
Michael

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