Tôi có cùng một vấn đề và tôi tin rằng tôi đã giải quyết nó nhưng tôi chưa thể kiểm tra đầy đủ để xác nhận.
Tôi tin rằng các vấn đề liên quan đến số lượng VLF bạn có trong tệp nhật ký của bạn chứ không phải kích thước của nó. Nếu bạn có một logfile lớn, có khả năng nó đã tăng trưởng hữu cơ thông qua các sự kiện tăng trưởng tự động và đó không phải là sự tăng trưởng theo kế hoạch có chủ ý. Nếu đó là trường hợp, bạn có thể có hàng ngàn VLF bên trong các tệp nhật ký.
Đây là một truy vấn để xem bạn có bao nhiêu VLF mà tôi đã sử dụng từ đây :
Create Table #stage(
FileID int
, FileSize bigint
, StartOffset bigint
, FSeqNo bigint
, [Status] bigint
, Parity bigint
, CreateLSN numeric(38));
Create Table #results(
Database_Name sysname
, VLF_count int
);
Exec sp_msforeachdb N'Use ?;
Insert Into #stage
Exec sp_executeSQL N''DBCC LogInfo(?)'';
Insert Into #results
Select DB_Name(), Count(*)
From #stage;
Truncate Table #stage;'
Select *
From #results
Order By VLF_count Desc;
Drop Table #stage;
Drop Table #results;
Để được giải thích thêm về những gì VLF đang xem liên kết này .
Tôi tin rằng vấn đề là với rất nhiều VLF, máy chủ SQL phải mất một thời gian dài để đánh giá trạng thái của chúng và sau đó đưa cơ sở dữ liệu ra khỏi phục hồi. Nếu bạn thu nhỏ tệp nhật ký của mình đến kích thước nhỏ nhất bạn có thể, thường là kích thước của VLF đầu tiên được tạo trong tệp nhật ký, thì bạn có thể ngay lập tức cố tình phát triển lại và do đó tạo ra số lượng VLF phù hợp (ít hơn 16).
Khi điều này hoàn tất, tôi tin rằng bạn sẽ có thể thấy rằng cơ sở dữ liệu của bạn được khôi phục nhanh hơn nhiều.
Tôi chưa có cơ hội kiểm tra thất bại đối với các trường hợp sản xuất của chúng tôi sau khi tôi giải quyết các vấn đề về VLF của chính chúng tôi vì vậy tôi sẽ rất tò mò nếu bạn có thể xác nhận đây là nguyên nhân cốt lõi của vấn đề. Thực nghiệm tôi đã thấy thời gian cần thiết để khôi phục lại trong môi trường dàn dựng của chúng tôi giảm đáng kể do điều này vì vậy hy vọng đó là nó.