浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一。因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback)。从而还部分确保了事务的ACID属性.在SQL Server崩溃时DBA还可以通过事务日志将数据恢复到指定的时间点。当SQL Server运转良好时多了解一些事务日志的原理和概念显得并不是那么重要。但是一旦SQL SERVER发生崩溃时了解事务日志的原理和概念对于快速做出正确的决策来恢复数据显得尤为重要.本系列文章将会从事务日志的概念原理SQL Server如何使用日志来确保持久性属性等方面来谈SQL Server的事务日志.事务日志的物理组织构架事务日志仅仅是记录与其对应数据库上的事务行为和对数据库修改的日志文件.在你新建数据库时伴随着数据库文件会有一个默认以ldf为扩展名的事务日志文件. 当然一个数据库也可以配有多个日志文件但是在逻辑上他们可以看成一个.在SQL Server对于日志文件的管理是将逻辑上一个ldf文件划分成多个逻辑上的虚拟日志文件(virtual log files,简称VLFs).以便于管理。用个类比方法来看日志文件(ldf)好比一趟火车每一节车厢都是一个虚拟日志文件(VLFs):那为什么SQL Server要把日志文件划分出多个VLFS呢因为SQL Server通过这种方式使得存储引擎管理事务日志更加有效.并且对于日志空间的重复利用也会更加高效。使用VLF作为收缩数据库的最小单位比使用ldf文件作为最小单位无疑是更加高效的.VLFS的个数和大小无法通过配置进行设定,而是由SQL Server进行管理.当Create或Alter数据库时,SQL Server通过ldf文件的大小来决定VLFS的大小和数量。在日志文件增长时SQL Server也会重新规划VLFS的数量.注意根据这个原理不难看书如果设置日志文件的增量过小则会产生过多的VLFS,也就是日志文件碎片过多的日志文件碎片会拖累SQL Server性能.SQL Server创建数据库时根据日志文件(ldf)的大小生成VLF的数量公式如下:ldf文件的大小VLF的数量1M到64M464M到1GB8大于1GB16下面我们来看一个例子:创建数据库指定日志大小为65M通过DBCC我们可以看到对应的有8个VLFs:再次创建数据库指定日志初始大小为28M:可以看到对应的VLF的数量变为4:而对于日志文件的增长SQL Server使用了和创建数据库时相同的公式也就是每次增长比如为2M则按照公式每次增长4个VLFs.我们创建一个TestGrow数据库指定日志文件为2M此时有4个VLFS:当我们增长2M时这个2M则是按照公式再次分配4个VLFs:此时这时能看到的VLFs数量应该为448个: