表空间暴涨原因核查

简介:   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监控
目录
相关文章
|
Python
分享73个Html行业模板,总有一款适合您
分享73个Html行业模板,总有一款适合您
63 0
|
Docker 容器
containerd快速安装指南🚀
本指南旨在提供一个简洁有效的方法来安装`containerd`。我们将通过一份易于理解的脚本步骤,指导您完成安装🔧。请根据您的实际需求,适当调整`containerd`版本及其相关依赖。
|
数据库 SQL 关系型数据库
|
移动开发 小程序 JavaScript
总结10条~高级前端必知的小程序体积优化策略
我们都知道微信小程序有包体积限制,整个小程序所有分包大小不超过 20M,单个分包/主包大小不能超过 2M。然而面对业务的不断更新迭代,代码和资源会越来越多,如果不尽早规划包体积的治理,势必有一天会对业务的发展造成阻碍。所以如何在有效支持业务逻辑的同时,尽量减少资源占用,在小程序开发环境中显得尤为重要。 代码包体积是其中的一个重要方面,本文将就此进行分析与探讨。
689 0
总结10条~高级前端必知的小程序体积优化策略
|
安全 应用服务中间件 Apache
|
3天前
|
人工智能 运维 安全
|
1天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
8天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
761 109