分类:
2009-03-19 10:18:08
表二:DB2数据库行锁的模式
#show all the switches
db2 get monitor switches
#switch-name:
BUFFERPOOL、LOCK、SORT、STATEMENT、TABLE、TIMESTAMP 和 UOW
#set the switches ON/OFF
db2 update monitor switches using table off
#DB2 snapshot 用于锁定位(管理视图)
db2 get snapshot for locks on lgxswfc
Select substr(tabschema,1,8) as tabschema, substr(tabname,1,15) as tabname,lock_object_type,
lock_mode, lock_mode_requested, agent_id_holding_lk
From sysibmadm.lockwaits
注:db2 +c为不自动提交(commit)SQL语句,也可以通过 db2 update command options using c off关闭自动提交
(autocommit,缺省是自动提交)
db2 +c insert into lgxswfc values(2)
+++++++++++++ExAMPLE+++++++++++
#session1
db2 +c insert into lgxswfc values(2)
+++
#session2
db2 select * from lgxswfc
#此时session2 挂起
+++
#session3
Select substr(tabschema,1,8) as tabschema, substr(tabname,1,15) as tabname,lock_object_type,
lock_mode, lock_mode_requested, agent_id_holding_lk
From sysibmadm.lockwaits
db2 FORCE APPLICATION(agent_id_holding_lk);
+++
总的来说,DB2的锁和Oracle的锁主要有以下大的区别:
1.Oracle通过具有意向锁的多粒度封锁机制进行并发控制,保证数据的一致性。其DML锁(数据锁)分为两个层
次(粒度):即表级和行级。通常的DML操作在表级获得的只是意向锁(RS或RX),其真正的封锁粒度还是在行级;DB2
也是通过具有意向锁的多粒度封锁机制进行并发控制,保证数据的一致性。其DML锁(数据锁)分为两个层次(粒度)
:即表级和行级。通常的DML操作在表级获得的只是意向锁(IS,SIX或IX),其真正的封锁粒度也是在行级;另外,
在Oracle数据库中,单纯地读数据(SELECT)并不加锁,这些都提高了系统的并发程度,Oracle强调的是能够"读"到
数据,并且能够快速的进行数据读取。而DB2的锁强调的是"读一致性",进行读数据(SELECT)时会根据不同的隔离
级别(RR,RS,CS)而分别加S,IS,IS锁,只有在使用UR隔离级别时才不加锁。从而保证不同应用程序和用户读取的数
据是一致的。
2. 在支持高并发度的同时,DB2和Oracle对锁的操纵机制有所不同:Oracle利用意向锁及数据行上加锁标志位
等设计技巧,减小了Oracle维护行级锁的开销,使其在数据库并发控制方面有着一定的优势。而DB2中对每个锁会
在锁的内存(locklist)中申请分配一定字节的内存空间,具体是X锁64字节内存,S锁32字节内存(注:DB2 V8之前
是X锁72字节内存而S锁36字节内存)。
3. Oracle数据库中不存在锁升级,而DB2数据库中当数据库表中行级锁的使用超过locklist*maxlocks会发生
锁升级。
4. 在Oracle中当一个session对表进行insert,update,delete时候,另外一个session仍然可以从Orace回滚
段或者还原表空间中读取该表的前映象(before image); 而在DB2中当一个session对表进
行insert,update,delete时候,另外一个session仍然在读取该表数据时候会处于lock wait状态,除非使用UR隔
离级别可以读取第一个session的未提交的值;所以Oracle同一时刻不同的session有读不一致的现象,而DB2在同一
时刻所有的session都是"读一致"的。
+++++++++++++ExAMPLE+++++++++++
用于监控和DB2疑难分析
非侵入式工具,对DB2的性能影响小
-applications -agents -transactions -bufferpools -logs -locks
-tablespaces -dynamic -static -fcm -mempools -memsets -dbmcfg
-dbcfg -catalogcache -sysplex -tcbstats -reorg -recovery -reopt -osinfo
db2 -db lgxswfc -locks