insert,update和delete造成阻塞的示例
来源:互联网 发布:在淘宝上怎么注册店铺 编辑:程序博客网 时间:2024/04/29 20:35
1.update 产生锁示例:
session 1:
SQL> drop table t purge;
SQL> create table t(id int primary key);
Table created.
SQL> select sid from v$mystat where rownum=1;
SQL> drop table t purge;
SQL> create table t(id int primary key);
Table created.
SQL> select sid from v$mystat where rownum=1;
SID
----------
854
SQL> insert into t values(1);
----------
854
SQL> insert into t values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> update t set id=2 where id=1; --更新未提交
1 row updated.
session 2:
SQL> select sid from v$mystat where rownum=1;
SQL> select sid from v$mystat where rownum=1;
SID
----------
834
----------
834
SQL> update t set id=3 where id=1; --此时更新同条记录时SQL产生等待
session 3:
SQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (834,854) order by 1,2;
SQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (834,854) order by 1,2;
SID TY ID1 ID2 LMODE REQUEST BLOCK
---------- -- ---------- ---------- ---------- ---------- ----------
834 TM 91874 0 3 0 0
834 TX 655407 1648480 0 6 0
854 TM 91874 0 3 0 0
854 TX 655407 1648480 6 0 1
---------- -- ---------- ---------- ---------- ---------- ----------
834 TM 91874 0 3 0 0
834 TX 655407 1648480 0 6 0
854 TM 91874 0 3 0 0
854 TX 655407 1648480 6 0 1
SQL> select sid,event from v$session_wait where sid in (834,854);
SID EVENT
---------- ----------------------------------------------------------------
834 enq: TX - row lock contention
854 SQL*Net message from client
说明:
这里sid=854是session1,sid=834是session2;
TM是一个表级锁(段锁),表示此表的记录在修改时,不允许对表进行DDL操作;
TX是一个行级锁(事务锁),表示不允许对表修改的记录进行DML操作;
当TY=TM and ID2=0时,ID1的值为此表(段)的object_id;
当TY=TX and ID2<>0时,ID1+ID2构成了这个事务在回滚段中的位置;
LMODE=3表示一个表级共享锁,LMODE=6行级的排他锁(最高模式的锁);
REQUEST=6 表示当前会话正待等待一个LMODE=6 的锁,表明这个会话正在被阻塞;
block=1是表示这个会话正在阻塞其它会话;
---------- ----------------------------------------------------------------
834 enq: TX - row lock contention
854 SQL*Net message from client
说明:
这里sid=854是session1,sid=834是session2;
TM是一个表级锁(段锁),表示此表的记录在修改时,不允许对表进行DDL操作;
TX是一个行级锁(事务锁),表示不允许对表修改的记录进行DML操作;
当TY=TM and ID2=0时,ID1的值为此表(段)的object_id;
当TY=TX and ID2<>0时,ID1+ID2构成了这个事务在回滚段中的位置;
LMODE=3表示一个表级共享锁,LMODE=6行级的排他锁(最高模式的锁);
REQUEST=6 表示当前会话正待等待一个LMODE=6 的锁,表明这个会话正在被阻塞;
block=1是表示这个会话正在阻塞其它会话;
2.delete 产生锁示例:
session 1:
SQL> select * from t;
ID
----------
1
----------
1
SQL> delete from t where id=1; --删除SQL未提交
1 row deleted.
session 2:
SQL> delete from t where id=1; --此时删除同条记录时SQL产生等待
SQL> delete from t where id=1; --此时删除同条记录时SQL产生等待
session 3:
SQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (834,854) order by 1,2;
SQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (834,854) order by 1,2;
SID TY ID1 ID2 LMODE REQUEST BLOCK
---------- -- ---------- ---------- ---------- ---------- ----------
834 TM 91874 0 3 0 0
834 TX 655364 1648669 0 6 0
854 TM 91874 0 3 0 0
854 TX 655364 1648669 6 0 1
---------- -- ---------- ---------- ---------- ---------- ----------
834 TM 91874 0 3 0 0
834 TX 655364 1648669 0 6 0
854 TM 91874 0 3 0 0
854 TX 655364 1648669 6 0 1
SQL> select sid,event from v$session_wait where sid in (834,854);
SID EVENT
---------- ----------------------------------------------------------------
834 enq: TX - row lock contention
854 SQL*Net message from client
---------- ----------------------------------------------------------------
834 enq: TX - row lock contention
854 SQL*Net message from client
说明:
同update一样
同update一样
3.insert 产生锁示例:
session 1:
SQL> drop table t purge;
SQL> create table t(id int primary key);
Table created.
SQL> drop table t purge;
SQL> create table t(id int primary key);
Table created.
SQL> insert into t values(1); --插入未提交
1 row created.
1 row created.
session 2:
SQL> insert into t values(1); --此时插入有同样主键记录时SQL产生等待
SQL> insert into t values(1); --此时插入有同样主键记录时SQL产生等待
session 3:
SQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (834,854) order by 1,2;
SQL> select sid,type,id1,id2,lmode,request,block from v$lock where sid in (834,854) order by 1,2;
SID TY ID1 ID2 LMODE REQUEST BLOCK
---------- -- ---------- ---------- ---------- ---------- ----------
834 TM 91874 0 3 0 0
834 TX 262174 192335 6 0 0
834 TX 458776 193901 0 4 0
854 TM 91874 0 3 0 0
854 TX 458776 193901 6 0 1
---------- -- ---------- ---------- ---------- ---------- ----------
834 TM 91874 0 3 0 0
834 TX 262174 192335 6 0 0
834 TX 458776 193901 0 4 0
854 TM 91874 0 3 0 0
854 TX 458776 193901 6 0 1
SQL> select sid,event from v$session_wait where sid in (834,854);
SID EVENT
---------- ----------------------------------------------------------------
834 enq: TX - row lock contention
854 SQL*Net message from client
说明:
这里和update产生锁的情况不一样的是,会话2在持有一个LMODE=6的排他锁和等待一个LMODE=4的锁。
因插入的并不是同一条记录,会话2插入时的记录没被阻塞,而是对表的数据块头修改的阻塞,所以会话在请求一个LMODE=4的锁。
---------- ----------------------------------------------------------------
834 enq: TX - row lock contention
854 SQL*Net message from client
说明:
这里和update产生锁的情况不一样的是,会话2在持有一个LMODE=6的排他锁和等待一个LMODE=4的锁。
因插入的并不是同一条记录,会话2插入时的记录没被阻塞,而是对表的数据块头修改的阻塞,所以会话在请求一个LMODE=4的锁。
- insert,update和delete造成阻塞的示例
- 模拟insert,update和delete造成阻塞的示例
- INSERT ,UPDATE ,DELETE 语句的介绍及示例
- 创建INSERT、DELETE、UPDATE 触发器示例
- 创建INSERT、DELETE、UPDATE 触发器示例 .
- insert、update、delete的用法
- insert、delete及update 的提交和撤消
- SQL server触发器中 update insert delete 示例
- 最基本的用法---Insert,Update,Delete
- hibernate自定义的(insert,update,delete)语句
- SQL2005中常用的insert、update、Delete。
- SQL 表的Insert ,update ,delete 触发器
- 触发器 判断insert , update ,delete 的方法
- 带有OUTPUT的INSERT,DELETE,UPDATE
- SQLite的insert、delete、update操作
- 带有OUTPUT的INSERT,DELETE,UPDATE
- 带有OUTPUT的INSERT,DELETE,UPDATE
- dataadapter中insert、delete、update的使用方法
- 小米正在走向死亡
- 03-guess-boj
- MFC对文件的操作
- 浏览器无声音解决办法
- Windows如何找到域控制器
- insert,update和delete造成阻塞的示例
- POJ 1151(矩形面积并)
- 对android编译过程的理解
- 如何添加一个Android服务
- 数论笔记
- matlab2010a在mbuild时找不到vs2010的解决办法
- 虚拟对象的属性描述
- Oracle 11g安装中遇到的问题及解决方法
- html中走马灯相关参数的意义和设置