Oracle 11g direct path read 等待事件的理解
在Oracle 11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是物理读了。 在10g中,都是通过gc buffer来读的,所以不存在direct path read的问题。
direct path read较高的可能原因有:
1. 大量的磁盘排序操作,order by, group by, union, distinct, rollup, 无法在PGA中完成排序,需要利用temp表空间进行排序。 当从临时表空间中读取排序结果时,会产生direct path read.
2. 大量的Hash Join操作,利用temp表空间保存hash区。
3. SQL语句的并行处理
4. 大表的全表扫描,在中,全表扫描的算法有新的变化,根据表的大小、高速缓存的大小等信息,决定是否绕过SGA直接从磁盘读Oracle11g取数据。而10g则是全部通过高速缓存读取数据,称为table scan(large)。11g认为大表全表时使用直接路径读,可能比10g中的数据文件散列读(db file scattered reads)速度更快,使用的latch也更少。
大量的direct path read等待时间最可能是一个应用程序问题。 direct path read事件由SQL语句驱动,这些SQL语句执行来自临时的或常规的表空间的直接读取操作。 当输入的内容大于PGA中的工作区域时,带有需要排序的函数的SQL语句将排序结果写入到临时表空间中,临时表空间中的排序顺序串随后被合并,用于提供最终的结果。读取排序结果时,Oracle会话在direct path read等待事件上等待。DB_FILE_DIRECT_IO_COUNT初始化参数可能影响direct path read的性能。
一个隐含参数:
_serial_direct_read = false 禁用direct path read
_serial_direct_read = true 启用direct path read
alter sytem set "_serial_direct_read"=never scope=both sid='*'; 可以显着减少 direct path read
本案例:由于没有走索引,导致全表扫描,数据库event状态是direct path read
-- 查看sql session 执行情况
SELECT S.SID,S.LAST_CALL_ET,
(SELECT ST.VALUE FROM V$SESSTAT ST WHERE ST.SID = S.SID AND ST.STATISTIC# = TO_NUMBER('38') ) CRITERIA_VALUE,
S.BLOCKING_SESSION,S.BLOCKING_INSTANCE,S.BLOCKING_SESSION_STATUS,
(SELECT CASE WHEN NOT S.BLOCKING_SESSION IS NULL THEN 'kill -9 '|| GP.SPID ELSE NULL END FROM GV$PROCESS GP,GV$SESSION GS WHERE GS.PADDR = GP.ADDR AND GS.SID=S.BLOCKING_SESSION AND GS.INST_ID=GP.INST_ID ) KILL_BLOCK_PROC,
(SELECT CASE WHEN NOT S.BLOCKING_SESSION IS NULL THEN 'ALTER SYSTEM KILL SESSION '''|| GS.SID || ',' || GS.SERIAL# ||''' IMMEDIATE;' ELSE NULL END FROM GV$SESSION GS WHERE GS.SID=S.BLOCKING_SESSION AND GS.SID=S.BLOCKING_SESSION AND GS.INST_ID=S.BLOCKING_INSTANCE ) KILL_BLOCK_SESSION,
S.CLIENT_IDENTIFIER,S.SERVER,S.USERNAME,S.MACHINE,S.PROGRAM,S.MODULE,S.ACTION,
(SELECT AC.NAME
FROM ( SELECT ACTION, NAME FROM AUDIT_ACTIONS UNION SELECT 189, 'MERGE' FROM DUAL ) AC WHERE AC.ACTION = S.COMMAND + CASE WHEN S.COMMAND < 0 THEN 256 ELSE 0 END) COMMAND,
S.STATUS,S.LOCKWAIT,S.EVENT,S.STATE,S.WAIT_CLASS,S.WAIT_CLASS#,S.WAIT_TIME,T.EXECUTIONS,T.OPTIMIZER_MODE,T.OPTIMIZER_COST,T.CPU_TIME,T.DISK_READS,T.BUFFER_GETS,T.SORTS,T.SHARABLE_MEM,
T.PERSISTENT_MEM,T.RUNTIME_MEM,T.ROWS_PROCESSED,T.COMMAND_TYPE,O.OBJECT_ID,O.OBJECT_NAME,F.FILE_ID,F.FILE_NAME,F.TABLESPACE_NAME,
S.ROW_WAIT_BLOCK#,S.ROW_WAIT_ROW#,S.LOGON_TIME,T.SQL_TEXT,T.SQL_FULLTEXT,
'SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('''||T.SQL_ID||''','||T.CHILD_NUMBER||'));' PLAN,
'ALTER SYSTEM KILL SESSION ''' || S.SID || ',' || S.SERIAL# || ''' POST_TRANSACTION IMMEDIATE;' KILL_SESSION,
'SELECT SQL_TEXT,SQL_FULLTEXT,LAST_ACTIVE_TIME,DBMS_SQLTUNE.EXTRACT_BINDS(BIND_DATA) BIND FROM V$SQL WHERE SQL_ID='''||S.SQL_ID||''' ORDER BY LAST_ACTIVE_TIME DESC;' BIND
FROM V$SESSION S,V$SQL T,DBA_OBJECTS O,DBA_DATA_FILES F
WHERE S.SQL_HASH_VALUE = T.HASH_VALUE AND S.STATUS = 'ACTIVE' AND F.FILE_ID=ROW_WAIT_FILE# AND S.ROW_WAIT_OBJ#=O.OBJECT_ID
ORDER BY LAST_CALL_ET DESC;
Oracle 11g direct path read 等待事件的理解的更多相关文章
- oracle 11G direct path read 很美也很伤人
direct path read在11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这样的全表扫描就是物理读了. 在10g中,都是通过gc buffer来读 ...
- oracle 11G direct path read 非常美也非常伤人
direct path read 在11g中,全表扫描可能使用direct path read方式,绕过buffer cache,这种全表扫描就是物理读了. 在10g中,都是通过gc buffer来读 ...
- direct path write 等待事件导致数据库hang
同事反应十几分钟前数据库好像挂起了一会,让我排查数据库是否存在什么问题. 第一反应看当前数据库还是否有什么等待事件,结果有direct path write等待事件. 于是抓了问题时间段20分钟的AS ...
- oracle 11g enq: JI – contention等待事件
最近使用物化视图同步的环境在大量刷新的时候频繁出现enq: JI – contention等待事件,经查: JI enqueue is acquired in exclusive mode on th ...
- Oracle 常见的33个等待事件
一. 等待事件的相关知识: 1.1 等待事件主要可以分为两类,即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件. 1). 空闲等待事件指Oracle正等待某种工作,在诊断和优化数据库的时 ...
- Oracle常见的几种等待事件
1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...
- Oracle常见的33个等待事件
Buffer busy waits 原因: 当一个会话试图修改一个数据块,但这个数据块正在被另一个会话修改时. 当一个会话需要读取一个数据块,但这个数据块正在被另一个会话读 ...
- 【Oracle】11g direct path read介绍:10949 event、_small_table_threshold与_serial_direct_read
转自刘相兵老师的博文: http://www.askmaclean.com/archives/11g-direct-path-read-10949-_small_table_threshold-_se ...
- 【参考】查找Oracle最高的几个等待事件以及锁的信息
1.通过操作系统的命令找到系统资源的bottleneck,如:CPU, Memory, I/O, Network 同时主要关注IOWait, PI/PO, Memory的使用情况 2.通过查询v$s ...
随机推荐
- js判断一个值是空的最快方法是不是if(!value){alert("这个变量的值是null");}
!逻辑非 操作符(js)-操作于任何值,(!undefined)(!Null)(!任何对象)(!"")(!"lihuan")(!任何非零数字值) (!0)(!N ...
- log4j 输出原始数据到指定日志文件
项目中需要将上传的数据输出到指定的log文件,之前对log4j缺少深入认识,普遍将整个应用的日志到输出到一个文件. 在经理的帮助下,业务数据可以直接输出到指定的log文件,现将配置及使用流程整理一下. ...
- 【Ctrl】 + 【Alt】 + 【F1~F6】 和 【Ctrl】 + 【Alt】 + 【T】打开的终端有什么不同?
ctrl +alt +Fn 打开的是模拟终端,简单说来,Linux系统一开机会自动打开6个模拟终端,然后自动切换到其中一个(一般来说是切换到图形界面的那个也就是说窗口管理器是在这6个模拟终端中运行的) ...
- 二、求水仙花数,打印出100-999之间所有的"水仙花数"
所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方 public c ...
- Android开发 ---Button的OnClickListener的三种实现方法
button的OnClickListener的三种实现方法 onclick事件的定义方法,分为三种,分别为 1.在xml中进行指定方法: 2.在Actitivy中new出一个OnClickListen ...
- web项目与jsp有关的三个jar的依赖
<!-- jsp --> <dependency> <groupId>javax.servlet</groupId> <artifactId> ...
- SharePoint Framework 构建你的第一个web部件(一)
博客地址:http://blog.csdn.net/FoxDave SharePoint客户端web部件是出现在SharePoint页面的控件,但却是在浏览器本地运行的.他们是SharePoint ...
- LibHaru编译使用
最近公司准备在PDF方面发力了,我也要行动起来,就找到了LibHaru这个开源库 编译Libharu需要用到zlib库和libpng库,libpng库又依赖zlib库. zlib 下载地址:http: ...
- Android修行之路------ListView自定义布局
主布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...
- IONIC和Cordova安装、打包踩过的坑
1.问题1:直接执行npm install -g cordova ionic,因为网络原因,执行不成功 解决方案:将npm映射到淘宝服务器:npm install -g cnpm --registry ...