資料庫中看到發生dead lock的競爭,看pmon的trace file有看到很多process是wait在block file#: 18 rdba: 0x048567af flg: 0x00080000 st: 0x04 mode: 0x02上,
如下所示:
waiting for block file#: 18 rdba: 0x048567af flg: 0x00080000 st: 0x04 mode: 0x02
deletion of process 4025b9bc988 pid=726 seq=2 unsuccessful
我們可以透過下面的方式找出block所在的object name.
這裡面很重要的是要將rdba值所對應的data file block找出來,我們之後才可以透過dba_extents來將object找出來.
而有關rdba的說明請參考eygle blog上的說明.
(ref:http://www.eygle.com/archives/2007/07/function_rdba_convert.html)
由於rdba值是一個16進位值,必須透過轉換將其轉換成10進位,轉換的方式亦請參考eygle blog文件.
(ref:http://www.eygle.com/archives/2004/06/oracle_howto_convert.html)
SQL> variable file# number
SQL> variable block# number
SQL> execute :file#:=dbms_utility.data_block_address_file(to_number('48567af','xxxxxxx'));
PL/SQL procedure successfully completed.
SQL> execute :block#:=dbms_utility.data_block_address_block(to_number('48567af','xxxxxxx'));
SQL> print file#
FILE#
----------
18
SQL> print block#
BLOCK#
----------
354223
透過dba_extents找出block_id所在的object.
SQL> select * from dba_extents;
OWNER SEGMENT_NAME PARTITION_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
DBDIA IND4_D0001 INDEX DBDIA_IDX 136 18 357897 8388608 1024 18
DBDIA IND_D0001 INDEX DBDIA_IDX 121 18 356873 8388608 1024 18
DBDIA IND3_D0001 INDEX DBDIA_IDX 125 18 355849 8388608 1024 18
DBDIA IND1_D0001 INDEX DBDIA_IDX 134 18 354825 8388608 1024 18
DBDIA IND5_D0001 INDEX DBDIA_IDX 127 18 353801 8388608 1024 18
DBDIA IND2_D0001 INDEX DBDIA_IDX 124 18 352777 8388608 1024 18
DBDIA IND3_D0001 INDEX DBDIA_IDX 124 18 351753 8388608 1024 18
DBDIA IND1_D0001 INDEX DBDIA_IDX 133 18 350729 8388608 1024 18
<略>
- Sep 04 Thu 2008 08:10
如何找出競爭激烈的object?
全站熱搜
留言列表
發表留言