Oracle 10G and later
系统运行过程中可能遇到书写不规范的DML语句或for update等语句导致数据库出现大量enq: TX - row lock contention等待。 如果是当前系统的性能问题是可以通过查询Oracle的v$locked_object和dba_objects或v$session杀掉锁表会话解决故障。 而如果是历史的则可以通过awr、ash、addm等诊断工具,但是有些瞬间出现的性能问题则可能在awr、addm的报告中并不明显或者由于采样粒度无法获取短暂的时间内的性能问题, 此时则可以通过历史的ASH相关的数据来获取,下面以历史ASH分析锁表故障。
create table ash_tab as select * from dba_hist_active_sess_history
where SAMPLE_TIME between TO_TIMESTAMP('2022-07-24 13:00:00', 'YYYY-MM-DD HH24:MI:SS') and TO_TIMESTAMP('2022-07-24 13:20:00', 'YYYY-MM-DD HH24:MI:SS');
根据ASH表中数据生成数据库连接数时间分布图