性能优化一: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 lock和vmystat两个视图中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视图列出当前系统中哪些对象正被锁定,其主要字段说明如下: