性能优化一:oracle 锁的原则


锁的原则

1、只有被修改时,行才会被锁定。

2、当条语句修改了一条记录,只有这条记录上被锁定,在Oracle数据库中不存在锁升
3、当某行被修改时 ,它将阻塞别人对它的修改。
4、当一个事务修改一行时.将在这个行上加上行锁(TX) , 用于阻止其它事务对相同行
5、读永远不会阻止写。
6、读不会阻塞写,但有唯一-的一 个例外,就是select …for. update。
7、写永远不会阻塞读。
8、当一行被修改后 , Oracle通过回滚段提供给数据的一致性读。

查看具体会话阻塞过程

会话session1:update 表

update itpux set name='20240912' where id='5';--session 1 更新成功 但未提交(未commit)

会话session2: update 表

update itpux set name='2024' where id='5';--session 1 更新成功 但未提交   session 2 继续更新时被阻塞  

在这里插入图片描述

当会话seesion1进行事务操作的情况下,未对相关的事务进行提交或者回退,导致session2进行事务操作的时候被阻塞需要等待session1,需要提交或者回退释放资源session2才能正常进行事务操作。

根据上述情况,看看数据库内部lock机制的加锁情况:

会话session1中查看此会话的sid:

select  distinct sid  from v$mystat  -- session 1的sid

查看TM表级锁和TX行级锁的情况 V l o c k 和 v lock和v lockvmystat两个视图中sid是保持一致的

select  *   from  V$lock t where t.type in('TX','TM')-- 锁的视图查看有那些锁记录


根据上面两个视图中查到的sid可以在dba_objects通过事务的查询到具体那个事务的阻塞情况和具体那个表

select  *   from dba_objects where t.object_id='33'

v$mystat

在这里插入图片描述

当前用户的各种统计信息sid就是session的id(也就是当前用户),STATISTIC#就是统计量的编号(用来唯一确定统计量的名称)

DBA_OBJECTS 视图
在这里插入图片描述

数据字典视图,表示用户可以访问的所有对象。它描述了存储在每个数据库中的所有用户可见对象,包括类型、表、索引、存储过程、视图和序列等
通过Oracle数据字典视图,以查找对象的拥有者创建日期等信息,监控数据库中各种对象的状态和属性。通过这个视图可以看到一个用户所有拥有的所有对象,方便dba进行检测。

$lock视图

列出当前系统持有的或正在申请的所有锁的情况
在这里插入图片描述

在这里插入图片描述

oracle中视图比较多,需要在漫长的学习和工作中应用掌握

v$locked_object视图:

v$locked_object视图列出当前系统中哪些对象正被锁定,其主要字段说明如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值