锁:
如果系统平时运行正常,突然停止不动,多半是被阻塞了(blocked),可以首先查看下v$lock这张视图:
select sid,type,id1,id2,lmode,request,block from v$lock l where l.block=1;
SID TYPE ID1 ID2 LMODE REQUEST BLOCK
4 TX 524319 1333 6 0 1 --当前持有lmod=6的会话阻塞其他会话
按照Oracle官方文档说明:如果某个SID的request列是一个非0值,那么它就是在等待一个锁,如果block列是1,这个SID就是在持有一个锁,并且阻塞
别人获得这个锁。锁的类型由TYPE字段定义,锁的模式由LMODE字段定义,ID1、ID2字段定义了这个锁的相关信息。
ID1、ID2构成了在事务中回滚段的位置,用处为,当其他操作需要读取这个数据块时,它会发现这个块上要读取的数据上是有活动的事务,,因此需要
到回滚段中去找它之前的内容。对于TM锁,ID1值就是加锁的段的对象,可以是一个表,也可以是一个表的分区,此时ID2一般为2.
Lock identifier #2 (depends on type)
---当lock type 为TM时,id1为DML-locked object的object_id
---当lock type 为TX时,id1为usn+slot,而id2为seq。
---当lock type为其它时,不用关注
TM锁 表级(段)共享锁 lmod=3持有 不允许用户对表做DDL操作
TX锁 行级排它锁 Row-X(SX)锁 lmod=6(X) 在提交前不允许做DML
锁的级别越高,限制越多。
表1 Oracle的TM锁类型
锁模式 锁描述 解释 SQL操作
0 none
1 NULL 空 Select
2 SS(Row-S) 行级共享锁,其他对象只能查询这些数据行 Select forupdate、Lock for update、Lock row share
3 SX(Row-X) 行级排它锁,在提交前不允许做DML操作 Insert、Update、Delete、Lock row share
4 S(Share) 共享锁 Createindex、Lock share
5 SSX(S/Row-X) 共享行级排它锁 Lock share row exclusive
6 X(Exclusive) 排它锁 Alter table、Drop able、Drop index、Truncate
锁是以数据块的一个属性存在的,即每个数据块本身就存储着自己数据块中数据的信息:ITL(Interested Transaction List),凡是这个数据块上有
活动的事务,信息就会记录在这里面供后续的操作查询,以保证事务的一致性。
TX并非都是在对数据修改的时候才会产生,只要需要维护事务一致性的时候,就需要用到这个锁。如分布式事务,一般来说通过dblink在几个数据库中
处理数据,因为是分布式的操作方式,所以需要一个事务的总协调者,这时,即使都是读取操作,依然需要一个TX锁来维护事务的一致性。
Latch:
是一种轻量级的锁,不会造成阻塞,只会造成等待。阻塞,是一种系统设计上的问题;等待是一种系统资源争用的问题。
两类最常用的Lacth争用:
共享池中的Latch争用;数据缓冲池中的Latch争用。
如果系统平时运行正常,突然停止不动,多半是被阻塞了(blocked),可以首先查看下v$lock这张视图:
select sid,type,id1,id2,lmode,request,block from v$lock l where l.block=1;
SID TYPE ID1 ID2 LMODE REQUEST BLOCK
4 TX 524319 1333 6 0 1 --当前持有lmod=6的会话阻塞其他会话
按照Oracle官方文档说明:如果某个SID的request列是一个非0值,那么它就是在等待一个锁,如果block列是1,这个SID就是在持有一个锁,并且阻塞
别人获得这个锁。锁的类型由TYPE字段定义,锁的模式由LMODE字段定义,ID1、ID2字段定义了这个锁的相关信息。
ID1、ID2构成了在事务中回滚段的位置,用处为,当其他操作需要读取这个数据块时,它会发现这个块上要读取的数据上是有活动的事务,,因此需要
到回滚段中去找它之前的内容。对于TM锁,ID1值就是加锁的段的对象,可以是一个表,也可以是一个表的分区,此时ID2一般为2.
Lock identifier #2 (depends on type)
---当lock type 为TM时,id1为DML-locked object的object_id
---当lock type 为TX时,id1为usn+slot,而id2为seq。
---当lock type为其它时,不用关注
TM锁 表级(段)共享锁 lmod=3持有 不允许用户对表做DDL操作
TX锁 行级排它锁 Row-X(SX)锁 lmod=6(X) 在提交前不允许做DML
锁的级别越高,限制越多。
表1 Oracle的TM锁类型
锁模式 锁描述 解释 SQL操作
0 none
1 NULL 空 Select
2 SS(Row-S) 行级共享锁,其他对象只能查询这些数据行 Select forupdate、Lock for update、Lock row share
3 SX(Row-X) 行级排它锁,在提交前不允许做DML操作 Insert、Update、Delete、Lock row share
4 S(Share) 共享锁 Createindex、Lock share
5 SSX(S/Row-X) 共享行级排它锁 Lock share row exclusive
6 X(Exclusive) 排它锁 Alter table、Drop able、Drop index、Truncate
锁是以数据块的一个属性存在的,即每个数据块本身就存储着自己数据块中数据的信息:ITL(Interested Transaction List),凡是这个数据块上有
活动的事务,信息就会记录在这里面供后续的操作查询,以保证事务的一致性。
TX并非都是在对数据修改的时候才会产生,只要需要维护事务一致性的时候,就需要用到这个锁。如分布式事务,一般来说通过dblink在几个数据库中
处理数据,因为是分布式的操作方式,所以需要一个事务的总协调者,这时,即使都是读取操作,依然需要一个TX锁来维护事务的一致性。
Latch:
是一种轻量级的锁,不会造成阻塞,只会造成等待。阻塞,是一种系统设计上的问题;等待是一种系统资源争用的问题。
两类最常用的Lacth争用:
共享池中的Latch争用;数据缓冲池中的Latch争用。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28258625/viewspace-1415754/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28258625/viewspace-1415754/