每次我重新启动我的服务器时,数据库总是处于恢复模式,它需要大约 20 分钟才能正常运行。这总是并且只有在我重新启动服务器时才会发生,所以我有几个问题......
我目前正在使用 Microsoft SQL Server 2008。
我有同样的问题,我相信我已经解决了它,但我无法对其进行全面测试以确认。
我相信这些问题与您的日志文件中的 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;
Run Code Online (Sandbox Code Playgroud)
有关什么是 VLF 的进一步说明,请参阅此链接。
我认为问题在于,对于如此多的 VLF,SQL 服务器需要很长时间来评估它们的状态,然后使数据库退出恢复状态。如果您将日志文件缩小到最小的大小,通常是在日志文件中创建的第一个 VLF 的大小,那么您可以立即有意地再次增大它,从而让它创建正确数量的 VLF(小于16)。
一旦完成,我相信您将能够看到您的数据库更快地恢复。
在解决了我们自己的 VLF 问题后,我还没有机会测试我们生产实例的故障转移,所以我很好奇您是否能确认这是问题的根本原因。通过实验,我已经看到在我们的临时环境中恢复所需的时间因此而大大减少,所以希望就是这样。
归档时间: |
|
查看次数: |
3839 次 |
最近记录: |