zoukankan      html  css  js  c++  java
  • SQLSERVER 中事务日志的概念

    小弟知识做一些学习总结:

    A.什么是事务日志?

             1.事务日志仅仅是记录与其对应数据库上的事务行为和对数据库修改的日志文件.

             2.在SQL Server对于日志文件的管理,是将逻辑上一个ldf文件划分成多个逻辑上的虚拟日志文件(virtual log files,简称VLFs).以便于管理。用个类比方法来看,日志文件(ldf)好比一趟火车,每一节车厢都是一个虚拟日志文件(VLFs):

             3. 如果设置日志文件的增量过小,则会产生过多的VLFS,也就是日志文件碎片,过多的日志文件碎片会拖累SQL Server性能.指定合适的日志文件初始大小和增长,是减少日志碎片最关键的部分.

        我们通过推荐把物理磁盘单独划分一区用来存储事务日志的原因了,这样可以使磁盘在读写上最大程序的保持自然连续。数据文件的读写有很大的随机性

    B.事务日志都记录了那些?

            1. 每个事务的开始和结束

            2. 每次数据修改(插入、更新或删除)。这包括系统存储过程或数据定义语言 (DDL) 语句对包括系统表在内的任何表所做的更改。

            3.每次分配或释放区和页。

            4.创建或删除表或索引。

    C.什么是预写式日志(WRITE-AHEAD LOGGIN)-WAL?

         

    D.WAL 的特点(作用)?

       1.在数据写入到数据库之前,先写入到日志。

    E.什么是lazy Writer?

    F.什么又是CheckPoint?

    1.在SQL Server中有一个非常重要的命令就是CheckPoint,它主要作用是把缓存中的数据写入mdf文件中,其实在我们进行insert,

    2.update, delete时,数据并没有直接写入数据库对应的mdf文件中,而是写入了缓存里,当发生checkpoint时,数据才会被写入mdf数据文件.

    3.CheckPoint会将所有缓冲区的脏页写入磁盘,不管脏页中的数据是否已经Commit。这意味着有可能已经写入磁盘的“脏页”会在之后回滚(RollBack).不过不用担心,

    如果数据回滚,SQL Server会将缓冲区内的页再次修改,并写入磁盘。

    导致CheckPoint检查点的事件: 

    1.在数据库备份之前,数据库引擎会自动执行检查点,以便在备份中包含对数据库页的全部更改。

    2.日志的活动部分超出了服务器在 recovery interval 服务器配置选项中指定的时间内可以恢复的大小。

    3.3.日志的 70% 已满,并且数据库处于日志截断模式。

    F.lazy Writer 和 CheckPoint 的区别?

     1.Lazy Writer和CheckPoint都是将缓冲区内的“脏”页写入到磁盘文件当中。但这也仅仅是他们唯一的相同点了

     2.Lazy Writer存在的目的是对缓冲区进行管理。当缓冲区达到某一临界值时,Lazy Writer会将缓冲区内的脏页存入磁盘文件中

     3. 而CheckPoint存在的意义是减少服务器的恢复时间(Recovery Time).CheckPoint就像他的名字指示的那样,是一个存档点.CheckPoint会定期发生.来将缓冲区内的“脏”页写入

       磁盘.

    G.SQL Server修改数据的步骤?

     在简单恢复模式下日志的角色

    最好的一个列子:我们在每周一0点做一次完整备份,在周三0点和周五0点分别做差异备份。在简单恢复模式下,如果周六数据库崩溃。我们的恢复计划只有根据周一0点的做的完整备份恢复后,再利用周五0点的差异备份进行恢复.而周五0点之后到服务器崩溃期间所有的数据将会丢失。

    那些情况会发生事务日志截断?

    那情况不会发生事务日志截断?

    那些情况下发生事务日志截断?

    简单恢复模式下事务日志的使用

    最小恢复LSN(Minimum Recovery LSN(MinLSN))

    minLSN 是在还未结束的事务记录中日志中最小的lsn号

    看图解释:

    可以看到,最新的LSN是148,147是CheckPoint,在这个CheckPoint之前事务1已经完成,而事务2还未完成,所以对应的MinLSN应该是事务2的开始,也就是142。

    从MinLSN到日志的逻辑结尾处,则称为活动日志(Active Log)

    换一种方式(说法来理解)

    总结:

    简单恢复模式下日志是不保存的(当事务结束后,相关的会被截断)。

    仅仅是用于保证事务回滚和崩溃恢复的用途.所以备份日志也就无从谈起,更不能利用日志来恢复数据库。

    参考文献:

    大牛将得很详细了!自己看看,学学吧~~

    http://www.uml.org.cn/sjjm/201203021.asp

    http://www.cnblogs.com/CareySon/archive/2012/02/13/2349751.html

    http://blog.csdn.net/tjvictor/article/details/5247659

  • 相关阅读:
    Spring Boot集成Spring Security
    vue全局使用axios的方法
    在SpringBoot 使用Redis存储Session
    SpringBoot几种定时任务的实现方式
    mysql重置auto_increment字段
    iView中DatePicker的表单验证问题
    go语言基础(四)
    go语言基础(三)
    go语言基础(二)
    go语言基础(一)
  • 原文地址:https://www.cnblogs.com/mc67/p/4846830.html
Copyright © 2011-2022 走看看