昨天有个session 运行查询 一直出现 gc current request 这个等待事件
该等待事件表示资源从远程实例读取到本地实例所花费的时间。出现该事件并不能说明什么问题,如果等待时间过长,可能表示内联网络存在问题或者有严重的块争用。
SQL> select name,parameter1,parameter2,parameter3 from v$event_name where name='gc current request';
NAME PARAMETER1 PARAMETER2 PARAMETER3
-------------------- -------------------- -------------------- --------------------
gc current request file# block# id#
该等待事件 p1 表示 文件号,p2表示块号,p3表示v$waitstat中的class
昨天的 p1=20009,p2=2915028 p3=33554433
于是作如下查询:
SQL> SELECT tablespace_name, file_name FROM dba_data_files WHERE file_id = 20009;
TABLESPACE_NAME FILE_NAME
------------------------------ -------------------------------------------------------------------------------
查询不到数据文件,于是更换查询条件:
SQL> SELECT tablespace_name, file_name FROM dba_temp_files f, v$parameter p WHERE p.name='db_files' AND f.file_id+p.value = 20009;
TABLESPACE_NAME FILE_NAME
------------------------------ --------------------------------------------------------------------------------
TEMP +DGDATA01/adw1d/tempfile/temp.596.683026963
p3我们可以这样转换:
SQL> select power(2,25)+1 from dual;
POWER(2,25)+1
-------------
33554433
SQL> select rownum,class from v$waitstat;
ROWNUM CLASS
---------- ------------------
1 data block
2 sort block
3 save undo block
4 segment header
5 save undo header
6 free list
7 extent map
8 1st level bmb
9 2nd level bmb
10 3rd level bmb
11 bitmap block
12 bitmap index block
13 file header block
14 unused
15 system undo header
16 system undo block
17 undo header
18 undo block
18 rows selected
p3表示等待的是data block,因为power函数后面加的是1
之后我又查看了等待事件的p1,p2,p3,发现p1变成了20011
SQL> SELECT tablespace_name, file_name FROM dba_temp_files f, v$parameter p WHERE p.name='db_files' AND f.file_id+p.value = 20011;
TABLESPACE_NAME FILE_NAME
------------------------------ --------------------------------------------------------------------------------
TEMP +DGDATA01/adw1d/tempfile/temp.655.715787593
内联网络应该不会出现问题,那么这个问题应该是等待临时文件有严重的争用,由于当时下班重忙,没有仔细检查,
现在写这篇博客,主要记录gc current request 等待事件的 p1,p2,p3转换方法,以便以后查看。