前言

  很多时候数据库的TempDB、日志等文件的暴增可能导致磁盘空间被占满,如果日常配置不到位,往往会导致数据库故障,业务被迫中断。

  这种文件暴增很难排查,经验不足的一些运维人员可能更是无法排查具体原因,导致问题不能彻底解决。

场景描述

  客户系统比较稳定,用了5台机器做了AlwaysOn高可用组,完全实现了读写分离。磁盘也做了规划,主库日常操作TempDB需求在20G以下,所以TempDB所在的磁盘只配置了100个G的空间。

  本案例是客户突然接到监控报警,显示TempDB磁盘空间不足,可用空间不断减小直到耗尽。

  比较戏剧的是,这个客户早上刚刚做了巡检数据库情况稳定,没有什么异常。

  那么我初步判定,这必然是一次特殊操作或应用配置出错导致的问题。

深入指标分析

  文件看问题

  TempDB暴增必然伴随着文件的增长,首先我们看一下TempDB文件的增长情况。

  

  可见TempDB的分配空间在14点50几分的时候开始暴增,细心的朋友会发现这是1个G到6个G的增长,这是因为客户的TempDB配置了16个数据文件:

  

  

  注:为什么配置这么多TempDB文件请参见:Expert 诊断优化系列------------------给TempDB 降温

什么造成了增长

  造成TempDB暴增原因很多语句使用临时表、语句排序、CheckDB等,但这些都是可以在语句中反应出来。所以下面我们分析一下语句。

  注:很多使用过SQL专家云平台或工具的朋友可能不会注意里面一些细节,其实很多细节(如上面的TempDB文件增长趋势和下面的语句分配空间)的设计都是解决一些疑难的问题。

  

  首先语句中的其中两个指标用户分配空间(MB)和内部对象分配空间(MB)指的就是对TempDB的使用消耗。

  注:用户分配空间可能是临时表使用的比较多,内部对象分配空间可能是排序或者hash join等操作(其他使用的消耗可以参见前面给出的链接文章)

  

  分配空间越大,也就说明语句越消耗TempDB资源。

  我们有两种方式找到到底是什么操作导致的TempDB暴增,可以直接找时间点的语句,也可以在TempDB资源消耗的高到低顺序中找!

  为了全面了解一下TempDB的问题,这里我们采用第二种方式。

  那么我们就分析一下语句对TempDB资源被消耗的情况:

  步骤1:首先我们按照用户对象分配空间排序:

 经过排查,这里面用户空间分配比较高的都是CDC的作业,服务器上确实运行这几个库的CDC作业。其他的一些操作的用户分配空间都比较小,所以这不是造成问题的原因!

 步骤2:接着我们按照内部对象分配空间排序:

 

 这里发现最消耗空间的是CheckDB的操作,但时间点是对应不上的,所以这也不是问题的原因。

 继续排查:

 在消耗排位在第三的这个语句中我们发现了等待资源FGCB_ADD_REMOVE(这个可以简单理解为有大量的文件自动生长发生,这里是16个TempDB文件),并且使用的内部对象空间也很高,并且我们还发现有多个会话同时执行这样的高消耗操作。

 继续深入:

 

  性能计数器的表象也与之前的种种迹象相吻合。

  

排查结论

  综合各项现象指标,可以分析出系统在下午14点57分左后开始执行TempDB高消耗操作,语句本身是一个近千行涉及大量表连接排序等操作的复杂存储过程,对TempDB造成暴增的问题负主要责任,而且雪上加霜的是从会话的标识可以看出,这不是一个语句只一次的执行,而是在特定的时间存在比较大的并发操作导致。

  与相关业务人员沟通,发现这是一个集团的类似报表的大消耗操作,因为对功能进行的调整,而程序人员的一次误操作而错误的指向了集群中的主库,而导致的问题。

--------------博客地址-----------------------------------------------------------------------------

原文地址: http://www.cnblogs.com/double-K/

如有转载请保留原文地址! 

----------------------------------------------------------------------------------------------------

总结

  问题的结果往往比较简单,也相对容易解决,但综合各项指标深入分析问题原因是值得和每一个技术人员探讨的,这也是为什么用一篇长案例来分析一个小点的原因。

  

  再思考:本案例中服务器的架构设计是比较完善的,已经做了读写分离可以轻松的把这样的大操作指向辅助服务器,并且可以做到负载均衡,那么如果你的单机服务器也有类似这样一个报表操作,你会怎么办呢?

----------------------------------------------------------------------------------------------------

注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!

  

转载于:https://www.cnblogs.com/double-K/p/6135509.html

