暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle优化:锁冲突的发现处理步骤

oracleEDU 2017-10-24
682

本文以案例说明锁冲突的发现处理步骤。全部用SQL语句操作。

模拟锁冲突按案例

1 .打开一个会话,更新emp表事务,不提交。

session1

sqlplus as sysdba 

SQL> update scott.emp set sal=0 ;

2 .再打开另一个会话,删除表emp,发生锁冲突。

session 2 

sqlplus scott/oracle

SQL> delete from scott.emp ;

3. 查出等待类别,看等待次数和等待时间,等待次数少、时间久 一般有问题

SQL> select * from v$system_wait_class order by time_waited desc;

4 .再查一次

SQL> select * from v$system_wait_class order by time_waited desc;

5 .可见Application 执行次数少,但是时间长,变化率比较高

2381      104004(第一次查)

2388      112108(第二次查)

6 .首先定位大类:Application 

认为是应用程序的问题

依次考虑 大类--> 等待类 --> 小类

Application 的wait_class#=1

7 .找出等待类是1, 也就是 Application 的事件

SQL>  select event from V$SYSTEM_EVENT where wait_class#=1;

EVENT

---------------------------------

enq: RO - fast object reuse

enq: TX - row lock contention

SQL*Net break/reset to client

等待次数少,但是时间长

SQL> select event ,total_waits,time_waited from V$SYSTEM_EVENT where wait_class#=1;

EVENT            TOTAL_WAITS TIME_WAITED

----------------------- -------------- --------------

enq: RO - fast object reuse     17           9

enq: TX - row lock contention    2       64027

SQL*Net break/reset to client    1210      18

等待次数最少,但是时间最长的是enq: TX - row lock contention

定位问题是:enq: TX - row lock contention 

8 .发生这个事件:enq: TX - row lock contention 等待事件的名字,通过事件名字去找是谁产生了这个等待事件(会话信息)

SQL> select sid ,event,USERNAME,PROGRAM from v$session where event like'%enq%row%';

9 .找出SCOTT执行哪条语句发生等待

SQL> select sid ,username ,sql_id from v$session where sid=49;

10 .通过SQLid找出SQL语句

SQL> select sql_text from v$sql where sql_id='a3dt4jynh04k3';

SQL_TEXT

----------------------------

delete from scott.emp

结论:scott在执行delete from scott.emp 行锁冲突,而发生了等待。

11 .查找谁阻塞了scott

SQL> select SID, SERIAL#, USERNAME from V$SESSION where SID in (select BLOCKING_SESSION from V$SESSION);

kill掉阻塞的session,解决问题

SQL> alter system kill session '39,2628' immediate ;

如果要快速释放资源,找出进程

SQL> select spid from v$process where ADDR =(select PADDR  from v$session where sid=39 and SERIAL#=2628);

SPID

-----------

15475

$ kill -9 15475

以上就是查找处理锁冲突的标准流程。


最后修改时间:2021-04-28 20:17:45
文章转载自oracleEDU,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论