闪回区空间不足引发的SQL问题分析

简介: 有一天上班的时候,收到一封报警邮件。 ZABBIX-监控系统: ------------------------------------报警内容: archive_area_usage ----------------------------------...

有一天上班的时候,收到一封报警邮件。
ZABBIX-
监控系统:
------------------------------------
报警内容: archive_area_usage
------------------------------------
报警级别: PROBLEM
------------------------------------
监控项目: archive_area_usageARCHIVED LOG-->70.25-->
------------------------------------
报警时间:2016.09.20-08:52:47

可以看出是闪回区快满了,当然我设置了阈值70%,比Oracle默认的80%要更低一些,希望尽可能早的发现这些潜在的问题。
碰到这个问题,让我有些奇怪。
现在服务器端都有默认的crontab来设置定期删除过期的归档,怎么闪回区还会这么快就满了呢。这类问题的原因相对来说复杂一些,如果说从数据库层面来看,如果在10gR2的版本中,可能出现这种情况,那就是有些命令的兼容性问题导致,如果是系统层面可能就是就是存储路径失效,比如nfs挂载点失效等导致。
目前这个数据库是11gR2,存储都是本地磁盘。
我们来看看crontab的设置,可以看出是每个小时会运行,触发的频率较高,如果每天触发一次,如果存在这个问题可能还能理解,为什么在这种频率下删除归档依旧闪回区空间不足?
$ crontab -l
*/50 * * * *  . $HOME/.bash_profile;$HOME/dbadmin/scripts/rman_trun_arch.sh
我们来看看脚本的内容。我贴出关键的部分。
可以看出归档的删除过期归档,保留时间是10个小时之内,其实已经算是很短的了。保留近半天的归档而已。
rman target / <<EOF
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time "sysdate-10/24";
exit
EOF
如此频率下怎么还会有这类问题。看看当前闪回区的情况。

可以看到已经存在300多个归档。
这问题确实有意思了,有大量的归档,有频繁的删除策略,但是闪回区还报错。
我们来换个姿势看这个问题,就是查看归档频率。

这个脚本的强大的之处就在于可以查看近2周的归档频率,通过这种方式就可以看出这个问题其实是一个周期性的。在周二会定期出现,只是之前没有引起重视而已。
可以看到每个小时的归档频率极高,按照这种情况,6个小时就会积累300多个归档,一个归档日志成员是1G来算,那么这个归档量就很大了。
一个统计库怎么这么忙,这是一个问题,我们来看看数据库的负载情况。


可以看到在早间的时候数据库的负载还是有很大的提升。
那么这个时间段内是否有SQL引起的如此的变化,比如一个AWR报告,比如一个脚本就能够定位。
当然抓到罪魁祸首是关键,我是使用脚本来做,抓到了下面的语句。发现了不少负载高的查询语句。

进一步定位,发现都有千丝万缕的关键,那就是其中一个存储过程调用,会调用里面的一些SQL语句。
最终发现SQL语句是这样的形式
SQL_FULLTEXT
----------------------------------------------------------------------------------------------------
UPDATE TESTINFO A SET A.MAX_LEVEL = NVL((SELECT USER_CLASS FROM ROLE_CLASS_INFO B WHERE A.GROUPID =
B.GROUP_ID AND B.CN_GUID = A.ROLE_GUID), A.MAX_LEVEL) WHERE DRAWED = 'Y'

看这个语句其实逻辑也不复杂,但是如果查看数据量就会发现这个工作量真是太大了,两个表都是亿级的数据量。

按照过滤条件,数据量2亿,过滤得到4千万,都不是小数目,所以全表看来也是一种方案。
SQL> select DRAWED,count(*)from test.testinfo group by DRAWED;
D   COUNT(*)
- ----------
Y   43807108
N  216762221
Elapsed: 00:00:36.17  
但是显然这里还是存在一些需要确认的地方,这个语句本该不需运行,至少不应该在统计层面来保证数据的业务逻辑一致性,应该在OLTP系统中就应该保证,所以我的努力方向就是取消这个JOB,这种优化才是最有效的。
目录
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
|
4月前
|
SQL 算法 数据挖掘
【SQL周周练】:利用行车轨迹分析犯罪分子作案地点
【SQL破案系列】第一篇: 如果监控摄像头拍下了很多车辆的行车轨迹,那么如何利用这些行车轨迹来分析车辆运行的特征,是不是能够分析出犯罪分子“踩点”的位置
119 15
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
164 12
|
SQL 数据可视化 算法
SQL Server聚类数据挖掘信用卡客户可视化分析
SQL Server聚类数据挖掘信用卡客户可视化分析
|
11月前
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
11月前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
136 0
|
SQL 关系型数据库 数据库
数据库空间之谜:彻底解决RDS for SQL Server的空间难题
【8月更文挑战第16天】在管理阿里云RDS for SQL Server时,合理排查与解决空间问题是确保数据库性能稳定的关键。常见问题包括数据文件增长、日志文件膨胀及索引碎片累积。利用SQL Server的动态管理视图(DMV)可有效监测文件使用情况、日志空间及索引碎片化程度。例如,使用`sp_spaceused`检查文件使用量,`sys.dm_db_log_space_usage`监控日志空间,`sys.dm_db_index_physical_stats`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
293 2
|
前端开发 Java JSON
Struts 2携手AngularJS与React:探索企业级后端与现代前端框架的完美融合之道
【8月更文挑战第31天】随着Web应用复杂性的提升,前端技术日新月异。AngularJS和React作为主流前端框架,凭借强大的数据绑定和组件化能力,显著提升了开发动态及交互式Web应用的效率。同时,Struts 2 以其出色的性能和丰富的功能,成为众多Java开发者构建企业级应用的首选后端框架。本文探讨了如何将 Struts 2 与 AngularJS 和 React 整合,以充分发挥前后端各自优势,构建更强大、灵活的 Web 应用。
153 0
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
228 0
|
SQL 数据采集 算法
【电商数据分析利器】SQL实战项目大揭秘:手把手教你构建用户行为分析系统,从数据建模到精准营销的全方位指南!
【8月更文挑战第31天】随着电商行业的快速发展,用户行为分析的重要性日益凸显。本实战项目将指导你使用 SQL 构建电商平台用户行为分析系统,涵盖数据建模、采集、处理与分析等环节。文章详细介绍了数据库设计、测试数据插入及多种行为分析方法,如购买频次统计、商品销售排名、用户活跃时间段分析和留存率计算,帮助电商企业深入了解用户行为并优化业务策略。通过这些步骤,你将掌握利用 SQL 进行大数据分析的关键技术。
750 0