博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
闪回区空间不足引发的SQL问题分析
阅读量:2446 次
发布时间:2019-05-10

本文共 2207 字,大约阅读时间需要 7 分钟。

有一天上班的时候,收到一封报警邮件。

ZABBIX-监控系统:
------------------------------------
报警内容: archive_area_usage
------------------------------------
报警级别: PROBLEM
------------------------------------
监控项目: archive_area_usage:ARCHIVED 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,这种优化才是最有效的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-2125524/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-2125524/

你可能感兴趣的文章
如何在Windows Server 2003的IIS 6上安装Perl
查看>>
如何删除Trovi /管道/搜索保护浏览器劫持恶意软件
查看>>
normal forms_使用Google Forms轻松创建基于Web的调查
查看>>
word文档插入复选框_如何将复选框添加到Word文档
查看>>
sql truncate_如何在SQL Delete和SQL Truncate语句后使用数据库备份恢复数据
查看>>
为SQL Server Always On可用性组配置域控制器和Active Directory
查看>>
SQL Server连接面试SQL Server数据库管理员问答
查看>>
ssisdb_SSISDB入门
查看>>
如何在SQL Server Management Studio中创建和配置链接服务器以连接到MySQL
查看>>
使用PowerShell和T-SQL在多服务器环境中规划SQL Server备份和还原策略
查看>>
ansi_nulls_影响查询结果SQL Server SET选项-SET ANSI_NULLS,SET ANSI_PADDING,SET ANSI_WARNINGS和SET ARITHABORT
查看>>
使用Microsoft数据迁移助手在Oracle数据库和SQL Server之间迁移的具体示例
查看>>
大数据数据科学家常用面试题_面试有关数据科学,数据理解和准备的问答
查看>>
sql2012 ssrs_如何在SQL Server并行数据仓库中处理SSRS多值参数过滤
查看>>
使用Azure Data Studio在Docker容器上使用SQL Server 2017进行备份和还原操作
查看>>
使用sql语句生成报表_SQL Server报表服务:如何使用报表生成器处理常见的最终用户要求
查看>>
如何使用SQL Server 2016系统版本的时态表跟踪数据更改的历史记录
查看>>
sql语句集合里有集合_学习SQL:集合论
查看>>
mac命令行将输出写入文件_如何使用命令行将备份,文件和脚本迁移到云中/从云中迁移
查看>>
sql数据库性能指标_SQL Server磁盘性能指标–第2部分–其他重要的磁盘性能指标
查看>>