SQLServer存储引擎——日志

3. SQLServer存储引擎之日志篇

  (3.1)日志结构

  (3.1.1)物理日志

    (0)物理日志即数据库的.ldf文件, 当然后缀名是可以自定义的,默认是.ldf

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

                        

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

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

    (3)日志文件不可以放在文件组内

  (3.1.2)虚拟日志

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

    (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
--------------------------------------------------------------------------------------

时间: 2024-08-01 03:26:12

SQLServer存储引擎——日志的相关文章

SQLServer存储引擎——内存

SQLServer存储引擎之内存篇: (1)SQL SERVER 内存结构       SQL SERVER 内存结构简图 SQL SERVER 内存空间主要可分为两部分: (1.1)可执行代码(Executable Code) 主要包括SQL SERVER 实例中的一些EXE和DLL文件 (0)SQL SERVER 引擎(SQL SERVER ENGINE),SQL SERVER 数据库的主程序: (1)服务端网络库(SERVER NET-LIBRARY),用于与客户端网络库通讯,将TDS包交

SQLServer存储引擎——索引的结构和分类

5. SQLServer存储引擎——索引的结构和分类 关系型数据库中以二维表来表达关系模型,表中的数据以页的形式存储在磁盘上,在SQL SERVER中,数据页是磁盘上8k的连续空间,那么,一个表的所有数据页在磁盘上是如何组织的呢?分两种情况: 一是数据页间无序.随机地存储在磁盘上,这样的表叫做堆表(表上无聚集索引): 二是数据页间按某个表字段的值有序地存储在磁盘上,这样的表做索引组织表(表上有聚集索引). 索引是什么?从物理结构上可分为两种:聚集索引和非聚集索引.将表中的数据有序地组织起来的索引

SQLServer存储引擎——06.索引的遍历与维护

一.遍历 索引树的每个节点都是一个页面. 索引树有三种类型的节点:根节点.中间节点.叶子节点. (1) 根节点与中间节点一样,只包含下一层节点的入口值与入口指针,它们称为索引节点: (2) 叶子节点包含要遍历的数据,对聚集索引而言数据就是表中数据行,对非聚集索引数据是指索引列值和行书签. 索引的遍历总是从根节点开始,即先根遍历,分为两种:索引扫描和索引查找. (1) 索引扫描,是指从索引树的根节点开始,对叶子节点逐个扫描,直至命中所有满足查找条件的数据: (2) 索引查找,是指从索引树的根节点开

MySQL 存储引擎 (二)

InnoDB存储引擎物理存储结构 ibdata1 : 系统数据字典信息(统计信息),UNDO表空间等数据 ib_logfile0 ~ ib_logfile1 : REDO日志文件,事务日志文件. ibtmp1 : 临时表空间磁盘位置,存储临时表 frm : 存储表的列信息 ibd : 表的数据行和索引 共享表空间 需要将所有数据存储到同一个表空间中 ,管理比较混乱 5.5 版本出现的管理模式, 也是默认的管理模式. 5.6 版本, 共享表空间保留,只用来存储:数据字典信息,undo,临时表. 5

InnoDB存储引擎的表空间文件,重做日志文件

存储引擎文件:因为MySQL表存储引擎的关系,每个存储引擎都会有自己的文件来保存各种数据.这些存储引擎真正存储了数据和索引等数据. 表空间文件 InnoDB存储引擎在存储设计上模仿了Oracle,将存储的数据按表空间进行存放.默认配置下,会有一个初始化大小为10MB.名为ibdata1的文件.该文件就是默认的表空间文件(tablespace file).你可以通过参数innodb_data_file_path对其进行设置.格式如下: innodb_data_file_path=datafile_

MySql存储引擎+表解压缩机制+索引+查询缓存机制+慢查询日志

一.大型网站优化之MySql优化 1.优化和不优化的对比的 在业界当中我们有一个叫大数据(big data)的概念,所谓的大数据指代千万级别以上的数据作为起步的数据.所以我们现在需要对两张都具有50331650条记录的表进行查询对比,其中表名为tbl_no的表是没有做过任何优化手段的表,表名为tbl_yes的表是做过优化手段的表.这个实验的目的是观察具有优化手段和不具有优化手段的查询中速度的差别. 实验条件: 1)两张表的数据记录总数是相同的 2)两张表的数据字段结构也是一样的 3)查询的记录的

mysql系列之9.mysql日志&存储引擎

mysqlbinlog 是什么? 数据目录下的如下文件: mysql-bin.xxxxxx 作用? 记录数据库内部增删改查对mysql数据库有更新的内容的记录 三种模式? statement level 模式: 缺点是不够细致 row level 模式: 日志会记录每一行数据被修改的形式 (一下子修改多行其实就一条语句, 但是它会记录成多行) 优点: 记录每一行的细节, 可以记录function/trigger/存储过程 mixed level 模式: 混合模式, 自动判断该使用statemen

MySQL的存储引擎与日志说明

1.1 存储引擎的介绍 1.1.1 文件系统存储 文件系统:操作系统组织和存取数据的一种机制.文件系统是一种软件. 类型:ext2 3 4 ,xfs 数据.  不管使用什么文件系统,数据内容不会变化,不同的是,存储空间.大小.速度. 1.1.2 mysql数据库存储 MySQL引擎: 可以理解为,MySQL的“文件系统”,只不过功能更加强大. MySQL引擎功能: 除了可以提供基本的存取功能,还有更多功能事务功能.锁定.备份和恢复.优化以及特殊功能. 1.1.3 MySQL存储引擎种类 MySQ

mysql的插件式的存储引擎

转载 https://www.zhihu.com/question/19866767/answer/14942009 http://whuai.blog.51cto.com/3539000/862197 Oracle: 数据文件包括:控制文件.数据文件.重做日志文件.参数文件.归档文件.密码文件.这是根据文件功能行进行划分,并且所有文件都是二进制编码后的文件,对数据库算法效率有极大的提高.由于Oracle文件管理的统一性,就可以对SQL执行过程中的解析和优化,指定统一的标准:RBO(基于规则的优