• 【转】日志文件的截断与收缩


     

    日志文件的截断与收缩


    一.虚拟日志文件
    数据库的日志文件被分成多个虚拟日志文件(VLF)。一个VLF可以是下面4种状态之一:
    1.活动 日志的活动部分以MinLSN为起点,代表一个活动(未提交)事务。日志的活动部分以最后写入的LSN为终点。任何包含有活动日志任意部分的VLF都被认为是活动的VLF。
    2.可恢复 最老的事务之前的日志部分的唯一作用是保持一系列的日志备份,以便能够还原数据库到先前某一状态。
    3.可复用 如果事务日志备份没有得到保持(见下面的日志的自动截断),或者我们已经备份了日志(见下面的日志备份),那么最老活动事务之前的VLF将不再有任何作用并且可以被重新使用。截断或者备份事务日志会改变VLF可恢复状态到可复用状态。
    4.未用 如果没有足够的会被日志记载的活动发生,或者之前的VLF已经被标记为可复用并且已经被复用,那么日志文件结尾的一个或多个VLF也许还未被使用。

    使用dbcc loginfo命令查看VLF时,状态值为0表示可复用或未用;状态值为2表示活动或可恢复。日志截断后不包含任何活动日志记录的VLF,其状态值从2变成0。

    二.日志的自动截断
    在下面这些情况下,日志会自动截断:
    1.系统日志恢复模型为简单
    2.创建数据库以来从未进行过完全备份。
    3.曾经使用BACKUP LOG WITH NO_LOG / TRUNCATE_ONLY

    当发生检查点时,会将MinLSN(最小恢复LSN)之前的所有日志记录截断。所谓MinLSN是指下面三者中的最小值:
    1.最后一个检查点的LSN
    2.最老的一个事务的LSN。

    3.尚未传递给分发数据库的最早的复制事务起点的 LSN。

    检查点可以是自动执行命令CHECKPOINT。也可以是系统扫面,当系统发现日志比较大,以至于下次启动时重做时间需要超过恢复间隔(recovery interval)就会自动执行检查点动作。

    三.日志备份
    如果进行过完全备份,并且恢复模型为完全恢复或者大日志恢复,则必须进行日志备份才会截断日志。
    备份日志时,首先生成一个检查点,然后将所有日志备份,最后将MinLSN之前的所有日志截断。只有日志备份会截断日志,数据备份不会截断日志的。

    四.日志疯长
    在实际操作中,常常有一些数据库的日志文件会疯长,疯长的原因有多种,但是下面两种是最常见的。
    1.事务不提交。我们知道日志MinLSN是检查点和最老事务的最小者。若一个事务一致不提交(可以通过命令dbcc opentran查看),那么MinLSN就一直是这个事务,因此它之后的日志总是截断不了,于是随着时间的推移,日志文件会原来越大。

    2.没有定期备份日志。在非简单模式下,必须维护好备份计划,定期备份日志记录。因为这种情况下,只有备份日志才会截断日志。

    五.收缩
    在保证一个基础大小的前提下,将不活动的VLF删除。

    本文转自  http://blog.csdn.net/misterliwei/article/details/5881393

  • 相关阅读:
    R语言 which() 、 which.min() 、 which.max() 函数
    R rep() 函数
    R语言 一个向量的值分派给另一个向量
    R语言 sample抽样函数
    超参数 hyperparameters
    随机游走模型(Random Walk)
    随机数
    Lambda 函数与表达式
    static
    变量的申明定义
  • 原文地址:https://www.cnblogs.com/gates/p/5099218.html
Copyright © 2020-2023  润新知