提问人:Marson 提问时间:11/13/2023 最后编辑:Marson 更新时间:11/14/2023 访问量:85
日志文件自动增长 SQL-Server
Log file auto growth SQL-Server
问:
即使只使用了大约一半的 VLF,我的日志文件也会保持自动增长,谁能解释一下?
见下图。我昨天截断了日志文件,这是自我以来的第一次加载,据我了解,没有使用那些将 0 作为 vlf 序列号的日志文件。但是日志文件仍然自动增长,vlf_size_mb中有 150 个日志文件是自动增长的。怎么会这样?
下图与LSN不同,LSN最后一列。
这是从sys.trace_event,正如你所看到的,日志确实自动增长了,有谁知道如果不使用VLF蜂鸣,这是怎么发生的?
答:
2赞
Sean Gallardy
11/13/2023
#1
[...]据我了解,没有使用以 0 作为 VLF 序列号的那些。
你是对的。
但日志文件仍然自动增长 [...]
日志不会增长,我非常怀疑它是否自动增长,因为 OP 中的图像显示日志已经重用了一些 VLF,并且没有使用文件的最大大小。
一种调查方法是在默认跟踪中查找自动增长,该跟踪具有日志自动增长的事件 93。
select trace_event_id, name FROM sys.trace_events where name like 'Log%grow%'
还可以运行以获取日志的创建 lsn,如果它都是相同的 lsn,那么它就不会增长。sys.dm_db_log_info
鉴于更新的屏幕截图显示确实发生了自动增长,最可能的解释是由于日志预留作为大型事务的一部分。
当 VLF 34627 处于活动状态时,所有自动增长都发生,并且看起来它仍然处于活动状态。鉴于 VLF 34620 的奇偶校验更改,最有可能的是运行了一个大型事务,这需要保留更多空间并导致日志增长。
评论
0赞
Marson
11/17/2023
嗨,肖恩,感谢您的回答!我是否理解您正确,SQL 服务器估计会有比实际更大的事务,因此保留了额外的空间?
0赞
Sean Gallardy
11/19/2023
当发生任何事务时,事务的部分工作是保留日志空间,以便操作可以在需要时自行撤消。保留空间 + 已用空间的组合可能会使日志增长。对我来说,它会增长这么多似乎仍然很奇怪,但我们实际上没有任何其他数据,如果不重新创建日志,就不可能得到确切的答案,因此我在这里对可用数据的最佳猜测。
评论
SELECT name, log_reuse_wait_desc from sys.databases