tempdb日志文件暴增分析
背景
某医院信息科接到CIS系统磁盘空间不足告警,通过排查发现tempdb的日志文件暴增,已经涨到了130G左右,并且还在持续增长中。需要我们紧急排查原因。
现象
登陆到服务器里,确实看到了如上所说,D盘空间仅剩14.5G,并且tempdb的日志文件已经达到了130G

登录到SQL专家云,通过趋势分析进行回溯,在1月22日上午8点40分之前,tempdb日志文件的总大小(蓝线)一直保持在500M,使用空间(黄线)也能被重用。从这个时间点之后,总空间和使用空间一直增长。

分析
首先要了解一下tempdb日志文件重用的原理,因为tempdb的恢复模式是简单的,所以只要对tempdb做完了checkpoint后,这个时间点之前的空间就可以重复使用了。在SQL Server里面,所有的日志记录都有严格顺序,中间不可以有任何跳跃,如果某个时间点存在没有提交的事务,因为事务可能会回滚,这些日志记录都有可能需要被用来做回滚,因此SQL Server会标记从这个事务开始的所有日志记录(不管和这个事务有没有关系)为活动事务日志,导致日志文件不会被重用,只能是一直增长。据此推测在1月22日上午8点40分左右有一个或者多个会话有没有提交的事务,并且一直到现在为止都没有提交。进入SQL专家云的空闲会话页面,点击有未提交事务选项卡,开始查找这个时间段内的空闲会话,找到了ID为667的会话,空闲时间为16185分钟,语句最后请求结束时间正好对应上Tempdb开始增长的时间点。

点击进入完整信息,可以看到该会话在1月22日8点29分08秒建立的,在1月22日8点29分10秒开始了一个事务,在1月22日8点40分11秒后执行最后一条语句后不再执行语句,到目前为止该事务已经开了11天的时间。

解决
KILL掉这个会话,过几分钟后观察日志文件的使用空间已经下降。

但是日志文件的总大小是不变的,再执行收缩tempdb日志文件的命令即可释放掉磁盘的空间。

总结
这类问题的大多数原因是应用程序实现不严谨造成的,正常的流程下会提交事务,关闭数据库连接,但是如果中间某个步骤出错了,因为没有异常处理,在这个出错步骤后面的提交事务和关闭连接的代码都没有执行到,最终导致事务和连接的泄露。
所以根本的解决办法是修改程序,因为客观原因无法修改的,只能通过变通的方法来解决,例如在数据库中创建一个定期运行的作业,杀掉空闲时间长的会话。或者在SQL专家云中启用查杀会话的任务。


