Hướng dẫn tối ưu dung lượng Log file của database SQL Server

Thủ thuật công nghệ - Đã có rất nhiều người dùng gặp phải tình trạng thông báo Web-hosting đang sử dụng đã bị tạm dừng hoạt động với lý do đầy dung lượng trong khi họ không hề cập nhật, bổ sung thêm thông tin, dữ liệu. Liệu có phải là do máy chủ báo sai? Làm cách nào để khắc phục tình trạng đó? Hãy cùng theo dõi nội dung dưới đây để nhận được lời giải đáp hữu ích nhất bạn nhé!

Sau khi phối hợp với Khách hàng chúng tôi nhận thấy rằng database SQL Server trên Web-hosting chiếm gần hết dung lượng, trong khi dữ liệu của họ thì chỉ có vài trăm MB mà file LOG lên đến tận vài chục GB. Chúng ta phải làm thế nào để tối ưu dung lượng của Log file này ?


>>>> Có thể bạn quan tâm:  Đơn vị cung cấp dịch vụ thuê máy chủ nào đảm bảo uy tín, chất lượng?

Có 3 cách để giải quyết vấn đề này:

Cách 1: Detach DB, xóa file LOG, tiếp đó là ATTACH lại. Tuy nhiên với CSDL đòi hỏi tính sẵn sàng cao thì cách này không khả thi.

Cách 2: Backup LOG với OpTION là TRUNCATE_ONLY hoặc NO_LOG. Tuy nhiên với phiên bản SQL Server 2008 thì đã bỏ Option này.

Hai cách trên khi thực hiện đều có những nhược điểm khó khắc phục do vậy chúng tôi khuyên bạn nên thực hiện theo cách 3.

>>> Xem thêm:  

Những thủ thuật sử dụng Galaxy Note 5 ít người biết

Các cách để giải phóng bộ nhớ ổ cứng trên Windows hiệu quả nhất

HP tách thành 2 công ty đảm nhận mỗi mảng chuyên biệt

Cách 3: Thực hiện SHRINK file log, giả sử chúng ta có file Data: MB_Data.MDF và file Log: MB_Log.LDF

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

Giải thích ý nghĩa của đoạn code trên:

Có 3 chế độ Recovery trong SQL Server: FULL, SIMPLE và BULK 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 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ư không tác dụng, hoặc nếu có thì file LOG dung lượng giảm đi không đá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.

Chỉ với dòng code đơn giản đã có thể giúp bạn tối ưu dung lượng Log file của database SQL Server một cách đơn giản, nhanh và có hiệu quả oy. Bạn hãy cùng thực hiện theo chúng tôi để cảm nhận thành quả nhé!

Hi vọng những kiến thức chúng tôi chia sẻ thực sự hữu ích đối với bạn đọc. Hãy chia sẻ bài viết nếu cảm thấy có giá trị nhé!

Nguồn matbao.net



Share on Google Plus
    Blogger Comment
    Facebook Comment

0 nhận xét :

Đăng nhận xét