表空间暴涨原因核查

简介:   2014年6月25号客户的users表空间暴涨了900G,经过查询系统监控记录,找到了相关的sql语句和责任人,具体过程如下: 这里需要先说明一个情况,由于之前users表空间使用率达到了99%后,由于使用的是bigfile,无法添加文件,只好把自动扩展参数打开,并且设置了每次扩展20G,这里注意一下,如果设置过小会使很多会话发生buffer busy waits 等待事件,但是设置这么大有个缺点就是如果sql语句出现笛卡儿积的话就会是表空间迅速暴涨,这里的这个例子就是这种情况下的一种。

 

2014年6月25号客户的users表空间暴涨了900G,经过查询系统监控记录,找到了相关的sql语句和责任人,具体过程如下:

这里需要先说明一个情况,由于之前users表空间使用率达到了99%后,由于使用的是bigfile,无法添加文件,只好把自动扩展参数打开,并且设置了每次扩展20G,这里注意一下,如果设置过小会使很多会话发生buffer busy waits 等待事件,但是设置这么大有个缺点就是如果sql语句出现笛卡儿积的话就会是表空间迅速暴涨,这里的这个例子就是这种情况下的一种。

 

 

第一步,首先查看了下Users  表空间增长历史记录,具体截图如下,确定了users表空间增长的时间范围是在 6月25号下午14点6月25号晚上23点

第二,从6月25号下午14点到 晚上23点开始,查看了下具体段的增长情况,发现users表空间有一个XXXXXX(这里屏蔽掉)用户下的临时段持续增长,涨了859G,由临时段的名称看以看出都是一个段,且位于4号文件的705052090块,可以推断出是由于某一个错误sql导致的,而4号文件刚好就是users表空间,而临时段主要是由2种方式来生成:① 重建索引生成 ② 通过CTAS方式建表形成  重建索引不可能,因为没有哪个索引的大小达到800G,所以只可能是哪个用户通过CTAS的方式建表导致的,而且在23点监控不到这个临时段了,可能表已经建成或者建表语句报错后临时段释放了。

大段的监控历史截图:

 

第三,仔细分析了下出现问题的时间段内DDL语句的监控,发现了一个错误记录,如下图,由此说明了是临时段达到了最大值sql语句报错了,所以空间释放了,这里我们可以看出当时的会话的sid是1567,登录的terminal的ip地址为10.31.6.61,具体同事是  XXXXXX (这里屏蔽掉)

 

第四,通过sid和serial#查看当时具体的sql监控,截图如下,由图看出该sql是从25号中午11点35分30秒开始运行,一直运行了12小时17分钟后报错,这个也和users表空间增长的时间范围相符

 

第五,把该sql拿出来看了下执行计划和sql语句,发现该执行计划的cost花费和预估的返回行数都超级大:

 

Sql语句(这里只列出出现问题的地方):

create table G_TX_DB_LABEL_base_4 NOLOGGING AS

SELECT 。。。。。。。。。。。。

FROM   G_TX_DB_LABEL_1 a

LEFT   JOIN G_TX_DB_LABEL_2_comp b

ON     a.单位名称 = a.单位名称

LEFT   JOIN G_TX_DB_LABEL_2_comp_1 C

ON     a.单位名称 = a.单位名称 ;

 

很显然,,,,,,,, 连接条件写错了

Sql执行计划,cost和rows都非常的恐怖呀。。。。。。。。:

 


由此可以看出空间暴涨的原因是该sql最后的3张表的连接条件无效导致的,我把该sql拿出来重新执行了下发现短短1分钟内临时段涨了2G多,至此可以肯定导致6月25号空间暴涨的sql就是这个了

 

 

 

最后,我给出的一些建议,建议充分利用一下我们的监控系统:

  1. 加入笛卡儿积的监控,每隔20分钟监控一次
  2. 增加对执行了5个小时以上的sql的监控
  3. 增加对执行计划中预估的行数以及cost花费超大的sql的监控(例如本例中的sql语句)
  4. 对统计信息有误的表的监控(如表实际有200W行,但是统计信息中的num_rows为0 ,这种可能会出现笛卡儿积的连接)
  5. 对数据库中的分区表全分区扫描的sql监控
