oracle

推荐列表 站点导航

当前位置:首页 > 数据库 > oracle >

Oracle 数据库针对表主键列并发导致行级锁简单演示

来源:网络整理  作者:  发布时间:2020-12-14 15:09
本文简单演示针对表主键并发导致的行级锁,锁的产生是因为并发。没有并发,就没有锁。并发的产生是因为系统需...



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

复制代码 代码如下:

表已创建。


MACHINE
软件环境
2 from v$lock where sid in (118,137)
•Oracle 11g Release 1 (11.1)
SQL> update t set x=10 where x=1;
NUODE\LN

SQL>
137
接下来,打开另一个会话 session 2:
首先,打开一个会话 session 1,执行如下操作:


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

SQL> update t set x=10 where x=1;

118
SQL> select distinct sid from V$mystat;
•软件环境

复制代码 代码如下:

SQL> create table t (x int primary key);

复制代码 代码如下:

SID
3 order by sid;


本文内容

Oracle 数据库针对表主键列并发导致行级锁简单演示

SQL> insert into t values(1);
----------
SQL> select machine from v$session where sid in (118,137);


--------------------------------------------------------------------------------
SQL>

已创建 1 行。
现在,查看锁定视图 V$LOCK。
----------


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

SQL> select distinct sid from V$mystat;

通过 SID 号,查看视图 V$SESSION 就可以确定用户信息。
已选择6行。
NUODE\LN

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

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

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

复制代码 代码如下:

先查看本次会话的 SID,然后创建一个表 t,只有一个名为 x 的字段,且该字段为主键,插入一条数据,并更新该数据。
说明:“TYPE”列表示锁的类型;“LMODE”列表示锁的模式;“ID1”和“ID2”列是锁的相关信息。“REQUEST”列是正在什么锁。

相关热词: oracle

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://www.juheyunku.com/sql/oracle/3812.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

Oracle 数据库针对表主键列并发导致行级锁简单演示

2020-12-14 编辑:



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

复制代码 代码如下:

表已创建。


MACHINE
软件环境
2 from v$lock where sid in (118,137)
•Oracle 11g Release 1 (11.1)
SQL> update t set x=10 where x=1;
NUODE\LN

SQL>
137
接下来,打开另一个会话 session 2:
首先,打开一个会话 session 1,执行如下操作:


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

SQL> update t set x=10 where x=1;

118
SQL> select distinct sid from V$mystat;
•软件环境

复制代码 代码如下:

SQL> create table t (x int primary key);

复制代码 代码如下:

SID
3 order by sid;


本文内容

Oracle 数据库针对表主键列并发导致行级锁简单演示

SQL> insert into t values(1);
----------
SQL> select machine from v$session where sid in (118,137);


--------------------------------------------------------------------------------
SQL>

已创建 1 行。
现在,查看锁定视图 V$LOCK。
----------


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

SQL> select distinct sid from V$mystat;

通过 SID 号,查看视图 V$SESSION 就可以确定用户信息。
已选择6行。
NUODE\LN

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

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

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

复制代码 代码如下:

先查看本次会话的 SID,然后创建一个表 t,只有一个名为 x 的字段,且该字段为主键,插入一条数据,并更新该数据。
说明:“TYPE”列表示锁的类型;“LMODE”列表示锁的模式;“ID1”和“ID2”列是锁的相关信息。“REQUEST”列是正在什么锁。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://www.juheyunku.com/sql/oracle/3812.shtml

相关文章

风云图片

推荐阅读

返回oracle频道首页