ฉันเคยมีปัญหานี้มาก่อน
- คุณมีฐานข้อมูลขนาดใหญ่และไดรฟ์บันทึกขนาดเล็ก คุณต้องการจัดระเบียบใหม่ (ด้วยเหตุผลหลายประการ)
- เมื่อคุณพยายามทำสิ่งนี้บนโต๊ะที่มีการแยกส่วนขนาดใหญ่บันทึกจะถูกเติมจนกระทั่งไดรฟ์บันทึกเต็มแล้วคำสั่งจะยกเลิก
- หากอยู่ในโหมดง่ายธุรกรรมอื่น ๆ อาจล้มเหลวจนกว่าจะมีการล้างข้อมูลบันทึกในจุดตรวจถัดไปและหากอยู่ในโหมดเต็มธุรกรรมอื่น ๆ อาจล้มเหลวจนกว่าจะมีการสำรองข้อมูลบันทึกครั้งถัดไป ดับ!
- หากคุณอยู่ในโหมดเต็มรูปแบบคุณจะเพิ่มความถี่ในการสำรองข้อมูลบันทึก แต่ก็ไม่ได้ช่วยหลีกเลี่ยงปัญหาเนื่องจากการจัดระเบียบใหม่จะทำในการทำธุรกรรมโดยนัยบันทึกไม่ชัดเจนจนกว่าการทำธุรกรรมจะเสร็จสิ้นหรือยกเลิกหรือหยุด
- และคุณต้องการให้มีการจัดระเบียบใหม่ให้เสร็จสมบูรณ์
นั่นเป็นเรื่องโต้กลับเล็กน้อยเพราะคุณรู้ว่าถ้าคุณยกเลิกการจัดระเบียบใหม่สามารถดำเนินการต่อจากที่ค้างไว้มันเป็นเพียงการยกเลิกที่ทำธุรกรรมแทนการย้อนกลับ
นี่คือสิ่งที่คุณทำ มันค่อนข้างยาว แต่ตรงไปตรงมา
- สร้างล็อกไฟล์ของคุณล่วงหน้าให้มีขนาดค่อนข้างใหญ่ แต่ไม่ใช่ขนาดสูงสุด โดยทั่วไปคุณต้องการออกจากพื้นที่ให้เพียงพอเพื่อทำงานที่มีประโยชน์รวมถึงการเติบโตเล็กน้อยหากเกิดขึ้นดังนั้นการทำงานปกติจะไม่หยุด
- สร้างงานเพื่อเรียกใช้ดัชนีจัดระเบียบใหม่ของคุณ ('จัดระเบียบใหม่')
สร้างการแจ้งเตือน WMI ของตัวแทน ('จัดระเบียบใหม่บรรเทาวาล์ว') บนเงื่อนไขประสิทธิภาพ
- วัตถุ: SQLServer: ฐานข้อมูล
- ตัวนับ: เปอร์เซ็นต์การบันทึกที่ใช้
- อินสแตนซ์: (ชื่อฐานข้อมูลขนาดใหญ่ของคุณ)
- แจ้งเตือนหากตัวนับเพิ่มขึ้นด้านบน: 80
- การตอบสนอง: ดำเนินการงาน ('จัดระเบียบเช็คใหม่')
สร้างงาน ('จัดระเบียบเช็คใหม่')
- ในการตรวจสอบงาน msdb.dbo.sysjobactivity เพื่อดูว่างาน 'จัดระเบียบใหม่' กำลังทำงานอยู่หรือไม่ และถ้าเป็น ...
- หยุดงานและสำรวจความคิดเห็นจนกว่าจะหยุด อาจใช้เวลาสองสามวินาที
- (หากคุณอยู่ในโหมดเต็มรูปแบบ) ทริกเกอร์งานสำรองข้อมูลบันทึกของคุณและยืนยันเมื่อเสร็จสิ้น
- ตรวจสอบ sys.dm_os_performance_counters อีกครั้งว่าตัวนับพื้นที่ว่างสำหรับบันทึกของคุณลดลงต่ำกว่าขีด จำกัด ของคุณ
- เริ่มงาน 'จัดระเบียบใหม่'
ทดสอบสิ่งเหล่านี้ได้จากที่ไหนสักแห่งแม้แต่แซนด์บ็อกซ์สำหรับการพัฒนาเพื่อให้แน่ใจว่ามันทำงานได้อย่างถูกต้องก่อนที่จะนำไปใช้กับเซิร์ฟเวอร์ที่ใช้งานจริงของคุณ
สิ่งที่คุณจะเห็นคืองาน 'จัดระเบียบใหม่' จะเริ่มต้นและเริ่มเติมบันทึก เมื่อบันทึกเต็มร้อยละจะมีการทริกเกอร์การแจ้งเตือน WMI (ภายในเวลาประมาณ 30 วินาที) ซึ่งจะเรียกใช้งานอื่นของคุณซึ่งเห็นว่างาน 'จัดระเบียบใหม่' กำลังทำงานและมีแนวโน้มว่าเกิดข้อผิดพลาด จากนั้นจะหยุด 'จัดระเบียบใหม่' สำรองข้อมูลยืนยันว่าพื้นที่ว่างของบันทึกกลับไปเป็นค่าที่เหมาะสมจากนั้นเริ่มงาน 'จัดระเบียบใหม่' ของคุณอีกครั้งซึ่งจะไปรับตำแหน่งที่ค้างไว้
ดังนั้นตามที่คุณสามารถเหตุผลก่อนกำหนดขนาดบันทึกของคุณให้เป็นตัวเลขที่สมเหตุสมผลในสถานการณ์นี้คือการลดจำนวนการเติบโต / ทริกเกอร์ / งาน / หยุด / รีสตาร์ทเพื่อให้มีประสิทธิภาพมากขึ้นและยังมีพื้นที่เพียงพอสำหรับ การเติบโตเป็นครั้งคราวซึ่งไม่ได้ทันเวลา
นี่เป็นสถานการณ์แปลก ๆ ฉันค่อนข้างแน่ใจว่าฉันเพิ่งถูกติดคุกเมื่อไม่กี่ปีที่ผ่านมาและเห็นได้ชัดว่ามีปัญหาพื้นฐานที่มือ แต่ถ้าคุณจัดการกับเซิร์ฟเวอร์หลายร้อยแห่งกรณีตัวอย่างเล็ก ๆ น้อย ๆ เช่นนี้จะทำให้เกิดปัญหาที่ไม่สามารถจัดการได้ไม่ว่าด้วยเหตุผลทางธุรกิจใด ๆ ยกเว้นโดย MacGyvering โซลูชันชั่วคราวที่ทำให้งานสำเร็จ
ตราบใดที่มันปลอดภัยตรรกะทดสอบและมีเอกสารที่ดีก็ไม่น่าจะมีปัญหา