• 实战案例--TEMPDB暴涨


    前言

     
    tempdb暴增,造成磁盘空间不足,甚至影响业务运行。
     
     

    正文

     
    如图,tempdb log文件从7.40开始突然暴涨,因为 tempdb 0 M到 40G
     
     
    tempdb 所在磁盘是C 盘
    C盘的可用空间正好也为40G
    在下午16.22左右的时候tempdb 文件暴涨已经影响到业务使用.临时解决是备份收缩日志。下面通过监控信息查找造成问题的原因:
     
    查看7.40 之后这段时间 的运行语句,发下有个会话1085一直在运行
    这个会话分配了内部对象(就是使用了tempdb的对象)
     
    而言会话从7.46开始,一直持续到下午16.20 从时间上也非常吻合。所以他就是我们要找的元凶。
     

    原因

     
    对应普通的 简单模式的数据库无法重用日志的主要原因是没有做checkpoint,和存在没有提交的事务。但对于TEMPDB 来讲 他不需要预写日志。因为Tempdb 不支持重做(Redo)但需支持回滚(rollback).这也是tempdb日志存在的原因.
     
    如果一个事务还没有提交,那它可以在任何时候回滚。SQL Server必须做好这种准备,以便能够从日志记录中找回修改前的数据内容,完成回滚。在SQL Server里面,所有的日志记录都有严格顺序,中间不可以有任何跳跃。所以如果某个数据库有没有提交的事务,SQL Server会标记所有从这个事务开始的日志记录(不管和这个事务有没有关系)为活动事务日志 。这些日志记录都有可能“需要”被用来做回滚。
     

    解决

    找到语句后,这个语句一直持续运行的原因是,等待ASYNC_NETWORK_IO
    这说明,客户端和数据库服务器网络传输存在问题或者程序中未接收数据库传输的数据。更多的是后者。问题就提交给开发,检查代码,对程序进行优化。

    补充

     
    查看日志空间使用的方法:
     
    DBCC LOGinfo() 查看vlf的状态
     
    DBCC SQLPERF(LOGSPACE) 建议用,查看日志空间的使用 ,更准。
    从UI 或者查
     
     

     用下面的语句查:

    都是不准的
     
     
     
     
  • 相关阅读:
    js_闭包
    js_函数参数的相关问题
    js_浏览器控制台打印引用数据是打印的原始数据
    js_递归函数在严格模式下的调用方法
    js_执行环境及作用域
    js_关于为什么'函数的参数都是按值传递'的理解
    (项目)爬取安居客二手房房屋信息
    (项目)爬取自如租房链接的价格
    识别验证码之百度通用识别接口
    (项目)使用selenium的截屏功能实现自动登陆滴滴打码网
  • 原文地址:https://www.cnblogs.com/OwenZeng/p/7494449.html
Copyright © 2020-2023  润新知