read by other session等待事件

来源:这里教程网 时间:2026-03-03 12:13:39 作者:

read by other session发生的场景:  当查询数据时,Oracle要把block从硬盘读到buffer cache中。如果有两个或更多session同时读取同一个block数据,第一个session会将block读取到buffer cache,由于block尚未完全读取到buffer cache,就导致其他session处于"read by other session"等待下。这个是oracle 10g从oracle 9i的"buffer busy waits"中分离出来的,也是一种热块现象。 read by other session等待事件有三个参数,属于User I/O类的等待 :  SQL> select name,parameter1,parameter2,parameter3,wait_class from v$event_name where name = 'read by other session';  NAME                           PARAMETER1           PARAMETER2           PARAMETER3           WAIT_CLASS  ------------------------------ -------------------- -------------------- -------------------- -----------  read by other session          file#                block#               class#               User I/O    file#:要读取的数据块锁在数据文件的文件号  block#:要读取的起始数据块号  class#:块类型 可根据等待的file#、block#结合下面的sql获取热点块所在的segment: SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME, A.PARTITION_NAME FROM DBA_EXTENTS A WHERE FILE_ID = &FILE_ID AND &BLOCK_ID BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS – 1; 查询热点块对象: SELECT * FROM (  SELECT O.OWNER, O.OBJECT_NAME, O.OBJECT_TYPE, SUM(TCH) TOUCHTIME  FROM X$BH B, DBA_OBJECTS O  WHERE B.OBJ = O.DATA_OBJECT_ID  AND B.TS# > 0  GROUP BY O.OWNER, O.OBJECT_NAME, O.OBJECT_TYPE  ORDER BY SUM(TCH) DESC )  WHERE ROWNUM <= 10

相关推荐