ฉันมีปัญหาเดียวกันและฉันเชื่อว่าฉันได้แก้ไขแล้ว แต่ฉันไม่สามารถทดสอบได้อย่างสมบูรณ์เพื่อยืนยัน
ฉันเชื่อว่าปัญหาเกี่ยวข้องกับจำนวน VLF ที่คุณมีในล็อกไฟล์ไม่ใช่ขนาดของมัน หากคุณมีไฟล์บันทึกข้อมูลขนาดใหญ่มีแนวโน้มว่ามันจะเติบโตอย่างเป็นธรรมชาติผ่านเหตุการณ์การเติบโตอัตโนมัติและไม่ใช่การเติบโตตามแผนโดยเจตนา หากเป็นกรณีนี้คุณอาจมี VLF นับพันอยู่ในล็อกไฟล์
นี่คือแบบสอบถามเพื่อดูว่าคุณมี VLF กี่ตัวที่ฉันใช้จากที่นี่ :
Create Table #stage(
FileID int
, FileSize bigint
, StartOffset bigint
, FSeqNo bigint
, [Status] bigint
, Parity bigint
, CreateLSN numeric(38));
Create Table #results(
Database_Name sysname
, VLF_count int
);
Exec sp_msforeachdb N'Use ?;
Insert Into #stage
Exec sp_executeSQL N''DBCC LogInfo(?)'';
Insert Into #results
Select DB_Name(), Count(*)
From #stage;
Truncate Table #stage;'
Select *
From #results
Order By VLF_count Desc;
Drop Table #stage;
Drop Table #results;
สำหรับคำอธิบายเพิ่มเติมเกี่ยวกับสิ่งที่ VLFs เห็นลิงค์นี้
ฉันเชื่อว่าปัญหาคือ VLF จำนวนมากใช้เวลานานในการประเมินสถานะของเซิร์ฟเวอร์ SQL แล้วนำฐานข้อมูลออกจากการกู้คืน หากคุณลดขนาดไฟล์บันทึกให้มีขนาดเล็กที่สุดเท่าที่คุณจะทำได้มักจะมีขนาดของ VLF แรกที่สร้างขึ้นในล็อกไฟล์จากนั้นคุณสามารถเพิ่มขนาดได้อีกครั้งในทันทีและจงสร้างจำนวน VLF ที่เหมาะสม 16)
เมื่อเสร็จสมบูรณ์ฉันเชื่อว่าคุณจะสามารถเห็นว่าฐานข้อมูลของคุณออกมาจากการกู้คืนเร็วขึ้นมาก
ฉันไม่ได้มีโอกาสทดสอบล้มเหลวของอินสแตนซ์การผลิตของเราหลังจากที่ฉันแก้ไขปัญหา VLF ของเราเองดังนั้นฉันจะสงสัยมากถ้าคุณสามารถยืนยันได้ว่านี่เป็นสาเหตุของปัญหา จากการทดลองฉันได้เห็นเวลาที่ใช้ในการฟื้นฟูสภาพแวดล้อมการแสดงละครของเราลดลงอย่างมากเนื่องจากสิ่งนี้ดังนั้นหวังว่าจะเป็นเช่นนั้น