Chúng tôi có hai bảng cơ sở dữ liệu ErrorLog
và Audit
cả hai đều tăng khá lớn trong vài năm qua. Vì vậy, trong nỗ lực giảm kích thước của cơ sở dữ liệu, tôi phải viết một tập lệnh để xóa tất cả các hàng cũ hơn 6 tháng từ hai bảng này.
Đây là những gì tôi nghĩ ra:
ALTER DATABASE StudioWebTest SET RECOVERY SIMPLE;
DELETE FROM [Audit] WHERE AuditDate < DATEADD(M, -6, GETDATE());
DELETE FROM [ErrorLog] WHERE ErrorDate < DATEADD(M, -6, GETDATE());
ALTER DATABASE StudioWebTest SET RECOVERY FULL;
Trên máy phát triển của tôi (SQL Server 2008 R2) có hoặc không thay đổi chế độ khôi phục, kích thước cơ sở dữ liệu tăng gấp 2-3 lần kích thước. Tuy nhiên, nếu tôi làm theo điều này ngay lập tức bằng lệnh thu nhỏ, nó sẽ cắt kích thước của cơ sở dữ liệu xuống còn một nửa kích thước ban đầu (trước khi xóa bản ghi).
Tuy nhiên, nếu tôi không thực hiện thu nhỏ trong vài ngày, thì việc thu nhỏ gần như không hiệu quả, trong khi kích thước cơ sở dữ liệu bị giảm, nó vẫn gần gấp đôi kích thước của nó (trước khi xóa các bản ghi). Không biết quá nhiều về cách SQL Server sử dụng không gian mà nó đã phân bổ, tôi cho rằng điều này có liên quan đến nó bằng cách sử dụng không gian bổ sung đã được giải phóng.
Tất cả sẽ ổn thôi trừ một điều. Khi chúng tôi chạy nó trên môi trường thử nghiệm sản xuất sử dụng SQL Server 2005, lệnh thu nhỏ không làm giảm kích thước của cơ sở dữ liệu về một nửa kích thước ban đầu.
Để thay thế, tôi cũng đã thử sử dụng TRUNCATE
thay thế DELETE
nhưng điều này dường như không tạo ra nhiều khác biệt. Cơ sở dữ liệu vẫn phát triển ồ ạt sau khi báo cáo hoàn thành và tôi vẫn phải thu nhỏ nó để có kết quả tương tự. Chúng tôi chưa thử điều này trên máy thử sản xuất, nhưng vì lệnh thu nhỏ dường như không cắt nó, có vẻ như nghi ngờ rằng điều này sẽ mang lại bất kỳ cải thiện nào.
Dù sao, tôi chỉ tự hỏi liệu ai đó có thể giải thích tại sao cơ sở dữ liệu phát triển quá nhiều mặc dù thay đổi cài đặt khôi phục lỗi không? điều này có thể được ngăn ngừa bằng cách nào? Hoặc có thể đề xuất một phương tiện thay thế để giảm kích thước của cơ sở dữ liệu nếu đây không phải là cách tốt nhất để thực hiện điều này.
CẬP NHẬT:
Tôi vừa mới thực hiện thêm một số thử nghiệm bằng cách sử dụng TRUNCATE
nó dường như không tăng kích thước bây giờ (có thể tôi tưởng tượng ra nó). Tôi vẫn cần phải thu nhỏ cơ sở dữ liệu để xem giảm kích thước tổng thể. Tôi có thể thử điều này trên máy chủ thử nghiệm sản xuất. Vào cuối ngày, tôi nghĩ rằng các nhà quản lý của tôi sẽ hạnh phúc miễn là kích thước giảm xuống một mức độ nào đó.