关于ORA-01555的问题分析

今天开发的同事发给我一个问题,在运行某一个Job的时候抛出了ORA错误,希望我们看看从数据库层面能不能发现什么。
错误日志如下:

Function:
EntitySQLCursor::query

Line
number: 113

Time:
Thu Jul  2 22:52:46 2015

Message
text: (PE1-000143) Internal IO Framework Database Error, message ORA-01555:
snapshot too old: rollback segment number 22 with name
"_SYSSMU22_234950861$" too small

,
code 1555.

看这个错误,似乎是oracle分配的回滚段太小导致的。对于这个问题,因为已经过去了一段时间,所以能够合理分析的一种途径就是使用ash.
根据错误信息中的时间戳,基本定位在了22:52~22:53这一分钟之内,抓取了一个ash报告。
因为信息针对性更强,可以很清晰的看到在那一分钟之内数据库层面有一些查询和dml的语句在运行,有些走了全表扫描,有些走了索引扫描。

Top SQL with Top Events

SQL ID Planhash Sampled # of Executions % Activity Event % Event Top Row Source % RwSrc SQL Text
fzn01wc5pg2dg 1199754052 2 15.67 CPU + Wait for CPU 11.75 TABLE ACCESS - FULL 11.75 SELECT /*+ ALL_ROWS USE_NL ("A...
        db file sequential read 2.61 TABLE ACCESS - FULL 2.61
        direct path read 1.31 TABLE ACCESS - FULL 1.31
5q2mguqdcrq4a 421773076 1 12.01 db file sequential read 12.01 INDEX - RANGE SCAN 7.05 SELECT RE.L3_NET_START_TIME, R...
a793wrq0q27c5 201265388 1 10.70 db file sequential read 8.09 DELETE 8.09 delete from RATED_EVENT WHERE ...
        CPU + Wait for CPU 1.57 DELETE 1.57
        direct path read temp 1.04 DELETE 1.04
496x3fkydc1xj 84305990 1 9.92 db file sequential read 8.62 INDEX - RANGE SCAN 8.62 ** SQL Text Not Available **
        CPU + Wait for CPU 1.31 INDEX - RANGE SCAN 1.31
dm1d93bw2jdzc 2843169790 27 8.09 db file sequential read 4.70 INDEX - RANGE SCAN 2.09 select sk.rowid , sk.subscribe...
        CPU + Wait for CPU 3.39 SELECT STATEMENT 2.35

需要重点关注的是全表扫描的语句和DML语句。
先来看看全表扫描的语句。
SELECT /*+ ALL_ROWS USE_NL ("AC1_CONTROL_HIST") FULL ("AC1_CONTROL_HIST") */ ....  from  "AC1_CONTROL_HIST" WHERE "CUR_PGM_NAME"='RGD' AND "IDENTIFIER"=:1
语句输出字段较多,但是相关的表只有一个,这个表从表名可以看出是一个历史表,数据量相比也是相当大的,一查看统计信息,数据量都在亿级以上。
这么大的表,使用了hint,指定全表扫描,相比是某些地方需要吧,带着疑问查看了索引的信息,而其中的主键索引就是IDENTIFIER字段开始的。
所以从这个角度来看,这个问题是一个很明显的问题,因为使用Hint不当导致了,本该走索引扫描的查询结果走了极为消耗资源的全表扫描。
当然了,哲学中有句话是 存在即合理,可能在早期的时候数据量不大,处于某种需要,可能需要全表扫描,或者这部分逻辑是直接从某个地方参考而来,而其中的hint都忘了变更,导致了这样的问题。
出了问题,找问题的理由也是多种多样。当然最终这个问题还是发生了,能够及时发现修复才是更重要的。

对于这个问题的分析暂时告一段落,但是还有dml对于undo的影响也不容小视,可供参考的就是前面表格中的delete语句了。
对于这个语句,delete涉及的表也是很大的一个分区表,数据量亿级以上。在基于索引扫描的前提下,做了根据时间戳进行数据清理的操作。对于这种操作,我们可以反过来考虑一下,目前delete的逻辑是对的,在排除了ac1_control_hist全表扫描影响的前提下,delete操作还是会消耗大量的undo资源。这个时候也需要同时考虑目前的undo大小是否完全满足系统的要求。目前的库里undo的大小在17G左右,几个大分区表都在百G以上,如果删除所限定的时间戳大一些,undo的消耗就会更大,所以也需要考量undo的大小,根据目前的情况,可以考虑适当增大undo空间。
所以这个问题的分析结果就是两个建议,第一个就是对于本该索引扫描的语句走了全表扫描进行改进,规范hint的使用。另外一方面是建议适当调大undo的大小,以满足系统的需求,使得系统的负载更有张力。

