ลดขนาดบันทึกธุรกรรมขณะใช้กลุ่มความพร้อมใช้งาน AlwaysOn


17

เรากำลังใช้AlwaysOn Availability Groupคุณสมบัติของ SQL Server 2012 สำรองฐานข้อมูลเต็มรูปแบบปกติและสำรองข้อมูลบันทึกธุรกรรมจะทำทุกวันในฐานข้อมูลรอง

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

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

ฉันกู้คืนฐานข้อมูลในเครื่องแล้วทำการดำเนินการย่อขนาด ขนาดของไฟล์บันทึกลดลงเหลือ 160 MB

คำถามของฉันอยู่ที่ฐานข้อมูลใดที่ฉันควรทำการลดขนาดไฟล์ล็อกธุรกรรม (หลักรองหรือทั้งสองอย่าง)?


ฉันเดาว่าในอดีตเป็นเวลาหลายปีที่ไม่มีไฟล์แบ็คอัพสำรองดังนั้นมันจึงใหญ่มาก การดำเนินการDBCC SQLPERF (LOGSPACE)ฉันจะเห็นว่ามี0.06%การใช้ไฟล์เท่านั้น - ไม่มีจุดใดที่ฉันจะเก็บไฟล์บันทึกขนาดใหญ่เช่นนี้ได้ ใน[sys].[database_files]ฉันจะตรวจสอบว่าmax_sizeมีการตั้งค่า-1กับgrowthการ65536ดังนั้นฉันเดาเมื่อมันต้องมีพื้นที่ว่างมากขึ้นก็จะได้รับ อย่างไรก็ตามฉันสามารถลดขนาดมันเป็น 5% เพื่อป้องกันการเติบโตในอนาคต ฉันกำลังพยายามหาคำยืนยันว่าฉันไม่คิดที่จะทำเช่นนั้น


อันที่จริงแล้วการแบ็คอัพ (ในฐานข้อมูลและไฟล์บันทึก) จะดำเนินการเฉพาะในฐานข้อมูลรองดังนั้นมันจะง่ายกว่าที่จะทำการลดขนาดไฟล์ลง แต่ขนาดล็อกไฟล์หลักจะลดลงเช่นกัน?

คำตอบ:


21

ในการเขียน AGs สามารถเกิดขึ้นได้บนหลักเท่านั้น การดำเนินการย่อขนาดถูกเขียน ดังนั้นคุณต้องทำการย่อขนาดบนหลัก โปรดทราบว่าการย่อขนาดอาจไม่ลดลงมากตามที่คุณคาดไว้การทดสอบของคุณในฐานข้อมูลที่เรียกคืนอาจใช้รูปแบบการกู้คืนแบบง่าย อ่านวิธีย่อขนาดบันทึก SQL Serverสำหรับข้อมูลเพิ่มเติม

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


7

คุณสามารถลอง:

  1. ฐานข้อมูลบนเซิร์ฟเวอร์ทั้งหมดในกลุ่มความพร้อมใช้งานควรอยู่ในสถานะซิงโครไนซ์
  2. ย้ายเพจที่ใช้แล้วไปยังจุดเริ่มต้นของบันทึกธุรกรรมก่อนที่จะย่อขนาด
  3. บางครั้งพื้นที่ว่างของบันทึกมี 99% แต่ SQL Server ไม่สามารถปล่อยพื้นที่ที่ไม่ได้ใช้ ลองรีบูตแต่ละเซิร์ฟเวอร์ในกลุ่มความพร้อมในทางกลับกัน
  4. บางครั้งคุณจำเป็นต้อง bakup และลดขนาดล็อกธุรกรรม 2 ครั้งก่อนที่ MS SQL Server จะปล่อยพื้นที่ว่าง (ไม่สามารถลดขนาดไฟล์บันทึก (DB_Log) ได้เนื่องจากไฟล์บันทึกโลจิคัลที่อยู่ท้ายไฟล์ถูกใช้งาน)

ลองใช้สคริปต์นี้:

    - ตั้งค่าฐานข้อมูลปัจจุบันภายในขั้นตอนงานหรือสคริปต์
    - ตรวจสอบดำเนินการในระดับประถมเท่านั้น
    ถ้า (เลือกบทบาท
        FROM sys.dm_hadr_availability_replica_states AS
        เข้าร่วม sys.availability_replicas AS b
            ON b.replica_id = a.replica_id
    WHERE b.replica_server_name = @@ SERVERNAME) = 1
    เริ่ม
        - ใช้ [test_db] - ไม่ทำงานกับ MS SQL 2014 เพียงแค่คอมเม้นท์บรรทัดนี้และตั้งฐานข้อมูลปัจจุบันในขั้นตอนงานหรือสคริปต์
        - 1) Bakup Trn
        การสำรองข้อมูลเข้าสู่ระบบ [test_db] เพื่อ DISK = N'D: \ MSSQL \ Backup \ test_db.trn 'ด้วย NOFORMAT, INIT, NAME = N' การสำรองข้อมูล Trn ', ข้าม, NOUNLOAD, COMPRESSION, STATS = 10
        - 2) ย้ายหน้าที่ใช้แล้ว
        DBCC SHRINKFILE (N'test_db_log ', 3000, NOTRUNCATE)
        - 3) บันทึก SHRINKFILE
        DBCC SHRINKFILE (N'test_db_log ', 3000)
    END
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.