• sqlserver 恢复模式及避免日志爆满的方法


    recovery simple

    循环日志,空间自动回收,不可备份日志,恢复时仅能恢复到数据库备份时间点;
    用于落地数据或测试环境或OLAP,不推荐用于生产OLTP
    有时候distribution过大也可置为simple
     
    recovery bulk_logged
    常规操作日志正常记录,特定操作时仅记录少量日志;
    恢复时特定操作将做回滚处理,其他操作正常恢复到当前
     
    特定操作:
    1、select * into test2 from test1 where 1=1
    2、DTS数据导入
    3、bulk into
     
    注意:特定操作不等于大数据操作,例如:
    insert into test2 select * from test1
    delete  from test2 where id<100000
    将会记录全部日志 
     
     
    优化表复制
    --1、改为bulk_logged恢复模式
    --操作前日志使用率
    dbcc sqlperf(logspace)
    alter database testdb set recovery bulk_logged
     
    --2、推荐将sql1替换sql2
    sql1:select * into test2 from test1 where 1=1 
     
    sql2:insert into test2 select * from test1
     
    --操作后日志使用率,发现变化不大
    dbcc sqlperf(logspace)
     
    --3、重建索引
    create index on test2
     
    --4、重新改为full恢复模式
    alter database testdb set recovery full
     
    即优化了日志空间和插入速度,又优化了索引(大量数据插入,会引起大量索引碎片)
     
    full recovery <--> BULK_LOGGED recovery
    切换时不会造成日志链断裂,所以也不用担心日志不能备份
     
     
    recovery full
    通过事务日志将数据库还原到任意的时刻点,
    full模式下的空间优化:
     
    一、事务内进行大批量的数据删除、更新操作,引起的日志爆满
    1.多次少量原则,每次写入一定量的日志
    2.手工触发checkpoint,每次发生checkpoint时会自动截断事务日志
     
    二、复制时引起的日志爆满
    复制可以在simple恢复模式下进行
     
    三、完整恢复模式下引起的日志爆满
    1.配合备份策略,进行日志归档
    2.定期删除历史日志归档文件
     
    四、执行备份的时候,可以截断部分事务日志
     
    五、大批量数据导入的时引起的日志爆满
    将恢复模式暂时改为BULK_LOGGED(仅记录回滚所需日志,不记录插入日志),完成后及时改为full
     
     
    六、使用警报,可以实现日志使用率超过一定量自动归档
     
    七、查看日志空间使用率dbcc sqlperf(logspace)
     
     
     
    各模式间切换时注意点
     
    1、SIMPLE->FULL
    完成切换后,需要立刻进行差异备份,恢复日志链
     
    2、FULL->SIMPLE
    先进行日志备份,因为切换会中断日志链
     
    3、BULK_LOGGED<->full 自由切换
     
    4、simple<->BULK_LOGGED 不常见
  • 相关阅读:
    使用boost的type_index打印数据类型
    display:flex;下的子元素width无效问题
    three.js 材质翻转
    qt5 打包exe执行文件
    脚本免交互生成秘钥
    脚本连接主机创建用户expect
    expect用法
    免密登录脚本expect
    shell变量的定义规则
    shell变量如何定义?
  • 原文地址:https://www.cnblogs.com/firstdream/p/7120675.html
Copyright © 2020-2023  润新知