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 ...
随机推荐
- poj1226
题解: 后缀数组 把所有串先翻转,用一个没有出现过的字符连接 然后再把所有串接起来 然后用一个没有出现过的字符连接 然后二分 在后缀数组上判断lcp 代码: #include<cstdio> ...
- TCP拥塞控制和流量控制
TCP 的流量控制与拥塞控制可以说是一体的.流量控制是通过滑动窗口实现的,拥塞避免主要包含以下2个内容: (1)慢开始,拥塞避免 (2)快重传,快恢复 1.流量控制——滑动窗口 TCP采用大小可变 ...
- 九. Python基础(9)--命名空间, 作用域
九. Python基础(9)--命名空间, 作用域 1 ● !a 与 not a 注意, C/C++可以用if !a表示if a == 0, 但是Python中只能用if not a来表示同样的意义. ...
- Cracking The Coding Interview 5.7
//An array A[1-n] contains all the integers from 0 to n except for one number which is missing. In t ...
- TLS反调试
0x01 TLS反调试简介 TLS(Thread Local Storage)原本的目的是解决多线程程序中变量同步的问题.线程本身有独立于其他线程的栈空间,因此线程中的局部变量不用考虑同步问题.多线程 ...
- SharePoint Framework 构建你的第一个web部件(一)
博客地址:http://blog.csdn.net/FoxDave SharePoint客户端web部件是出现在SharePoint页面的控件,但却是在浏览器本地运行的.他们是SharePoint ...
- 强化学习3-蒙特卡罗MC
之前讲到强化学习可以用马尔科夫决策过程来描述,通常情况下,马尔科夫需要知道 {S A P R γ},γ是衰减因子,那为什么还需要蒙特卡罗呢? 首先什么是蒙特卡罗? 蒙特卡罗实际上是一座赌城的名字,蒙 ...
- rancher中使用ingress-lbs做负载均衡
rancher 相关资料 http://rancher.com/docs/rancher/v1.6/zh/kubernetes/ingress/ lvs, haproxy, nginx负载均衡器比较 ...
- Alpha冲刺2
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/9960487.html 作业博客:https://edu.cnblogs.com/campus/ ...
- Oracle数据库三种备份方案
Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/导入(Export/Import) 利用 ...