SQLServer存储引擎——03.日志

3. SQLServer存储引擎之日志篇数据库

  (3.1)日志结构日志

  (3.1.1)物理日志blog

    (0)物理日志即数据库的.ldf文件, 固然后缀名是能够自定义的,默认是.ldf进程

    (1)一个SqlServer数据库,能够定义多个物理日志文件,SQL Server逻辑上把他们看成一个总体,顺序写入日志记录,用完第一个,再用下一个:即第一个日志文件的当前空间,若是没有可分配的VLF时,就会使用下一个日志文件的VLF,直到最后一个日志文件也没有可分配的VLF时,会从新回到第一个日志开始增加;VLF的使用以下图:事务

                        

      SQLServer把事务日志文件划分为多个VLF(Virtual Log File),即虚拟日志文件。内存

    (2)物理日志文件初始大小至少为512KB效率

    (3)日志文件不能够放在文件组内im

  (3.1.2)虚拟日志数据

    (0)日志文件除了文件头页外,其余VLF部分都不是以数据页的方式来存储的,物理日志以虚拟日志(VLF)为最小单位进行增加、收缩和使用,一般VLF大小为256KB,但第一个VLF的大小最小为8K,由于第一个页面8K为日志文件头页面。img

    (1)虚拟日志是由SQLServer来维护的,大小不一,数量不定,不能够人工干预,但能够事先分配较大的物理日志,或者设置较大的物理日志的增量,以减小虚拟日志的生成,从而减小数据库维护虚拟日志的成本,以及提升数据库启动,备份还原的速度。

  (3.1.3)逻辑日志

    (0)数据库逻辑操做的记录,每一个事务可能会有多条日志记录,每条日志记录由惟一的顺序增加的LSN来标记,经过DBCC LOG()来查看日志文件以下图:

                                           

    (1)SQL Server用日志记录来保证事务的基本属性,及数据库恢复。

    (2)SQLServer数据库遵循预写日志(WAL)的原则。

  (3.1.4)活动日志

    (0)从MinLSN起日后的日志部分即为活动日志。以下图,以最先活动事务起点LSN142做为MinLSN,从142日后的日志部分为活动日志:

                                              

    (1)检查点LSN、最先活动事务起点LSN、还没有传递给分发数据库的最先的复制事务起点的LSN,当中的最小值将做为MinLSN;

  

  (3.2)日志管理

    (3.2.1)截断

      (0)SQL SERVER能够经过截断日志以实现物理日志的回绕,截断操做仅是将被截断的日志部分标记为可重用,根据数据库恢复模式的设置:SIMPLE/BULK_LOGGED/FULL,在SIMPLE模式下,SQL SERVER会自动截断日志,相似于ORACLE的非归档模式。

      (1)SIMPLE模式下,CHECKPOINT会自动截断日志的非活动部分,FULL和BULK_LOGGED模式下,只有经过日志备份来截断日志。

      (2)SQL SERVER截断日志后,并不会主动释放日志文件占用的磁盘空间,须要手动去收缩日志文件才会释放,但一般不建议这样作,毕竟当日志文件再次增加时又须要去从新申请磁盘空间。

      (3)日志文件的截断以VLF为单位,从不活动的日志记录所在的第一个VLF起,到MinLSN所在的VLF的前一个VLF,以下图:

                                      

      (4)只能够截断非活动日志部分。

      (5)当运行一个长事务且一直未结束时,此时会影响MinLSN的推动,进而影响日志文件的截断,从而会出现,即使是SIMPLE模式下,日志文件也会变得很大,甚至出现吃掉磁盘全部空间,出现事务日志已满的9002错误。

    (3.2.2)备份

      (0)SQL SERVER没有ORACLE中的ARCH进程,没法像ORACLE同样自动归档日志,须要手动去备份,并且在有多个物理日志文件时,也没法对单个日志文件进行备份。

      (1)当数据库故障恢复时,在线的日志须要手动经过NO_TRUNCATE选项去备份,即尾日志备份,而后再利用尾日志备份结合以前的备份进行故障恢复。

    (3.2.3)还原

      还原在两种状况下发生,一是数据库重启时;一是手动经过备份集恢复时;

      (0)还原的过程,是把数据和日志放在内存中,模拟用户读写操做以进行的。还原时只须要重作或撤销最后一个检查点以后的日志部分,这也是检查点机制提升恢复效率的缘由所在。

      (1)REDO和UNDO:

        还原时若是事务日志已结束(提交或回滚),并且数据页还没有被刷新,则重作(REDO);

        若是事务日志未结束,但数据脏页已被刷新到磁盘,则回滚(UNDO)。

      (2)日志记录中包含数据页被修改前及当次修改的两个LSN,若是目前数据页头的LSN等于修改前的LSN,则日志操做被重作;若是数据页头的LSN等于或大于当次修改的LSN,则跳过日志操做,不重作。

      (3)数据库重启不须要人工干预,经过备份集恢复须要人工干预。由于有时须要恢复到某个操做点,并非彻底恢复全部日志记录。

 

   

 --------------------------------------------------------------------------------------  原文转自:http://qianzhang.blog.51cto.com/317608/1217346--------------------------------------------------------------------------------------

相关文章
相关标签/搜索