日志文件自动增长 SQL-Server

Log file auto growth SQL-Server

提问人:Marson 提问时间:11/13/2023 最后编辑:Marson 更新时间:11/14/2023 访问量:85

问:

此问题是从 Stack Overflow 迁移而来的,因为它可以在 Database Administrators Stack Exchange 上找到答案。10 天前迁移

即使只使用了大约一半的 VLF,我的日志文件也会保持自动增长,谁能解释一下?

见下图。我昨天截断了日志文件,这是自我以来的第一次加载,据我了解,没有使用那些将 0 作为 vlf 序列号的日志文件。但是日志文件仍然自动增长,vlf_size_mb中有 150 个日志文件是自动增长的。怎么会这样?

enter image description here

下图与LSN不同,LSN最后一列。

I didn't try anything

这是从sys.trace_event,正如你所看到的,日志确实自动增长了,有谁知道如果不使用VLF蜂鸣,这是怎么发生的?

enter image description here

sql-服务器

评论

0赞 J.D. 11/13/2023
这个数据库有什么意义?SELECT name, log_reuse_wait_desc from sys.databases

答:

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
当发生任何事务时,事务的部分工作是保留日志空间,以便操作可以在需要时自行撤消。保留空间 + 已用空间的组合可能会使日志增长。对我来说,它会增长这么多似乎仍然很奇怪,但我们实际上没有任何其他数据,如果不重新创建日志,就不可能得到确切的答案,因此我在这里对可用数据的最佳猜测。