其它
很多客户也碰到过这样的现象,日志文件使用空间一直增长,很长时间内都不会下降,确认过肯定没有未提交的事务。这是因为tempdb的特殊性,日志文件使用率超过70%才会触发checkpoint,重用的快慢取决于tempdb日志文件的大小。例如日志文件的总大小为100GB, 使用空间只有增长到70GB才会checkpoint,然后使用空间才会下降。所以不要把日志文件设置的太大。
tempdb日志文件暴增分析的更多相关文章
- tempdb数据文件暴增分析
背景 某客户tempdb数据文件突然暴增,导致磁盘可用空间紧张,让我们找到暴增的原因. 现象 登录到SQL专家云,通过趋势分析进行回溯,在4月12日,tempdb数据文件在3个小时内从10GB涨到了8 ...
- SqlServer 2008的tempdb数据文件大小暴增处理
tempdb数据文件暴增,导致服务器磁盘空间被耗尽! 1.查看tempdb的使用分配情况 use tempdb go SELECT top 10 t1.session_id, t1.internal_ ...
- tempdb 日志文件增长的问题
前两天在一个客户那里发现tempdb log 文件增长很大,已经使用40GB了,而tempdb log 文件总的分配空间是70GB,并且日志空间貌似不能重用,他们使用sql 2012 打的sp4补丁, ...
- Nginx 訪问日志增长暴增出现尖刀的具体分析
前言: Nginx日志里面Mobileweb_access.log增长特别大.一天上百兆.将近100W的訪问记录.依照我们眼下的规模,热点用户才500个左右.就算人人用手机app訪问 ...
- 数据库实战案例—————记一次TempDB暴增的问题排查
前言 很多时候数据库的TempDB.日志等文件的暴增可能导致磁盘空间被占满,如果日常配置不到位,往往会导致数据库故障,业务被迫中断. 这种文件暴增很难排查,经验不足的一些运维人员可能更是无法排查具体原 ...
- 数据库运维之路——关于tempdb暴增实战案例
转眼间,2021年的第一个季度已经到了最后一个月了,由于疫情原因,最近一段时间一直在北京,基本上没有出差,每天上班下班的日子感觉时间过的好快,新的一年继续努力奋斗啊. 仔细回想一下,自己踏入到sql ...
- 故障排查实战案例——某电器ERP系统日志暴增
前言 本篇文章写在新春佳节前夕,也是给IT运维朋友一个警醒,在春节长假前请妥善体检自己的系统安心过个年. 千里之堤毁于蚁穴,一条看似简单的语句就能拖垮整个系统,您的SQL Server很久没体检了吧? ...
- MYSQL数据库的日志文件
日志文件:用来记录MySQL实例对某种条件做出响应时写入的文件.如错误日志文件.二进制日志文件.慢查询日志文件.查询日志文件等. 错误日志 show variables like 'log_error ...
- (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)
(3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb) 关键词:mysql日志文件,mysqldumpslow分析工具 目录:日志文件的分类 1. ...
随机推荐
- jquery+bootstrap学习笔记
最近小颖接了个私活,客户要求用jquery和bootstrap来实现业务需求,小颖总结了下在写的过程中的一下坑,来记录一下 1.动态加载html文件 switch (_domName) { case ...
- .Net Core中获取appsettings.json中的节点数据
获取ConnectionStrings节点数据 //appsettings.json { "ConnectionStrings": { //DEV "DbConn&quo ...
- 题解 P6355 [COCI2007-2008#3] DEJAVU
kcm的原题.. 貌似是个组合数(? \(\sf {Solution}\) 对于每一个点,我们需要统计与它同一行的点数\(a\) 和同一列的点数\(b\) ,则该点对结果\(ans\) 的贡献为\(( ...
- 基于docker安装jumpserver
以下配置均在一台ubuntu上实现 # 生成宿主机Mysql配置文件,便于docker内容器使用 [root@ubuntu2004 ~]#mkdir -p /etc/mysql/mysql.conf. ...
- SLAM中的内外点
内外点之分最简单的说法就是是否符合当前位姿的判断:如果根据当前位姿,之前帧二维特征点所恢复出的地图点重投影到当前帧与实际的二维特征点匹配不上了,那么认为这个是质量差的点是outlier,抛弃掉,如果能 ...
- 从小白到架构师(4): Feed 流系统实战
「从小白到架构师」系列努力以浅显易懂.图文并茂的方式向各位读者朋友介绍 WEB 服务端从单体架构到今天的大型分布式系统.微服务架构的演进历程.读了三篇万字长文之后各位想必已经累了(主要是我写累了), ...
- win10 优化
禁用服务中的某些不用的服务 例如 SysMain 服务 win+R键开启运行快捷方式,输入services.msc: 找到SysMain这个服务: 选择这个服务后,右键属性: 点击停止:启动类型选择禁 ...
- Java注解和反射笔记
Java注解和反射笔记 1 注解 1.1 定义 Annotation是从JDK1.5开始引入的技术 作用 不是程序本身,可以对程序作出解释 可以被其他程序(编译器等)读取 格式 @注释名,可以添加一些 ...
- SpringBoot 03: 常用web组件 - - - 拦截器 + Servlet + 过滤器
常用web组件 拦截器 Servlet 过滤器 使用思想 创建自定义类 实现或者继承框架里的接口或类 将自定义类注册到框架中 使用自定义类 拦截器 说明 拦截器是SpringMVC中的一种对象,能拦截 ...
- TortoiseGit间接处理linux目录下的仓库,用到window映射linux目录方案
原始需求 习惯用TortoiseGit查看git仓库信息和历史日志,但这个工具只支持window,我希望linux也能用 虽然有其他linux的GUI的git工具,但我用到的linux基本都是无界面版 ...