时间: 2024-08-28 20:59:43

关于ORA-01555的问题分析的相关文章

一个备库中ORA错误信息的分析

最近也在处理一些遗留的问题,所以对于使用orabbix的报警还是心怀敬畏之心,一方面是我们让它能够做全方位的监控,另一方面也让我发现我们还是存在不少的小问题,小问题虽小,但是放大了,就是大麻烦,甚至数据库事故. 自从上次在社群分享了DB time的抖动案例之后,有不少的朋友似乎对这个工具很感兴趣,我做这个分享的一个主要原因就是希望大家在有些细节中发现问题,至于我分享的问题原因,都是各种各样的小问题,有些朋友也纳闷这种错误似乎还是比较低级的,通过一般的监控都应该解决,但是确实存在,发现了解决了,就

alert日志中的一条ora警告信息的分析

今天照例检查数据库alert日志,发现一个错误.但是也没在意,想可能有大的操作导致的,马上会释放空间的,但是转眼一想,这是生产库,而且现在时早上,泰国的运营商还不算忙时,需要重视这个问题,看有没有什么潜在的问题, 从alert日志里面看到的 Fri Jul 12 09:08:23 ICT 2013 ORA-1652: unable to extend temp segment by 128 in tablespace                 TEMP   查询temp_usage,发现目

数据库open报错ORA-01555问题

管理的测试库出问题了,无法open,我们先来看看是什么问题: Recovery of Online Redo Log: Thread 1 Group 4 Seq 4 Reading mem 0 Mem# 0: /onlinelog/shr/redo04.log Completed redo application of 0.00MB Completed crash recovery at Thread 1: logseq 4, block 3, scn 7755957 0 data blocks

EBS 清理附件表空间apps_ts_media表空间内附件fnd_lobs

参考文档: Avoiding abnormal growth of FND_LOBS table in Applications 11i [ID 298698.1] FND_LOBS is usually one of the top 10. This is because, it stores all the attachments that have been uploaded to Oracle Applications. There is a LOB field within this

Oracle的ORA-01555

什么是ORA-01555  首先解释下Ora-01555. [oracle@rhel_lky02 ~]$ oerr ora 01555 01555, 00000, "snapshot too old: rollback segment number %s with name \"%s\" too small" // *Cause: rollback records needed by a reader for consistent read are // overw

[20170808]Spfile is in old pre-11 format

[20170808]Spfile is in old pre-11 format and compatible.txt --//今天检查alert.log,发现如下提示: Spfile /u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/spfilebook.ora is in old pre-11 format and compatible >= 11.0.0; converting to new H.A.R.D. compliant format. $

关于物化视图的疑问

--初始化操作, 创建两个用户一个,testo,一个test. 在testo上创建表,test上创建物化视图. SQL> create user testo identified by testo; User created. SQL> create user test identified by test; User created. SQL> grant connect,resource to testo,test; Grant succeeded. SQL> grant cr

理解和使用Oracle 8i分析工具-LogMiner

Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重作日志文件(归档日志文件)中的具体内容,特别是,该工具可以分析出所有对于数据库操作的DML(insert.update.delete等)语句,另外还可分析得到一些必要的回滚SQL语句.该工具特别适用于调试.审计或者回退某个特定的事务. LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据

数据库性能分析及调整一例

数据|数据库|性能 故障现象2004年6月8日上午10:00,内蒙古巴盟网通用户反映在OSS系统界面"话单查询"里查询单个用户五天的话单特别慢,查询很长时间无结果. 例如:在OSS系统界面"综合查询"内点击"收费"-〉"话单查询",键入"用户号码,起始时间:2004-01-01 00:00:00,结束时间:2004-06-01 23:00:00",点击查询后,IE进度条缓慢,很长时间不返回结果.故障分析经过

Oracle 常见错误代码的分析与解决

在使用Oracle的过程中,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的这些错误,本人就使用中出现比较频繁的错误代码一一做出分析,希望能够帮助你找到一个合理解决这些错误的方法,同时也希望你能够提出你的不同看法.毕竟作为一种交流的手段,个人意见难免过于偏颇,而且也必定存在着不足,出错之处在所难免.写这篇文章的目的就是想通过相互之间的交流共同促进,共同进步. 错误1: ORA-01650:unable to extend rollb