目录
相关文章
|
5月前
|
SQL Oracle 关系型数据库
"揭秘!一键解锁Oracle日志清理魔法,让海量归档日志无处遁形,守护数据库健康,告别磁盘空间告急噩梦!"
【8月更文挑战第9天】随着Oracle数据库在企业应用中的普及,归档日志管理对保持数据库健康至关重要。归档日志记录所有更改,对数据恢复极为重要,但也可能迅速占用大量磁盘空间影响性能。利用Oracle提供的RMAN工具,可通过编写Shell脚本来自动清理归档日志。脚本包括设置环境变量、连接数据库、检查和删除指定时间前的日志,并记录执行情况。通过Cron作业定时运行脚本,可有效管理日志文件,确保数据库稳定运行。
138 7
|
SQL 运维 测试技术
记一次由于操作失误致使数据库瘫痪的故障分析与解决方案
在这篇文章中,我将分享一次由于操作不当导致数据库瘫痪的经验。通过回顾故障发生的时间、系统简介、时间线、问题分析和经验总结等方面的内容。讨论操作时间不当、操作流程不当、缺乏执行计划和限流机制等问题,并提出一些建议,如确认数据库更新时间、优化更新操作、使用限流工具、设置超时时间和重试机制、调整数据库参数以及定期维护和优化数据库。通过分享这次经验,我希望能帮助他人避免类似的错误,并提高数据库操作的准确性和稳定性。
118 0
|
canal 中间件 Java
阿里终面:业务主表读写缓慢如何优化?
阿里终面:业务主表读写缓慢如何优化?
|
SQL 弹性计算 运维
数据库故障致美国超一万航班取消或延迟
在2023年新年的第二周,美国东部时间1月11日上午,6点29分,美国航空监管机构(FAA)发布了一条仅40字的通告,随后不久,很快就宣布停飞全美所有国内航班。通告内容是,FAA正在对NOTAM(Notice to Air Missions)系统进行验证和恢复,在第一条通知之后的50分钟,FAA就宣布停飞所有国内航班。
377 0
数据库故障致美国超一万航班取消或延迟
|
安全 算法 机器人
A站近千万条用户数据外泄,有你吗?
A站近千万条用户数据外泄,有你吗?
201 0
A站近千万条用户数据外泄,有你吗?
|
SQL 存储 关系型数据库
优化器选错索引,导致线上瘫痪
大家好前面我们大概了解了索引如何选择以及利弊问题。今天介绍一下强大的MySQL为什么会选错索引!如果索引选对了事半功倍!
优化器选错索引,导致线上瘫痪
|
Oracle AliSQL 关系型数据库
防删库实用指南 | 只需一步,快速召回被误删的表
数据库的一些非常不错的企业级功能都是“养兵千日,用兵一时”,比如Oracle 10g中的回收站(Recycle Bin)功能,可以在特殊情况下发挥特种兵的功能,比如当你删除一个表空间、一个用户(Schema)时
6118 0
防删库实用指南 | 只需一步,快速召回被误删的表
|
存储 运维 关系型数据库
十年难得一遇!从数据误删到全量恢复的惊险记录
线上的数据库服务我们有完善的备份策略和恢复预案,数据即使被误删除了也是能够恢复的,误删除的数据量恢复只是时间问题。但各位同学自己部署的测试环境或者是在自己电脑中的开发环境的数据库就没有同级别的资源保障了。如果恰好你又把一些不能丢失的数据放到了这种环境中,那么建议要做定期备份,有备才能无患。
|
云安全 存储 安全
金山称五一前U盘病毒感染量暴涨
4月27日,金山毒霸云安全中心发布周(4.27-5.3)病毒预警,本周将迎来五一小长假,随着外出旅游的人数增多,利用移动存储进行传播的病毒感染量持续攀升。专家提醒用户,五一期间小心防范。 金山毒霸反病毒专家李铁军指出,近期一个利用U盘传播的木马程序“文件夹模仿者”感染量暴涨,几乎每天都在20万台次以上。
905 0

热门文章

最新文章