我有一个处于完全恢复模式的 SQL Server 2005 数据库,具有以下统计信息:
- 姓名 XX
- 状态 0
- state_desc 在线
- 尺寸 2620152
- 最大尺寸 -1
- 增长 128
日志文件
- 名称 XX_Log
- 状态 0
- state_desc 在线
- 尺码 517832
- 最大尺寸 268435456
- 增长 64000
日志文件统计
- 数据库名称 XX
- 日志大小 (MB) 4045.555
- 已用日志空间 (%) 0.7804911
- 状态 0
所以我想减小日志的大小——我想我的目标应该是 50MB?随着 50MB 的增长 - 所以我做了一个完整的备份 - 然后是日志备份,两次。没有成功
完成一些阅读后,我检查了我的 [log_reuse_wait] 并得到了 2 个结果 - 备份日志。所以第一个问题是为什么,当我刚刚完成两次备份时?
我已查找未结交易并收到消息
没有活跃的开放交易。DBCC 执行完成。如果 DBCC 打印出错误消息,请联系您的系统管理员
而且我已经检查了活动监视器并查看了 Blocked Header 并且在任何会话中都找不到 1 - 我相信这表明一个长时间运行的事务
最后,我所知道的是,当我运行时,DBCC LOGINFO
我得到了 390 行的返回,我认为这表明 VLF 计数太高了?
我相信我读过的文章中的计数太高(但可能没有完全理解)这些文章是transaction-log-vlfs-too-many-or-too-few 和a-busy accidental-dbas-guide-to-managing -vlfs
我很感激我可以使数据库脱机并在此处和其他地方详细处理问题,但我认为日志文件会再次增长,这是我们的主要生产数据库,因此尽可能避免停机
人们建议下一步做什么?
谢谢伊恩
您在这里有几个实际问题,所以让我们分别解决每个问题。
要回答为什么 log_reuse_wait 不会更新的问题,这个字段(连同 SQL Server 中的其他元数据)只会在某些事件发生后更新。有了这个字段,它将在数据库检查点发生后更新。要在进行日志备份后强制执行此操作,请执行以下操作:
将出现检查点并且
sys.databases
将更新中的字段。为什么您的日志文件不会缩小,这是一个更大的问题。您应该阅读 Mike Walsh的这个问题/答案,了解为什么您的日志文件在增长以及如何最好地管理它。我还在这个答案中提供了更多细节。
关于 VLF,我强烈建议您现在不要担心。是的,您可以看到使用多个 VLF 对性能的影响(了解 VLF 是什么以及它如何工作是理解日志文件的基础),但是只有在定期管理带有备份的日志时才能解决这个问题而且它并没有失控。
最后,至于日志的大小,这是一个非常开放的问题。这在很大程度上取决于您的数据库看到多少活动以及该活动的范围。很可能您会缩小日志文件,只是看到它再次增长以适应您的常规数据库活动。在考虑缩小您的日志文件之前,您需要了解是什么导致它增长,以及您是否正在针对它运行定期计划的日志备份。