เมื่อฐานข้อมูล SQL Server ในโหมด SIMPLE คุณไม่ต้องสนใจเกี่ยวกับ bakcups บันทึกธุรกรรม แต่ในโหมด SIMPLE บันทึกธุรกรรมดูเหมือนว่าจะเพิ่มขึ้นเช่นเดียวกับในโหมดเต็ม มีการตัดทอนอัตโนมัติในบางช่วงเวลาหรือไม่? หรือฉันต้องตัดทอน / ย่อขนาดด้วยตนเองหรือไม่?
เมื่อฐานข้อมูล SQL Server ในโหมด SIMPLE คุณไม่ต้องสนใจเกี่ยวกับ bakcups บันทึกธุรกรรม แต่ในโหมด SIMPLE บันทึกธุรกรรมดูเหมือนว่าจะเพิ่มขึ้นเช่นเดียวกับในโหมดเต็ม มีการตัดทอนอัตโนมัติในบางช่วงเวลาหรือไม่? หรือฉันต้องตัดทอน / ย่อขนาดด้วยตนเองหรือไม่?
คำตอบ:
มันจะตัดทอนโดยอัตโนมัติ แต่แตกต่างกันมากเมื่อต้องการย่อขนาด การตัดทอนเรียกคืนพื้นที่บันทึกสำหรับการใช้งานอีกครั้งการย่อขนาดร่างกายจะลดขนาดไฟล์เพื่อปล่อยพื้นที่กลับสู่ระบบปฏิบัติการ หากบันทึกของคุณเติบโตเป็นขนาดปัจจุบันอาจเป็นไปได้ว่าจะขยายอีกครั้งหากคุณลดขนาด
ฉันขอแนะนำให้จัดการกับการใช้บันทึกทั่วไปและการใช้งานสูงสุดสำหรับระบบของคุณ แบบสอบถามด้านล่าง (ไม่ใช่ของฉันเพิ่มขึ้นจากสคริปต์ DMV ของ Glen Berrys) สามารถเรียกใช้ด้วยตนเองหรือคุณสามารถจับภาพเอาต์พุตไปยังตารางผ่านงานตัวแทน หากคุณบันทึกลงในตารางเป็นเวลาหนึ่งสัปดาห์หรือมากกว่านั้นคุณจะเห็นภาพการใช้งานทั่วไปและที่สำคัญกว่านั้นเมื่อกระบวนการทำให้บันทึกนั้นเติบโตเกินกว่าที่คุณคาดไว้
SELECT
db.[name] AS [Database Name]
, db.recovery_model_desc AS [Recovery Model]
, db.log_reuse_wait_desc AS [Log Reuse Wait Description]
, ls.cntr_value AS [Log Size (KB)]
, lu.cntr_value AS [Log Used (KB)]
, CAST(
CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)
AS DECIMAL(18,2)
) * 100 AS [Log Used %]
, db.[compatibility_level] AS [DB Compatibility Level]
, db.page_verify_option_desc AS [Page Verify Option]
, db.is_auto_create_stats_on, db.is_auto_update_stats_on
, db.is_auto_update_stats_async_on, db.is_parameterization_forced
, db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on
FROM sys.databases AS db
INNER JOIN sys.dm_os_performance_counters AS lu
ON db.name = lu.instance_name
INNER JOIN sys.dm_os_performance_counters AS ls
ON db.name = ls.instance_name
WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%'
AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
AND ls.cntr_value > 0
OPTION (RECOMPILE);
การตัดทอนบันทึกธุรกรรมอธิบายทั้งเวลาและสาเหตุที่การตัดทอนบันทึกเกิดขึ้น
หากไม่ได้ลบบันทึกการบันทึกจากบันทึกการทำธุรกรรมในที่สุดก็จะเติมพื้นที่ดิสก์ทั้งหมดที่มีอยู่ให้กับไฟล์บันทึกทางกายภาพ การตัดปลายบันทึกจะช่วยเพิ่มพื้นที่ว่างในบันทึกเชิงตรรกะโดยอัตโนมัติเพื่อนำมาใช้ซ้ำโดยบันทึกธุรกรรม
ปัจจัยที่อาจทำให้การตัดทอนล่าช้าเป็นข้อมูลอ้างอิงที่มีประโยชน์สำหรับการทำความเข้าใจสาเหตุที่บันทึกของคุณอาจไม่ตัดทอนและทำให้มีขนาดใหญ่กว่าที่คาดไว้
ไม่และไม่
หากคุณย่อขนาดรูปภาพจะขยายอีกครั้งและคุณจะมีไฟล์แยกส่วน
ตามที่ระบุไว้ก่อนหน้านี้ไม่มันจะไม่ย่อตัวเองโดยอัตโนมัติ มันจะทำความสะอาดขยะบางส่วน
เหตุผลก็คือในรูปแบบการกู้คืนแบบเต็มคุณกำลังบอก SQL ว่าคุณต้องการทำการสำรองข้อมูลแบบ tlog เพื่อการกู้คืนแบบชี้ ณ เวลาดังนั้นมันจะเก็บบันทึกธุรกรรมทั้งหมดที่เกิดขึ้นกับฐานข้อมูล
เนื่องจากคุณบอกว่าคุณต้องการการกู้คืนในเวลาคุณต้องทำการสำรองข้อมูลเต็มรูปแบบและสำรองข้อมูล tlog เมื่อคุณทำการสำรองข้อมูล tlog เสร็จแล้วมันจะทำการล้างเนื้อหาของบันทึก (นอกเหนือจากปลายหาง) และเริ่มต้นใหม่
มันอาจช่วยถ้าคุณคิดว่าไฟล์เหล่านี้เป็นภาชนะ
คำแนะนำของฉันคือถ้า tlogs มีขนาดใหญ่และไม่สามารถจัดการได้ให้สำรองข้อมูลทั้งหมด สลับไปที่แบบจำลองการกู้คืนSIMPLEและSHRINKไฟล์ tlog สลับกลับไปเป็นแบบจำลองการกู้คืนเต็มรูปแบบและทำการบำรุงรักษาแฟรกเมนต์ * เช่นเดียวกับคนอื่น ๆ ที่โพสต์สิ่งนี้ไม่ใช่วิธีปฏิบัติที่ดีที่สุดและจะนำไปสู่การกระจายตัวในระดับสูง
วางแผนและเริ่มระบบการสำรองข้อมูลหลังจากนั้น
* ดัชนีสร้าง / การดำเนินการจัดระเบียบและระดับการจัดระเบียบดิสก์ นี่ไม่ใช่ส่วนหนึ่งของการบำรุงรักษาบันทึก: คุณเก็บรักษาบันทึก T ของคุณโดยสำรองข้อมูล เป็นภาชนะที่เพิ่มขึ้นเมื่อใกล้ถึงขีดความสามารถ การสร้างใหม่ / จัดระเบียบใหม่สามารถช่วยกู้คืนจากการจัดการบันทึกที่ไม่เหมาะสมนำไปสู่การใช้ไดรฟ์ขนาดใหญ่