0


性能优化一: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视图列出当前系统中哪些对象正被锁定,其主要字段说明如下:
在这里插入图片描述

标签: oracle 数据库

本文转载自: https://blog.csdn.net/m0_67929156/article/details/142170253
版权归原作者 @睡不醒的每天@ 所有, 如有侵权,请联系我们删除。

“性能优化一:oracle 锁的原则”的评论:

还没有评论