Hướng dẫn Shrink Log để giảm bớt dung lượng file log database MSSQL

  • Saturday 01/02/2020

Hướng dẫn Shrink Log để giảm bớt dung lượng file log database MSSQL

Vào một ngày đẹp trời, bổng dưng bạn nhận thấy website của mình ngưng hoạt động (hoặc báo lỗi), sau một hồi kiểm tra hoặc liên hệ với nhà cung cấp Hosting thì được biết dung lượng Web Hosting/ Cloud VPS đã bị đầy mà trong đó Database chiếm dung lượng đáng kể gây gián đoạn website.

Hay bạn tự nhận thấy Database của mình đã tăng dung lượng, trong khi dữ liệu của mình chỉ có vài MB (hoặc vài GB) nhưng LOG File lại chiếm đến tận hàng trăm GB. Vậy bạn phải làm sao để giải quyết vấn đề này?

Có rất nhiều cách để xử lý giảm dung lượng log database MSSQL:

1. Detach DB, xóa file log database MSSQL, sau đó Attach lại Database. Với cách này bạn phải thực hiện thủ công và buộc phải gián đoạn các kết nối từ các ứng dụng đến Database của bạn, sẽ không khả thi nếu ứng dụng của bạn đòi hỏi tính liên tục.

2. Backup LOG với OPTION là TRUNCATE_ONLY hoặc NO_LOG. Tuy nhiên từ phiên bản SQL Server 2008 thì Option này đã lược bỏ.

3. Chúng tôi khuyến nghị bạn thực hiện theo cách sau đây, vừa thực hiện nhanh chóng, dễ dàng lại vừa đáp ứng được nhu cầu liên tục của ứng dụng. Đó là, SHRINK FILE log database MSSQL

.

Giả sử, bạn đang có các file database: MB_Data.MDF và file Log: MB_Log.LDF, bạn có thể Run đoạn query sau đây từ SQL Management Studio hoặc có thể tạo sẵn và Run 1 Stored Procedure để shirk log database MSSQL

USE MB;

GO

— Truncate the log by changing the database recovery model to SIMPLE.

ALTER DATABASE MB SET RECOVERY SIMPLE;

GO — Shrink the truncated log file to 1 Mb.

DBCC SHRINKFILE (MB_Log, 1);

GO — Reset the database recovery model.

ALTER DATABASE MB SET RECOVERY FULL;

GO

Bạn có thể hiểu phương pháp này theo cách giải thích sau :

Có 3 chế độ Recovery trong SQL Server: FULL, SIMPLEBULK LOGGED. Chế độ mặc định là FULL. Bạn có thể vào phần Option của database, xem trong Recovery Model. Khi ở chế độ này, bất kì một transaction nào, kể cả khi đã commit cũng đều được lưu trong LOG, do đó có thể dựa vào những Transaction này để “quay lui (rollback)” DB về bất kì thời điểm nào. Vì thế với những DB có Transaction nhiều, DATA ít thì file log database MSSQL vẫn có thể rất lớn.

Đầu tiên SET RECOVERY của DB về SIMPLE, ở chế độ này sau khi Transaction được commit, sẽ tự động xóa. Do vậy File LOG của database ở chế độ này thường rất nhỏ.

Dùng DBCC SHRINKFILE để SHRINK file log xuống còn 1 Mb. Nếu không set Recovery về SIMPLE, thì sẽ ko thể xóa bỏ hết các Transaction đã được commit. SHRINKFILE chỉ thu dọn và sắp xếp và phân bố lại dữ liệu, bỏ các vùng trống để giải phóng bộ nhớ, chứ không phải xóa dữ liệu. Vì thế ở chế độ FULL, SHRINKFILE hầu như ko tác dụng, hoặc nếu có thì file log database MSSQL dung lượng giảm đi ko đáng kể.

Sau đó SET RECOVERY về lại FULL. Trên MSDN cũng khuyên nếu muốn Backup LOG, các bạn nên chuyển về chế độ SIMPLE, hơn là backup LOG với Truncate_Only và No_LOG.

Chú ý: Với những database dung lượng lớn, bạn cần phải chủ động backup database trước và tham khảo ý kiến của lập trình website trước khi thực hiện.

Các bạn có thể tham khảo thêm các thủ thuật khác tại đây

P.A Việt Nam cung cấp đa dạng các Plan Hosting đáp ứng yêu cầu của khách hàng
Hosting Phổ Thông
Hosting Chất Lượng Cao

Tham khảo các ưu đãi: https://www.pavietnam.vn/vn/tin-khuyen-mai/

Rate this post