Sql Server 事务日志

     Sql Server事务日志文件是数据库文件的重要组成部分,事务日志主要用来存放数据库的修改记录。数据库为了得到更高的写入效率和性能,同时保证ACID特性,数据在写入时,会将更新先写入事务日志,因为事务日志是连写的,所以写事务会比较快。简单来说,顺序写入时,磁盘的磁头会保持在一定的区域内连续写入,而数据写入数据文件时,有随机性,磁盘的磁头移动消耗的时间要比数据写入日志文件时多。

      Sql Server对于事务日志文件的管理,是将日志文件在逻辑上分成若干个文件(VLFS),方便管理。

      创建一个1M的日志文件

      

       执行DBCC Loginfo

       

       在此可以看到事务日志被分成了4个虚拟的日志文件,那么SQL Server创建数据库时,日志文件的大小和所分配的VLFS数量有什么关系呢?如果日志文件增加,VLFS是如何变化的呢 ?

        VLFS个数由SQL Server管理,当Create或Alter Ldf文件时,SQL Server根据初始值或者增量的大小分配VLFS文件数。LDF文件每次增加的数值和每次分配的VLFS个数如下

         

ldf文件的大小

VLF的数量

1M到64M

4

64M到1GB

8

大于1GB

16

      

      对数据库的所有修改在写入数据文件之前,会先记录到事务日志中。日志记录会按照先后顺序记录到日志文件的逻辑末尾,并分配一个全局唯一的日志序列号(Log Sequence  Number),这个序列号按照顺序分配。

在日志中,有活动日志的概念,可以理解为未写入数据文件的事务日志。

当数据库做CheckPoint,已提交的日志数据会刷新到数据文件中,则活动日志区间会前移,一直到未提交的日志序列号。

在简单日志模式下,CheckPoint之后,非活动日志的内容将会被清空,清空之后的日志空间可以被冲用。这也是简单日志模式下日志文件总是很小的原因。

在完整或批量日志模式下,只有备份日志后,日志空间才能被重用。

 

许多类型的操作都会被记录在事务日志中,这些操作包括:

每个事务的开始和结束

每次数据修改

每次分配或释放区或者页

创建删除表或者索引

posted @ 2015-07-01 19:57  风言  阅读(513)  评论(0编辑  收藏  举报