oracle 锁等待怎么加,锁等待分析处理

1、 TX锁与行锁

TX锁不是行锁,一个事务不管修改了多少行,都只会有一个TX锁。TX锁算是行锁的代表,行锁上发生了等待,会表现为TX锁的等待。行锁是属于事务的,事务开始,行锁产生,事务结束,行锁也被释放。

2、 行级锁对应用的影响比较小,一般只会影响部份业务或某个特殊的进程。

3、  模拟重现TX锁

(1)会话181执行如下操作:

gyj@OCM>select distinct sid from v$mystat;

SID

----------

181

gyj@OCM>update t1 set name ='gyj111' where id=1;

1 row updated.

修改t1表中的id=1这行记录,不提交。

(2)会话179执行如下操作:

gyj@OCM>select distinct sid from v$mystat;

SID

----------

179

gyj@OCM>update t1 set name ='gyj111' where id=1;

修改t1表id=1这行记录,这里被阻塞

(3)使用以下脚本查找数据库中的行级锁信息:

gyj@OCM> col username for a10

gyj@OCM> col program for a25

gyj@OCM> col sid for 9999

gyj@OCM> col SERIAL# for 9999

gyj@OCM> col BLOCKING_INSTANCE for 99

2  from v$session where event='enq: TX - row lock contention';

SID SERIAL# USERNAME   PROGRAM                   STATUS   SQL_ID        BLOCKING_INSTANCE BLOCKING_SESSION

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

179     241 GYJ        sqlplus@ocm (TNS V1-V3)   ACTIVE   gxzu79ffmrp35                 1              181

(4)输出结果说明:

SID: TX锁等待的SID号

SERIAL#: TX锁等待进程的序列号

USERNAME: 数据库用户

PROGRAM: 进程程序名

STATUS: 进程状态

SQL_ID: 正在执行的SQL语句

BLOCING_INSTANCE :阻塞进程所在的实例

BLOCING_SESSION: 阻塞进程SID号

可以得到锁等待进程信息,及阻塞者的SID (注意在RAC中通过blocking_session得到的SID需要减去1,才是实际的SID) 。

4、 查找阻塞者进程信息 gyj@OCM> col event for a30

gyj@OCM> select sid,serial#,username,program,status,sql_id,event from v$session where sid='&sid';

Enter value for sid: 181

old   1: select sid,serial#,username,program,status,sql_id,event from v$session where sid='&sid'

new   1: select sid,serial#,username,program,status,sql_id,event from v$session where sid='181'

SID SERIAL# USERNAME   PROGRAM                   STATUS   SQL_ID        EVENT

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

181     236 GYJ        sqlplus@ocm (TNS V1-V3)   INACTIVE               SQL*Net message from client

输出结果说明:

SID:阻塞进程的SID号

SERIAL#:阻塞进程的序列号

USERNAME:数据库用户

PROGRAM:进程程序名

STATUS:进程状态

SQL_ID:正在执行的SQL语句

EVENT:阻塞进程的等待事件

上述进程的的STATUS为INACTIVE,参考处理流程,直接跳到第7步执行。

5、  如果阻塞者进程为ACTIVE状态,查找阻塞者进程正在执行的SQL语句

SQL_TEXT

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

update t1 setname='aaaaaaa' where id=1

6、  如果阻塞者进程为ACTIVE状态,查找阻塞者进程SQL语句执行计划

gyj@OCM> select * from table(dbms_xplan.display_cursor(‘gxzu79ffmrp35’));

PLAN_TABLE_OUTPUT

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

SQL_ID  f9mwduaxs47kk, child number 0

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

update t1 setname='aaaaaaa' where id=1

Plan hash value:2927627013

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

| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | UPDATE STATEMENT   |     |       |       |    3 (100)|          |

|   1 | UPDATE            | T1   |       |      |            |          |

|*  2 |  TABLE ACCESS FULL| T1   |     1 |   65 |     3   (0)| 00:00:01 |

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

PredicateInformation (identified by operation id):

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

2 - filter("ID"=1)

Note

-----

- dynamic sampling used for this statement(level=2)

23 rows selected.

7、 分析阻塞原因

TX锁阻塞原因一般有两种,一种是阻塞进程没有及时提交事务;另一种是阻塞进程SQL语句执行缓慢。对于第一种情况可找到相关进程结束进程事务,释放锁资源。第二种情况通过分析SQL语句执行计划,找到SQL执行缓慢的原因,提供优化建议,要求开发人员优化SQL语句。

8、 若情况紧急,可与项目经理和开发人员确认后终止阻塞者进程,释放锁资源。

9、 TM锁这里就不详细说了网上资料很多。

2.2、    DDL锁

1365254874_1701.png

1428933

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值