Tôi đã có vấn đề này trước đây.
- Bạn có một cơ sở dữ liệu lớn và một ổ đĩa nhỏ. Bạn muốn tổ chức lại (vì nhiều lý do).
- Khi bạn thử điều này trên một bảng phân mảnh lớn, nhật ký sẽ điền cho đến khi ổ đĩa nhật ký đầy và sau đó lệnh hủy bỏ.
- Nếu ở chế độ đơn giản, các giao dịch khác có thể thất bại cho đến khi nhật ký bị xóa trong điểm kiểm tra tiếp theo và nếu ở chế độ đầy đủ, các giao dịch khác có thể thất bại cho đến lần sao lưu nhật ký tiếp theo. Mất điện!
- Nếu bạn ở chế độ đầy đủ, bạn tăng tần suất sao lưu nhật ký nhưng điều đó không giúp tránh được vấn đề vì việc sắp xếp lại được thực hiện trong một giao dịch ngầm, nhật ký sẽ không rõ ràng cho đến khi giao dịch kết thúc hoặc hủy bỏ hoặc bị dừng.
- Và bạn thực sự muốn tổ chức lại để chạy đến hoàn thành.
Đó là một chút phản trực giác bởi vì bạn biết nếu bạn hủy bỏ việc sắp xếp lại thì nó có thể tiếp tục từ nơi nó rời đi, chỉ là việc hủy bỏ thực hiện giao dịch thay vì quay trở lại.
Đây là những gì bạn làm. Nó hơi dài nhưng đơn giản.
- Phát triển trước tệp nhật ký của bạn đến kích thước tương đối lớn, nhưng không phải là tối đa. Về cơ bản, bạn muốn để lại đủ không gian để thực hiện công việc hữu ích, cộng với một số tăng trưởng nhỏ nếu chúng xảy ra, để các hoạt động bình thường sẽ không dừng lại.
- Tạo một công việc để chạy lại chỉ mục của bạn ('Sắp xếp lại').
Tạo cảnh báo WMI tác nhân ('Sắp xếp lại van cứu trợ') trong điều kiện hiệu suất.
- Đối tượng: SQLServer: Cơ sở dữ liệu
- Số lượt truy cập: Phần trăm Nhật ký được sử dụng
- Sơ thẩm: (tên cơ sở dữ liệu lớn của bạn)
- Thông báo nếu bộ đếm tăng lên trên: 80
- Trả lời: Thực thi công việc ('Kiểm tra lại tổ chức')
Tạo một công việc ('Kiểm tra lại tổ chức')
- Trong công việc, hãy kiểm tra msdb.dbo.sysjobactivity để xem công việc 'Sắp xếp lại' có đang chạy hay không. Và nếu đó là ...
- Dừng công việc và thăm dò ý kiến cho đến khi nó dừng lại. Điều này có thể mất một vài giây.
- (Nếu bạn đang ở chế độ đầy đủ) Kích hoạt công việc sao lưu nhật ký của bạn và xác nhận khi nào nó kết thúc.
- Kiểm tra kỹ sys.dm_os_performance_counters rằng bộ đếm không gian trống nhật ký của bạn đã giảm dưới ngưỡng của bạn.
- Bắt đầu công việc 'Sắp xếp lại'.
Kiểm tra tất cả điều này ở đâu đó, thậm chí là một hộp cát phát triển, để đảm bảo nó hoạt động đúng trước khi dán nó vào máy chủ sản xuất của bạn.
Những gì bạn sẽ thấy là công việc 'Sắp xếp lại' bắt đầu và bắt đầu điền vào nhật ký. Khi nhật ký đạt đến một phần trăm đầy đủ, nó sẽ kích hoạt cảnh báo WMI (trong khoảng 30 giây) để chạy công việc khác của bạn, thấy rằng công việc 'Sắp xếp lại' đang chạy và rất có thể có lỗi. Sau đó, nó dừng 'Sắp xếp lại', thực hiện sao lưu, xác nhận không gian trống nhật ký trở lại giá trị hợp lý, sau đó bắt đầu lại công việc 'Sắp xếp lại' của bạn, nơi sẽ tiếp tục ở nơi nó dừng lại.
Vì vậy, vì lý do bạn có thể thay đổi kích thước trước nhật ký của mình thành một con số hợp lý trong kịch bản này là để giảm số lượng tăng trưởng / kích hoạt / công việc / dừng / khởi động lại, để nó có thể hiệu quả hơn và cũng giữ đủ không gian cho tăng trưởng không thường xuyên mà không bắt kịp thời gian.
Đây là một loại kịch bản kỳ lạ. Tôi khá chắc chắn rằng tôi đã bực bội về điều này một vài năm trước và rõ ràng có những vấn đề cơ bản tiềm ẩn trong tay ở đây. Nhưng nếu bạn đối phó với hàng trăm máy chủ, một vài trường hợp như thế này sẽ mọc lên mà không thể xử lý bằng bất kỳ cách nào, vì bất kỳ lý do kinh doanh nào, ngoại trừ MacGyvering một giải pháp tạm thời hoàn thành công việc.
Miễn là nó an toàn, hợp lý, được kiểm tra và được ghi chép đầy đủ, sẽ không có vấn đề gì.