博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单演示 Oracle 数据库并发导致行级锁
阅读量:6364 次
发布时间:2019-06-23

本文共 1924 字,大约阅读时间需要 6 分钟。

本文内容

  • 软件环境
  • 简单演示 Oracle 数据库并发导致行级锁

本文简单演示并发导致的行级锁。并发是两个以上的用户对同样的数据进行修改(包括插入、删除和修改)。锁的产生是因为并发。没有并发,就没有锁。并发的产生是因为系统需要,系统需要是因为用户需要。

软件环境


  • Windows 2003 Server
  • Oracle 11g Release 1 (11.1)

简单演示 Oracle 数据库并发导致行级锁


        首先,打开一个会话 session 1,执行如下操作:

SQL> select distinct sid from V$mystat;
 
SID
----------
118
 
SQL> create table t (x int primary key);
 
表已创建。
 
SQL> insert into t values(1);
 
已创建 1 行。
 
SQL> update t set x=10 where x=1;
 
已更新 1 行。
 
SQL>

        先查看本次会话的 SID,然后创建一个表 t,只有一个名为 x 的字段,且该字段为主键,插入一条数据,并更新该数据。

        接下来,打开另一个会话 session 2:

SQL> select distinct sid from V$mystat;
 
SID
----------
137
 
SQL> update t set x=10 where x=1;

        此时,该会话被“卡”在这里不动。只是光标一直在闪……因为,session 2 被 session 1 阻塞。

        现在,查看锁定视图 V$LOCK。

SQL> select sid,type,id1,id2,lmode,request,block
2  from v$lock where sid in (118,137)
3  order by sid;
 
SID TYPE         ID1        ID2      LMODE    REQUEST      BLOCK
---------- ----- ---------- ---------- ---------- ---------- ----------
118 TM        128105          0          3          0          0
118 AE            99          0          4          0          0
118 TX        262174      34335          6          0          1
137 TM        128105          0          3          0          0
137 AE            99          0          4          0          0
137 TX        262174      34335          0          6          0
 
已选择6行。
 
SQL>

        说明:“TYPE”列表示锁的类型;“LMODE”列表示锁的模式;“ID1”和“ID2”列是锁的相关信息。“REQUEST”列是正在什么锁。

        SID=118 是第一个会话,SID=137 是第二个会话。第三行,第一个会话 BLOCK=1 表示这个会话正在阻塞其他会话,LMODE=6 表示锁的模式,即行级排他锁。第六行,第二个会话 REQUEST=6 表示当前会话正在等待一个 LMODE=6 的锁。注意,第三行和第六行的 ID1 和 ID2 列完全相同。因为它们指向统一资源,只不过一个是资源的拥有者(SID=118),一个是资源的等待者(SID=137)。

        通过这个视图,很容易发现所在——故障定位(trouble shooting)。会话 2 之所以被“卡”住,是因为会话 1 还没提交,而在这张表上,又恰好有要求列值唯一性约束。

        通过 SID 号,查看视图 V$SESSION 就可以确定用户信息。

SQL> select machine from v$session where sid in (118,137);
 
MACHINE
----------------------------------------------------------------
NUODE\LN
NUODE\LN
 
SQL>

        因为,两个会话是同一台机器,所以名字一样。

转载地址:http://dnama.baihongyu.com/

你可能感兴趣的文章
猫头鹰的深夜翻译:spring事务管理
查看>>
记一次使用Spring REST Docs + travis + github自动生成API接口文档的操作步骤(下)...
查看>>
1、集合 2、Iterator迭代器 3、增强for循环 4、泛型
查看>>
关于/var/run/docker.sock
查看>>
SCrapy爬虫大战京东商城
查看>>
用 JavaScript 实现链表操作 - 11 Alternating Split
查看>>
Laravel优秀扩展包整理
查看>>
日志分析之识别真假蜘蛛与处理办法
查看>>
回顾小程序2018年三足鼎立历程,2019年BAT火力全开
查看>>
太多脚本将会毁掉持续交付
查看>>
一地鸡毛 OR 绝地反击,2019年区块链发展指南
查看>>
C# 8新提案让泛型Attribute成为现实
查看>>
ASP.NET Core:简洁的力量
查看>>
关于AWS的Firecracker,技术人应该知道的十件事
查看>>
卢森堡大学发布RepuCoin系统,可破解区块链51%攻击
查看>>
国内云计算厂商众生相:四大阵营十几家企业生存盘点
查看>>
细说Unicode(一) Unicode初认识
查看>>
Node.js有了新的管理者
查看>>
虚拟研讨会:.NET的未来在哪里?
查看>>
Java 20年:历史与未来
查看>>