วิธีที่ดีที่สุดในการรักษาขนาดล็อกไฟล์ SQL


13

ฉันค่อนข้างจะเป็น DBA ใหม่และฉันกำลังจัดการอินสแตนซ์ SQL Server 2012 ที่มีจำนวนกิจกรรมพอสมควร ฉันกำลังทำงานในโหมดการกู้คืนเต็มเพราะเราต้องการการกู้คืนเวลา

ตอนนี้ฉันกำลังสำรองข้อมูลทั้งหมดของฐานข้อมูลและบันทึกทุกวันเวลาตีห้า ไฟล์บันทึกบางไฟล์มีขนาดสูงถึง 300GB และแม้หลังจากทำการสำรองข้อมูลไฟล์ก็จะไม่ลดขนาดลง ฉันสามารถทำให้พวกเขาลดขนาดได้โดยใช้สิ่งที่คล้ายกับ:

BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn';
DBCC ShrinkFile([db1_log], 0);

BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn';
DBCC ShrinkFile([db1_log], 0);

BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn';
DBCC ShrinkFile([db1_log], 0);

เมื่อฉันตรวจสอบ LSN ของไฟล์สำรองข้อมูลฉันเห็นสิ่งที่ชอบ:

RESTORE headeronly FROM DISK = N'\\server\share\db1_log1.trn'
FirstLSN:  15781000014686200001
SecondLSN: 15802000000665000001

RESTORE headeronly FROM DISK = N'\\server\share\db1_log2.trn'
FirstLSN:  15802000000665000001
SecondLSN: 15805000000004100001

RESTORE headeronly FROM DISK = N'\\server\share\db1_log3.trn'
FirstLSN:  15805000000004100001
SecondLSN: 15808000000004200001

ฉันไม่เชื่อว่าฉันทำลายบันทึกของฉันโดยการลดขนาดแฟ้มบันทึก เมื่ออ่านถึงเรื่องนี้ฉันเชื่อว่าฉันกำลังทำร้ายประสิทธิภาพการทำงานของฉันเพราะไฟล์บันทึกย่อเหล่านั้นจะต้องเติบโตขึ้นเอง

คำถาม:

  1. เหตุใดไฟล์บันทึกจึงไม่ลดลงหลังจากสำรองข้อมูล เป็นเพราะมีการทำธุรกรรมที่ปราศจากข้อผูกมัด?
  2. ตอนแรกฉันคิดว่าฉันควรลดขนาดไฟล์บันทึกหลังจากการสำรองข้อมูลทุก ๆ 5:00 AM หลังจากอ่านเกี่ยวกับวิธีที่ไม่ดีต่อประสิทธิภาพตอนนี้ฉันเชื่อว่าฉันจำเป็นต้องสำรองข้อมูลบันทึกประจำทุกสองสามชั่วโมงในระหว่างวัน ถูกต้องหรือไม่
  3. การสำรองข้อมูลเต็มรูปแบบตามปกติของฉันของฐานข้อมูล / บันทึกเกิดขึ้นทุกวันเวลา 5:00 น. และบางครั้งใช้เวลา 3 ชั่วโมง หากฉันกำหนดเวลาการสำรองข้อมูลบันทึกให้เกิดขึ้นทุก ๆ ชั่วโมงจะเกิดอะไรขึ้นเมื่อข้อมูลสำรองบันทึกทำงานกับข้อมูลสำรองแบบ 5:00 AM

คำตอบ:


10
  1. เหตุใดไฟล์บันทึกจึงไม่ลดลงหลังจากสำรองข้อมูล เป็นเพราะมีการทำธุรกรรมที่ปราศจากข้อผูกมัด?

ไฟล์บันทึก NTFS จริงไม่ได้ "ลดขนาด" จากการสำรองข้อมูลบันทึกธุรกรรม แต่ VLFs (ไฟล์บันทึกเสมือน) ภายในบันทึกธุรกรรมมีการทำเครื่องหมายเพื่อนำมาใช้ซ้ำ (เพราะตอนนี้พวกเขาได้รับการสำรองข้อมูลและเก็บรักษาไว้ในสื่อ) บันทึกธุรกรรมที่เกิดขึ้น หากคุณไม่ได้สำรองข้อมูลบันทึกธุรกรรมหรือไม่บ่อยพอจะไม่มี VLF และนั่นจะทำให้บันทึกธุรกรรมเติบโต (โดยมีการตั้งค่า autogrowth) เพื่อรองรับรายการบันทึกธุรกรรมเพิ่มเติม

