事务日志物理体系结构

事务日志物理体系结构

SQL Server 数据库引擎在内部将每一物理日志文件分成多个虚拟日志文件。虚拟日志文件没有固定大小,且物理日志文件所包含的虚拟日志文件数不固定。数据库引擎在创建或扩展日志文件时动态选择虚拟日志文件的大小。数据库引擎尝试维护少量的虚拟文件。在扩展日志文件后,虚拟文件的大小是现有日志大小和新文件增量大小之和。管理员不能配置或设置虚拟日志文件的大小或数量。

 
只有当日志文件使用较小的 size 和 growth_increment 值定义时,虚拟日志文件才会影响系统性能。如果这些日志文件由于许多微小增量而增长到很大,则它们将具有很多虚拟日志文件。这会降低数据库启动以及日志备份和还原操作的速度。建议您为日志文件分配一个接近于最终所需大小的 size 值,并且还要分配一个相对较大的 growth_increment值。
 

事务日志是一种回绕的文件。例如,假设有一个数据库,它包含一个分成四个虚拟日志文件的物理日志文件。当创建数据库时,逻辑日志文件从物理日志文件的始端开始。新日志记录被添加到逻辑日志的末端,然后向物理日志的末端扩张。日志截断将释放记录全部在最小恢复日志序列号 (MinLSN) 之前出现的所有虚拟日志。“MinLSN”是成功进行数据库范围内回滚所需的最早日志记录的日志序列号。示例数据库中的事务日志的外观与下图所示相似。


当逻辑日志的末端到达物理日志文件的末端时,新的日志记录将回绕到物理日志文件的始端。

 

这个循环不断重复,只要逻辑日志的末端不到达逻辑日志的始端。如果经常截断旧的日志记录,始终为到下一个检查点前创建的所有新日志记录保留足够的空间,则日志永远不会填满。但是,如果逻辑日志的末端真的到达了逻辑日志的始端,将发生以下两种情况之一:

  • 如果对日志启用了 FILEGROWTH 设置且磁盘上有可用空间,则文件就按 growth_increment 指定的数量扩展,并且新的日志记录将添加到扩展中。

  • 如果未启用 FILEGROWTH 设置,或保存日志文件的磁盘的可用空间比 growth_increment 中指定的数量少,则会出现 9002 错误。

如果日志包含多个物理日志文件,则逻辑日志在回绕到首个物理日志文件始端之前,将沿着所有物理日志文件移动。

 

收缩数据库日志文件的最小单位为虚拟日志文件

  SQL Server创建数据库时,根据日志文件(ldf)的大小,生成VLF(virtual log files)的数量公式如下:

   

ldf文件的大小

VLF的数量

1M到64M

4

64M到1GB

8

大于1GB

16

 

 

 

 

 

 

 

查看某个db虚拟日志文件的数量

use abs
go
dbcc loginfo
结果如下:
posted @ 2016-08-18 14:48  simplelg17  阅读(267)  评论(0编辑  收藏  举报