У мене є те саме питання, і я вважаю, що я його вирішив, але не зміг повністю перевірити його для підтвердження.
Я вважаю, що проблеми пов'язані з кількістю VLF-файлів у вашому лог-файлі, а не з їх розміром. Якщо у вас великий логфайл, цілком ймовірно, що він органічно зростав через події автоматичного зростання і що це не був навмисний плановий ріст. У такому випадку у вас можуть бути тисячі VLF-файлів у файлах журналу.
Ось запит, щоб побачити, скільки у вас VLF-файлів я використовував тут :
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;
Для подальшого пояснення того, що VLF дивіться за цим посиланням .
Я вважаю, що проблема полягає в тому, що з такою кількістю VLF потрібно багато часу SQL серверу, щоб оцінити їх стан, а потім вивести базу даних з відновлення. Якщо ви зменшите свій файл журналу до найменшого розміру, який ви можете, часто це розмір першого VLF, який був створений у файлі журналу, ви можете негайно наробити його знову і тим самим змусити створити потрібну кількість VLF (щось менше, ніж 16).
Як тільки це буде завершено, я вважаю, що ви зможете побачити, що ваша база даних виходить із відновлення набагато швидше.
У мене не було можливості перевірити невдачі нашої виробничої інстанції після того, як я вирішив власні проблеми з VLF, тому мені було б дуже цікаво, якщо ви можете підтвердити, що це першопричина проблеми. Експериментально я побачив, що час, необхідний для виходу з реставрації в нашому сценічному середовищі, різко скоротився через це, надіюсь, що це так.