oracle行锁突然增多变慢,Oracle 学习之性能优化(十)锁

本文介绍了Oracle数据库的行锁机制,包括DML锁和TM锁,以及事务锁如何影响并发操作。通过实例展示了行锁的获取和释放,并分析了死锁产生的原因及解决方法。
摘要由CSDN通过智能技术生成

Oracle 学习之性能优化(十)锁

发布时间:2020-03-30 14:28:43

来源:51CTO

阅读:965

作者:lqding1980

锁(lock)是用于防止在访问相同的资源(包括用户对象、系统对象、内存、Oralce数据字典中的共享数据结构,最常见的是数据库表Table对象)时 ,事务之间的有害性 交互(存、取)的一种机制。

不同类型的锁,代表了当前用户是允许还是阻止其它用户对相同资源的同时存取,从而确保不破坏系统数据的完整性、一致性和并行性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

锁的分类DML锁:SELECT、INSERT、UPDATE、DELETE、MERGE操作

DDL锁:CREATE和ALTER语句操作

内部锁和闩:Oracle使用这些锁来包含内部数据结构,例如:Oracle查询生成的执行计划,执行计划会保存在库缓存中,当使用这个执行计划时,会对其加一个闩(latch)

DML锁

用于确保一次只能一个人修改某行数据。而且你正常处理这个表时,别人不能删除这个表。TX锁,事务发起第一个修改时,会得到一个TX锁(事务锁),而且会一直持有这个事务,直到事务结束(COMMIT或者ROLLBACK)。事务中修改或者select for update的每一行都会指向该事务的TX锁。

TM锁,用于确保在修改表内容时,表的结构不被改变。

下面举例说明

登录到scott用户,并确定session idSQL> grant select any dictionary to scott;

Grant succeeded.

SQL> conn scott/tiger

SQL> select sid from v$mystat where rownum=1;

SID

----------

37

SQL>

另开启一个会话,监控锁的使用情况SQL> set linesize 200

SQL> select * from v$lock where sid=37;

ADDR KADDR SID TY        ID1  ID2   LMODE    REQUEST CTIME    BLOCK

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

0000000090D8FC88 0000000090D8FCE0  37 AE        100    0       4  0   4810

SQL>

会话1执行更新操作SQL> update emp set ename=initcap(en

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值