2. ในตอนแรกฉันคิดว่าฉันควรลดขนาดไฟล์บันทึกหลังจากการสำรองข้อมูลทุก ๆ 5:00 AM หลังจากอ่านเกี่ยวกับวิธีที่ไม่ดีต่อประสิทธิภาพตอนนี้ฉันเชื่อว่าฉันจำเป็นต้องสำรองข้อมูลบันทึกประจำทุกสองสามชั่วโมงในระหว่างวัน ถูกต้องหรือไม่

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

3. การสำรองฐานข้อมูล / บันทึกปกติของฉันจะเกิดขึ้นทุกวันเวลา 5:00 น. และบางครั้งใช้เวลา 3 ชั่วโมง หากฉันกำหนดเวลาการสำรองข้อมูลบันทึกให้เกิดขึ้นทุก ๆ ชั่วโมงจะเกิดอะไรขึ้นเมื่อข้อมูลสำรองบันทึกทำงานกับข้อมูลสำรองแบบ 5:00 AM

จะไม่มีอะไรเกิดขึ้นนั่นคือการดำเนินการทางกฎหมายอย่างสมบูรณ์ ดูกราฟด้านล่างนี้จากMSDN เมื่อมีจุดดำการดำเนินการสองอย่างนั้นไม่สามารถเกิดขึ้นได้ในเวลาเดียวกัน อย่างที่คุณเห็นการสำรองฐานข้อมูลและบันทึกธุรกรรมได้รับอนุญาตพร้อมกัน

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่ควรทำที่นี่คือคุณควรสำรองข้อมูลบันทึกธุรกรรมของคุณบ่อยขึ้น การเติบโตของไฟล์ NTFS ไม่ใช่ปัญหาเดียวที่คุณสามารถทำได้โดยไม่สำรองข้อมูลบันทึกธุรกรรมของคุณบ่อยขึ้น หากคุณมีความล้มเหลวในการจัดเก็บและบันทึกธุรกรรมของคุณจะหายไปจากนั้นคุณสามารถกู้คืนได้จนถึงเวลาที่สำรองข้อมูลบันทึกธุรกรรมครั้งล่าสุดเท่านั้น หากบันทึกธุรกรรมสูญหายคุณจะไม่สามารถสำรองข้อมูลส่วนท้ายของบันทึกและเรียกคืนไปยังเวลาที่กำหนดของความล้มเหลวได้ ในกรณีของคุณคุณอาจสูญเสียข้อมูล 24 ชั่วโมง แต่ถ้าคุณสำรองข้อมูลการทำธุรกรรมของคุณทุกครั้งให้บอกว่า 30 นาทีการสูญเสียข้อมูลสูงสุดของคุณจะเป็น 30 นาที ในกรณีนั้นหากบันทึกธุรกรรมของคุณหายไปและคุณมีการสำรองข้อมูลเต็มรูปแบบและห่วงโซ่การบันทึกที่ไม่เปลี่ยนแปลงของคุณคุณสามารถกู้คืนการสำรองข้อมูลบันทึกล่าสุดนั้นได้

เอกสาร TechNet เกี่ยวกับทรานแซกชันการบันทึกธุรกรรม


5

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

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

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


-1

ฉันได้รับปัญหาเดียวกันเช่นคุณก่อน ล็อกไฟล์ของฉันเพิ่มขึ้นเสมอฉันใช้การสำรองฐานข้อมูลเต็มรูปแบบทุกคืน ดังนั้นนี่คือทางออกของฉัน:

  1. สำรองไฟล์บันทึกปัจจุบันของคุณ

  2. ตั้งค่าฐานข้อมูลของคุณเป็น Simple Recovery

    • เมื่อใช้การกู้คืนเต็ม -> ไฟล์บันทึกไม่ได้ลบธุรกรรมที่ทำไว้ แต่เพียงจัดเรียงข้อมูลของคุณใหม่ -> ไฟล์ Shink ไม่ส่งผลกระทบมาก -> และในทางกลับกันสำหรับการกู้คืนแบบง่าย
  3. เปลี่ยนไฟล์บันทึกเป็น 1 MB หรือน้อยกว่า (แล้วแต่คุณ)

  4. ตั้งค่าฐานข้อมูลของคุณกลับเป็นการกู้คืนแบบเต็ม

หวังว่ามันจะช่วยได้

พงษ์ทัน

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