Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1097804
  • 博文数量: 276
  • 博客积分: 10077
  • 博客等级: 上将
  • 技术积分: 2513
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-24 20:31
文章分类

全部博文(276)

文章存档

2020年(1)

2015年(5)

2012年(2)

2011年(6)

2010年(7)

2009年(224)

2008年(31)

我的朋友

分类:

2009-03-19 10:18:08

表一:DB2数据库表锁的模式  

表二: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

阅读(3296) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~