[20210315]理解db file parallel read等待事件4.txt --//上午的测试,自己有点奇怪的是前面看到的是 WAIT #140047000530088: nam='db file parallel read' ela= 212 files=1 blocks=39 requests=39 obj#=90881 tim=1615770668231443 --//后面变成了: WAIT #140047000530088: nam='db file scattered read' ela= 111 file#=4 block#=773 blocks=39 obj#=90881 tim=1615770668233113 --//开始不理解,后面想一下应该后面出现的db file scattered read,扫描的块是连续的,才会出现这样的情况。 1.环境 SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production SCOTT@book> show parameter db_file_multiblock_read_count NAME TYPE VALUE ----------------------------- ------- ------- db_file_multiblock_read_count integer 128 create table t pctfree 99 as select level id, rpad('ABC', 3500, 'X') vc from dual connect by level <= 500; create index i_t_id on t(id) ; exec dbms_stats.gather_table_stats(null, 'T', cascade=>true); 2.测试: alter system flush buffer_cache ; SCOTT@book> @ 10046on 12 Session altered. SCOTT@book> select /*+ index(t) */ max (substr(vc,1,2)) from t where id between 1 and 200; MAX ---- AB SCOTT@book> @ 10046off Session altered. ===================== PARSING IN CURSOR #140047000530088 len=78 dep=0 uid=83 oct=3 lid=83 tim=1615770668230603 hv=1658167056 ad='7bf671f0' sqlid='28mgrb1jdb7sh' select /*+ index(t) */ max (substr(vc,1,2)) from t where id between 1 and 200 END OF STMT PARSE #140047000530088:c=2000,e=1812,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=714684053,tim=1615770668230597 EXEC #140047000530088:c=0,e=48,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=714684053,tim=1615770668230764 WAIT #140047000530088: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=0 tim=1615770668230831 WAIT #140047000530088: nam='db file sequential read' ela= 12 file#=4 block#=3499 blocks=1 obj#=90882 tim=1615770668230924 WAIT #140047000530088: nam='db file sequential read' ela= 9 file#=4 block#=3500 blocks=1 obj#=90882 tim=1615770668230986 WAIT #140047000530088: nam='db file parallel read' ela= 212 files=1 blocks=39 requests=39 obj#=90881 tim=1615770668231443 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ WAIT #140047000530088: nam='db file sequential read' ela= 11 file#=4 block#=555 blocks=1 obj#=90881 tim=1615770668231562 WAIT #140047000530088: nam='db file parallel read' ela= 234 files=1 blocks=39 requests=39 obj#=90881 tim=1615770668231999 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ WAIT #140047000530088: nam='db file sequential read' ela= 11 file#=4 block#=717 blocks=1 obj#=90881 tim=1615770668232202 WAIT #140047000530088: nam='db file parallel read' ela= 208 files=1 blocks=39 requests=39 obj#=90881 tim=1615770668232613 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ WAIT #140047000530088: nam='db file sequential read' ela= 10 file#=4 block#=760 blocks=1 obj#=90881 tim=1615770668232803 WAIT #140047000530088: nam='db file scattered read' ela= 111 file#=4 block#=773 blocks=39 obj#=90881 tim=1615770668233113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WAIT #140047000530088: nam='db file sequential read' ela= 11 file#=4 block#=772 blocks=1 obj#=90881 tim=1615770668233402 WAIT #140047000530088: nam='db file scattered read' ela= 97 file#=4 block#=813 blocks=39 obj#=90881 tim=1615770668233694 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WAIT #140047000530088: nam='db file sequential read' ela= 10 file#=4 block#=812 blocks=1 obj#=90881 tim=1615770668233992 FETCH #140047000530088:c=2999,e=3244,p=202,cr=202,cu=0,mis=0,r=1,dep=0,og=1,plh=714684053,tim=1615770668234126 STAT #140047000530088 id=1 cnt=1 pid=0 pos=1 obj=0 op='SORT AGGREGATE (cr=202 pr=202 pw=0 time=3250 us)' STAT #140047000530088 id=2 cnt=200 pid=1 pos=1 obj=90881 op='TABLE ACCESS BY INDEX ROWID T (cr=202 pr=202 pw=0 time=49475 us cost=203 size=701000 card=200)' STAT #140047000530088 id=3 cnt=200 pid=2 pos=1 obj=90882 op='INDEX RANGE SCAN I_T_ID (cr=2 pr=2 pw=0 time=227 us cost=2 size=0 card=200)' WAIT #140047000530088: nam='SQL*Net message from client' ela= 241 driver id=1650815232 #bytes=1 p3=0 obj#=90881 tim=1615770668234568 FETCH #140047000530088:c=0,e=2,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,plh=714684053,tim=1615770668234610 WAIT #140047000530088: nam='SQL*Net message to client' ela= 1 driver id=1650815232 #bytes=1 p3=0 obj#=90881 tim=1615770668234640 *** 2021-03-15 09:11:11.508 WAIT #140047000530088: nam='SQL*Net message from client' ela= 3274193 driver id=1650815232 #bytes=1 p3=0 obj#=90881 tim=1615770671508880 CLOSE #140047000530088:c=0,e=10,dep=0,type=0,tim=1615770671508991 ===================== --//从跟踪文件可以发现出现3次db file parallel read,请求的次数39. --//很奇怪的是你后面还看到nam='db file scattered read' ela= 111 file#=4 block#=773 blocks=39 obj#=90881. 3.可以验证看看: SCOTT@book> select * from dba_extents where segment_name='T'; OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO ------ ------------ ------------ ------------------------------ ---------- ---------- ---------- ---------- ---------- ------------ SCOTT T TABLE USERS 0 4 552 65536 8 4 SCOTT T TABLE USERS 1 4 560 65536 8 4 SCOTT T TABLE USERS 2 4 672 65536 8 4 SCOTT T TABLE USERS 3 4 688 65536 8 4 SCOTT T TABLE USERS 4 4 696 65536 8 4 SCOTT T TABLE USERS 5 4 712 65536 8 4 SCOTT T TABLE USERS 6 4 720 65536 8 4 SCOTT T TABLE USERS 7 4 728 65536 8 4 SCOTT T TABLE USERS 8 4 736 65536 8 4 SCOTT T TABLE USERS 9 4 744 65536 8 4 SCOTT T TABLE USERS 10 4 752 65536 8 4 SCOTT T TABLE USERS 11 4 760 65536 8 4 SCOTT T TABLE USERS 12 4 3464 65536 8 4 SCOTT T TABLE USERS 13 4 3472 65536 8 4 SCOTT T TABLE USERS 14 4 3480 65536 8 4 SCOTT T TABLE USERS 15 4 3488 65536 8 4 SCOTT T TABLE USERS 16 4 768 1048576 128 4 --//768+128-1 = 895 --//file#=4 block#=773 blocks=39 obj#=90881 --//file#=4 block#=813 blocks=39 obj#=90881 --//也就是这段区域分配block是连续的,也就是当扫描区域连续时,等待事件变成了db file scattered read。 --//视乎还是按照读39块的方式,你还可以注意一个细节。 WAIT #140047000530088: nam='db file scattered read' ela= 111 file#=4 block#=773 blocks=39 obj#=90881 tim=1615770668233113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WAIT #140047000530088: nam='db file sequential read' ela= 11 file#=4 block#=772 blocks=1 obj#=90881 tim=1615770668233402 --//后面出现的db file sequential read等待事件block#=772,而前面的是db file scattered read是block#=773。 SCOTT T TABLE USERS 17 4 896 1048576 128 4 SCOTT T TABLE USERS 18 4 1024 1048576 128 4 SCOTT T TABLE USERS 19 4 1152 1048576 128 4 20 rows selected. --//从这里也可以得到一个结论,即使是INDEX RANGE SCAN回表,也有可能出现db file scattered read的情况。 4.使用strace跟踪看看。 SCOTT@book> @ spid SID SERIAL# PROCESS SERVER SPID PID P_SERIAL# C50 ---------- ---------- ------------------------ --------- ------ ------- ---------- -------------------------------------------------- 253 29 55745 DEDICATED 55746 18 10 alter system kill session '253,29' immediate; SCOTT@book> alter system flush buffer_cache ; System altered. SCOTT@book> select /*+ index(t) */ max (substr(vc,1,2)) from t where id between 1 and 200; MAX( ---- AB $ strace -f -p 55746 -e pread 2>&1 | tee | grep -v "8192$" Process 55746 attached - interrupt to quit pread(258, "\6\242\0\0\5\3\0\1r\\|\27\3\0\2\4\1\275\0\0\1\0\0\0\rc\1\0O\\|\27"..., 319488, 6332416) = 319488 pread(258, "\6\242\0\0-\3\0\1r\\|\27\3\0\2\4\1\275\0\0\1\0\0\0\rc\1\0O\\|\27"..., 319488, 6660096) = 319488 --//注意看读的数量不是8192.是319488,319488/8192 = 39. --//6332416/8192 = 773 --//6660096/8192 = 813 $ strace -f -p 55746 -e pread 2>&1 | tee | grep -A1 "319488$" pread(258, "\6\242\0\0\5\3\0\1r\\|\27\3\0\2\4\1\275\0\0\1\0\0\0\rc\1\0O\\|\27"..., 319488, 6332416) = 319488 pread(258, "\6\242\0\0\4\3\0\1r\\|\27\3\0\2\4\1\275\0\0\1\0\0\0\rc\1\0O\\|\27"..., 8192, 6324224) = 8192 pread(258, "\6\242\0\0-\3\0\1r\\|\27\3\0\2\4\1\275\0\0\1\0\0\0\rc\1\0O\\|\27"..., 319488, 6660096) = 319488 pread(258, "\6\242\0\0,\3\0\1r\\|\27\3\0\2\4\1\275\0\0\1\0\0\0\rc\1\0O\\|\27"..., 8192, 6651904) = 8192 --//6324224/8192 = 772 --//6651904/8192 = 812 --//信息也与跟踪转储一致。
[20210315]理解db file parallel read等待事件4.txt
来源:这里教程网
时间:2026-03-03 16:31:26
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle sqlldr工具功能测试
Oracle sqlldr工具功能测试
26-03-03 - SQLServer 2012复制订阅数据订阅过程
SQLServer 2012复制订阅数据订阅过程
26-03-03 - [oracle] 索引低效,导致read by other session等待事件
- 【SQL】SQL表连接方法方式介绍(Oracle/Postgresql)
【SQL】SQL表连接方法方式介绍(Oracle/Postgresql)
26-03-03 - Oracle 19c数据库体系结构-2
Oracle 19c数据库体系结构-2
26-03-03 - 数据库无法注册至监听服务解决办法
数据库无法注册至监听服务解决办法
26-03-03 - Oracle数据库启动过程及状态详解
Oracle数据库启动过程及状态详解
26-03-03 - 数据库常用的事务隔离级别都有哪些?都是什么原理?
数据库常用的事务隔离级别都有哪些?都是什么原理?
26-03-03 - 检查联机后的43 号文件信息:alter database datafile 43 online;
- DG Broker学习5(管理数据保护模式)
DG Broker学习5(管理数据保护模式)
26-03-03
