oracle 死鎖及鎖的導致cpu高、內存高的排查詳細過程

排查理由CPU高內存高

通過查詢視圖,找到被鎖住的對象v$locked_object,根據其locked_mode,判斷其鎖類型

select l.xidusn, l.object_id, o.owner, o.object_name, l.session_id, l.oracle_username, l.os_user_name, l.process, decode(l.locked_mode, 0, '',        1, 'NULL',        2, '(SS)',        3, '(SX)',        4, '(S)',        5, '(SSX)',        6, '(X)',        '???') locked_mode from v$locked_object l, dba_objects o where l.object_id = o.object_id

判斷查詢結果是否存在鎖

用以下的語句對視圖v$sqltext進行查詢,可以得到當前正在執行的SQL語句,以及執行SQL語句的session

select username, osuser, machine, terminal, program, 
sid, serial#, status, sql_address, sql_text
from v$session ss, v$sqltext sq
where type = 'USER'
and ss.sql_address = sq.address
order by ss.sid, ss.serial#, sq.piece

可以發現對同一表中的同一數據行進行更新的兩條SQL語句。

通過這兩條SQL語句,可以定位Java程序中導致問題的代碼

藉助於ORACLE的TRACE文件

Oracle發現死鎖後,會在alert_[SID].log文件中輸出如下的警告信息:ORA-00060: Deadlock detected.

並提示去查看相應的*.trc文件。通過分析*.trc文件可以看到死鎖的詳細情況

文件的位置在      select value from V$DIAG_INFO where name='Diag Trace';  

 cd /opt/app/BASE/oracle/diag/rdbms/data60/data601/trace/
 ls -lrt *.trc 


查看死鎖文件及原因


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章