Oracle 11g新特性direct path read引发的系统停运故障诊断处理

黎俊杰 | 2016-07-28 14:37

声明:部分表名为了脱敏而用XX代替

1、故障现象

(1)一个业务系统输入用户名与密码后无法进入首页,表现为一直在运行等待,运行缓慢

(2)整个系统无法正常使用,接近停运状态

2、故障解决方法

调整数据库参数alter system setevent='10949 trace name context forever, level 1'来关闭“direct path read”(直接路径读)特性,使SQL语句可以从缓存中查询数据,达到降低I/O读取量,使全表扫描的数据从缓存中读取,加快SQL语句运行速度的目的。

3、故障原因总结

(1)由于部分SQL语句设计或编写效率低下,以及表缺少适应的索引,导致SQL语句需要全表扫描,在表较小时,ORACLE数据库将数据读取到缓存后,后续虽然是全表扫描,但均是从缓存中读取,所以问题未体现出来

(2)在表的大小不断增大后,根据ORACLE 11g数据库的算法,在表达到db_cache_size(GB)的2%(默认值)以后,认为采用直接路径读(跳过缓存,直接从磁盘文件中全扫描读取)

(3)DX_T_XXVIATE表大小为1GB,在大量反复以direct pathread磁盘重复读取的情况下,消耗大量的I/O资源,将服务器I/O几乎耗尽

(4)在主机I/O耗尽的情况下,系统的读、写,均几乎处于瘫痪状态

(5)在关闭ORACLE 11G数据库的direct path read新特性功能后,读取方式恢复到从缓存中读取,磁盘读降到“0”,系统恢复正常

4、改进建议

(1)优化访问DX_T_XXVIATE 相关的SQL语句与设计合适的索引,避免大表全表扫描。

5、故障原因分析

5.1 7月11日故障时段数据库服务器I/O等待严重

5.2 7月11日故障时段磁盘响应非常缓慢

5.3 对比故障当日(7月11日)与上周的I/O磁盘读取量,比上周大十倍

故障前、中、后磁盘读取量对比图:

上面高的蓝色线,是故障当日(2016年7月1日,周一)的磁盘Disk Read KB/s指标线

5.4 高度消耗I/O的SQL语句。

上面SQL_ID为b8m6wy846qgbk的SQL语句,physical reads鹤立鸡群,可见此SQL语句的影响最为严重。

5.5 全表扫描单次超过6秒的表与其SQL语句统计。

统计汇总时间:08:00—10:00

统计时间:08:00—10:00单次扫描超过6秒的SQL语句及时长详细清单

上面数据显示,08:00—10:00统计时间内,所有全表扫描超过6秒的表,全部是DX_T_XXVIATE这一张表,涉及到的SQL语句有60多条,执行次数最多的数SQL_ID为b8m6wy846qgbk的语句。

5.6 全表扫描最严重SQL语句故障前、后、故障解决后磁盘读取数量对比

5.6.1 7月11日以前系统运行正常的情况下SQL_ID为b8m6wy846qgbk的语句执行统计信息

--执行统计信息(buffer get很大,但是disk reads为0,判定数据基本从buffer中读取):

--执行计划(对DT_T_OBVIATE全表扫描,预计时间为5分钟30秒):

5.6.2 7月11日故障当日SQL_ID为b8m6wy846qgbk的语句执行统计信息

--执行统计信息(buffer get和disk reads都一样的巨大,基本判定每次数据全是从磁盘读取到BUFFER):

--执行计划(对DT_T_OBVIATE全表扫描,预计时间为5分钟30秒,从执行计划的PHV和plan均看出执行计划在系统故障时与正常时,是保持一致的):

5.6.3 故障解决后(取7月12日数据)SQL_ID为b8m6wy846qgbk的语句执行统计信息

--执行统计信息(故障解决后,PVH值不变,Disk Reads又恢复到了故障前的“0”,说明每次执行数据又是从BUFFER中读取的):

5.7等待事件变化识别数据读取方式变化比较

看来,系统实际上在2016年7月10日(周日),SQL语句的数据读取方式就发生了少量的direct path read,系统实际上已经处于间歇式缓慢状态,到了2016年7月11日(周一),问题特别严重,约99%左右的执行是direct path read,导致I/O耗尽,系统瘫痪。

About Me

.........................................................................................................................................................................................................

● 本文来自于微信公众号转载文章,若有侵权,请联系小麦苗及时删除,非常感谢原创作者的无私奉献

● 本文在ITpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 小麦苗分享的其它资料:http://blog.itpub.net/26736162/viewspace-1624453/

● 原文地址:http://mp.weixin.qq.com/s?__biz=MzA5MDQ5Nzc0MA==&mid=2247483720&idx=1&sn=646e8c1fc34d7afb13484dd7e483534b&scene=1&srcid=0815syZkJIb1ficYRJVbbc6H#rd

● QQ群: 230161599   微信群:私聊

● 联系我请加QQ好友(642808185),注明添加缘由

● 【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】

.........................................................................................................................................................................................................

长按下图识别二维码或微信客户端扫描下边的二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。

时间: 2024-07-29 07:15:29

Oracle 11g新特性direct path read引发的系统停运故障诊断处理的相关文章