数据库实战案例—————记一次TempDB暴增的问题排查相关推荐

  1. php数据库访问辅助类,php+MySQL实战案例【二】php数据库辅助类

    前言 在学习php的时候需要经常对mysql数据库进行增删改查操作,为了减少冗余代码,我们把数据操作的方法封装成一个php类.在不同的业务场景需要用到数据库表的数据操作时,只需在php文件开头引入我们 ...

  2. 安全测试(三) 服务器安全 渗透测试 常规服务器安全漏洞 高危端口暴露、弱口令密码、暴力破解、服务器提权、Mysql数据库提权等 浅谈《社会工程学》实战案例

    文章目录 一.前言 二.服务器安全 高危端口 2.1 端口号(Port number) 2.2 常见端口后及其用途表 2.3 端口号 扫描工具介绍 2.4 端口号 端口说明 攻击技巧 2.5 安全警示 ...

  3. python爬取电影网站存储于数据库_Python零基础爬虫教程(实战案例爬取电影网站资源链接)...

    前言 好像没法添加链接,文中的链接只能复制到浏览器查看了 这篇是我写在csdn的,那里代码格式支持更好,文章链接 https://blog.csdn.net/d497465762/article/de ...

  4. python 银行业务系统程序编程写_python实战案例--银行系统

    stay hungry, stay foolish.求知若饥,虚心若愚. 今天和大家分享一个python的实战案例,很多人在学习过程中都希望通过一些案例来试一下,也给自己一点动力.那么下面介绍一下这次 ...

  5. 欢迎来到图数据库的世界——《图数据库实战》中文版上架了!

    叶伟民和我翻译的<图数据库实战>(Graph Databases In Action)中文版上架了,这本书将带你进入图数据库这个全新的世界. 当年译者叶伟民向美国移民局证明他是美国本土难以 ...

  6. 【分布式事务】tcc-transaction分布式TCC型事务框架搭建与实战案例(基于Dubbo/Dubbox)...

    一.背景 有一定分布式开发经验的朋友都知道,产品/项目/系统最初为了能够快速迭代上线,往往不太注重产品/项目/系统的高可靠性.高性能与高扩展性,采用单体应用和单实例数据库的架构方式快速迭代开发:当产品 ...

  7. 7个实战案例、24个学习视频、12G干货资料...今天带你免费入门Python数据分析!...

    相信许多做数据的都有这样的经历: 你花了大半天整合了一张数据表,却因为其他部门的错误,导致表格结构全错了!于是你又要吭哧吭哧重新来过... 每次数据都重复洗一遍,还这么慢,要是有一劳永逸的方法就好了. ...

  8. 图解 5 种 Join 连接及实战案例!(inner/ left/ right/ full/ cross)

    转载自 图解 5 种 Join 连接及实战案例!(inner/ left/ right/ full/ cross) Join 连接在日常开发用得比较多,但大家都搞清楚了它们的使用区别吗??一文带你上车 ...

  9. 互联网寒冬!技术站最全MySQL数据库实战规范

    享学课堂特邀作者:老顾 转载请声明出处! 前言 我们小伙伴们经常使用到mysql数据库,一般就这么一用,很少会考虑mysql里面的细节问题,如sql语句的规范,或索引有没有起到相应的效果,今天老顾就给 ...

  10. html5页面结构案例,前端学习笔记(五)HTML+CSS静态页面实战案例:幸福西饼首页和百度首页...

    按照知乎上面汪小黑推荐的前端学习路径,在自学了HTML和CSS之后,开始尝试实战制作静态页面小项目. 幸福西饼首页制作 首先我在网上下载到了千锋教育提供的的幸福西饼官网静态页面的教学视频和图片素材.源 ...

最新文章

  1. 如何降低遮挡对人脸识别的影响
  2. centos标准分区调整大小_去繁化简解决CentOS下调整home和根分区大小的方法
  3. 【Android】Activity的task相关
  4. MySQL5.7在Ubuntu上的安装、配置与使用
  5. 全面认识Small Cell
  6. 图像处理基础系列-01
  7. 顶尖学府 加州伯克利大学开发高效机器人操纵框架
  8. JAVA 基础语法(四)——循环结构(while,do...while,for,break,continue)
  9. Citrix 桌面云 XenApp_XenDesktop_7.15 部署系列(一)前期准备
  10. openwrt下ipk生成过程及原理
  11. 博主亲测Mac OSX 上好用必备的PC端软件
  12. 一次性搞懂 HTTP、HTTPS、SPDY
  13. 计算机软件开发即征即退,自行开发软件产品增值税实行即征即退政策
  14. mysql openxml_OpenXML SDK2.0初窥
  15. 计算机无法关闭密码保护,Windows 10不会关闭密码保护共享
  16. powerpoint预览_如何调整PowerPoint模板的大小
  17. background-image无法显示图片
  18. 中心极限与大数定理律的关系_麦克斯韦速度分布律与气体分子碰壁数的推导
  19. 754. 到达终点数字
  20. 乔列斯基(Cholesky)法解方程(python,数值积分)

热门文章

  1. 28th Dec, 2012 我自己的问题
  2. ipv4网络配置方法
  3. Linux O(n)调度器
  4. UML类图中箭头和线条的含义和用法
  5. Linux DRM KMS 驱动简介
  6. cgroup学习(四)——mount hierarchy
  7. 2018年高考631选计算机,2021年高考650分可以上什么大学 650分左右的院校
  8. java集合的相互转化(map,set,list,array)
  9. MongoDB最佳实践
  10. 【快速幂】a^b%p问题