Oracle 11g 新特性 -- Online Patching (Hot Patching 热补丁)说明

Oracle 11g 新特性 -- Online Patching (Hot Patching 热补丁)说明 一.官网说明 MOS 的文档:RDBMSOnline Patching Aka Hot Patching [ID 761111.1] 有说明.这里取部分内容.   A regular RDBMSpatch is comprised of one or more object (.o) files and/or libraries (.afiles). Installing a regul

Oracle 11G新特性详解

一.数据库管理部分 1. 数据库重演(Database Replay) 这一特性可以捕捉整个数据的负载,并且传递到一个从备份或者standby数据库中创建的测试数据库上,然后重演负载以测试系统调优后的效果. 2. SQL重演(SQLReplay) 和前一特性类似.但是只是捕捉SQL负载部分,而不是全部负载. 3.计划管理(Plan Management) 这一特性允许你将某一特定语句的查询计划固定下来,无论统计数据变化还是数据库版本变化都不会改变它的查询计划. 4.自动诊断知识库(Automat

ORACLE 11g新特性--延迟段创建

很多数据库都有存在空表的情况,较多的空表会占用大量的磁盘空间,ORACLE 在11gR2版本推出延迟段创建新特性,所谓延迟段创建,顾名思义就是在创建一张新空表的时候,ORACLE默认不会为这张空表分配段(SEGMENTS),也就是不会为这张空表分配空间,这样就避免了空表占用空间的情况,如下实验: SQL> SELECT * FROM V$VERSION; BANNER ----------------------------------------------------------------

[引用分区表]Oracle 11g新特性之引用分区表

        引用分区表是Oracle11g引入的新特性,在特定场合十分好用,解决了"并非所有表都具有您需要根据其进行分区的列"这个问题.          根据Oracle官方文档介绍,引用分区表是通过PARTITION BY REFERENCE语句来实现,需要指定引用约束的名称,该约束将成为应用到该引用分区表所使用的约束.这个约束必须启用和执行.    和其他分区表一样,你可以制定对象级别的默认属性,也可以随意在特定分区设置属性,覆盖对象级别的属性.    下面的sql语句创建了

Oracle 11g新特性之收集多列统计信息

        通常,当我们将SQL语句提交给Oracle数据库时,Oracle会选择一种最优方式来执行,这是通过查询优化器Query Optimizer来实现的.CBO(Cost-Based Optimizer)是Oracle默认使用的查询优化器模式.在CBO中,SQL执行计划的生成,是以一种寻找成本(Cost)最优为目标导向的执行计划探索过程.所谓成本(Cost)就是将CPU和IO消耗整合起来的量化指标,每一个执行计划的成本就是经过优化器内部公式估算出的数字值.         我们在写SQ

Oracle 11g 新特性 Flashback Data Archive 使用实例_oracle

Flashback Data Archive(闪回日志归档)其实理解为长时间的保存undo数据,对于某些重要的表可以自定义它的历史记录保存期限,它的的种种行为与undo表空间十分相似,使用的时候也是完全透明的,用户不知道它的查询一致性视图数据是来自undo还是Flashback Data Archive,现来分析它与undo的几点不同: 1.Flashback Data Archive仅记录UPDATE和DELETE语句,不记录INSERT语句. 2.Flashback Data Archive

Oracle 11gR2新特性--延迟段创建(Deferred Segment Creation)

Oracle 11gR2新特性--延迟段创建(Deferred Segment Creation) 真题1. 什么是延迟段创建(Deferred Segment Creation)? 答案:在Oracle 11.2中,当创建一个空表或者空分区时,为了加快创建速度,Oracle并不会立即分配初始段和空间,实际的表段(Table Segement)被延迟到第一行数据插入时创建.延迟段创建特性通过DEFERRED_SEGMENT_CREATION参数控制,默认为TRUE,表示开启该功能.延迟段创建可以

Oracle 数据库11g新特性之高效 PL/SQL 编码

Oracle 数据库11g新特性之高效 PL/SQL 编码 转自:http://space.itpub.net/1384/viewspace-217959 自推出以来,PL/SQL 就一直是在 Oracle 数据库中编程的首选语言.经过一段时间的发展,我们看到,由于该语言可以实现越来越多需要较少编码的功能,它已经演变为一个综合的开发平台.Oracle 数据库 11g使得 PL/SQL 编码对程序员更加高效.在本文中,您将通过某些示例简单了解这个新功能. 复合触发器 请考虑一个宾馆数据库:宾馆房间

《Oracle数据库管理与维护实战》——1.3 Oracle 12c新特性

1.3 Oracle 12c新特性 Oracle数据库管理与维护实战 纵观甲骨文全球大会和甲骨文公司的各种资讯,我们可以发现云计算和大数据是两个重要的主题,Oracle 12c则融合了这两大主题.与以往的Oracle数据库相比,Oracle 12c在16个方面进行了更新.本节将详细介绍Oracle 12c数据库中的16个新特性. 1.3.1 支持多线程模式 在Oracle 12c中,Oracle引入了多线程模式,允许在Windows平台之外的UNIX.Linux等系统使用多线程模式.结合多进程与