今天有点时间,试验了一下DB2的并发锁机制,结果,和MSSQL的差不多:
1、DB2的缺省行为,事务以可执行的SQL开始,以COMMIT或ROLLBACK结束;
2、DB2缺省是否提交,以工具的不同而不同,这也是DB2的特点,对外界环境依赖比较明显,比如:用户认证就是,依赖操作系统或第三方认证。
3、今天我的试验过程是这样:
(1)先启动DB2CLP,db2cmd->db2
(2)连接TEST数据库,connect to test
(3)创建一个试验表,create table test(id int,aa varchar(10))
(4)验证表结构,describe table test
(5)插入两行数据,insert into test values(1,'aaaa')
                   insert into test values(2,'bbbb')
(6)验证数据,select * from test
               h 历史命令;
               r n 运行第n条命令;
               e n编辑第n条命令;
(7)update test set aa='cccc' where id=1
(8)启动另一个DB2CLP,update test set aa='dddd' where id=1,结果没什么阻塞,大为震惊,都说ORACLE的锁独步天下,没想到DB2的锁也是独步天下啊。回头觉得不对劲,查了一下
DB2的文档,结果DB2是否自动提交依赖于接口或工具,那么DB2CLP的这个选项缺省是什么呢?
(9)DB2CLP下查各种命令选项,list command options;
(10)结果选项c 缺省为ON,打开的,意味着在DB2CLP中,缺省对SQL命令是自动提交的。
(11)把C 选项改为OFF,update command options using c off,注意在每个DB2CLP中都要改,因为这个命令只会影响到当前连接。
(12)修改完三个DB2CLP连接中的C 选项后,开始试验;
(13)第一个DB2CLP中,update test set aa='eeee' where id=1;
      第二个DB2CLP中,update test set aa='ffff' where id=1;
结果阻塞;然后在第三个DB2CLP中,update test set aa='GGGG' where id=2;
也是阻塞,说明db2不但阻塞了同行数据的修改,这是正常的,而且也阻塞了不同行但在一个
page页中的行的修改,看来它得锁模型也是和MSSQL一样,属于悲观模型。
这段时间把各种系统的锁模型进行了比较,结果发现,DB2和MSSQL比较相似的,之前,我对MSSQL的锁进行了更进一步的跟踪,发现MSSQL对未提交事务涉及的表是加表级锁的,这会阻塞其他事务对该事务涉及表的修改操作。同时,也会阻塞其他事务的读操作。
而对于ORACLE和MYSQL来说,是不会产生这种表或块级阻塞的,主要还是因为锁模型的不同,主要还是观念的原因吧,或者说是乐观和悲观的原因。谈不上谁好谁坏,大家只看到了并发度,而没看到乐观锁会给应用带来的坏处,就一味的说悲观锁不好,不可否认ORACLE等系统的乐观锁会带来系统性能上的好处,让大家用着会舒服,可应用上的处理就会麻烦些,这也是DB2,MSSQL始终不改变这点的原因,观念不同而已。

DB2默认的事务及并发锁机制的更多相关文章

  1. MySQL事务及事务隔离级别 锁机制

    什么是事务? 当多个用户访问同一份数据时,一个用户在更改数据的过程中可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态更改为另一个一致性状态,这样的操作过程就是事务.事务具有的AC ...

  2. MySQL基础篇(06):事务管理,锁机制案例详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.锁概念简介 1.基础描述 锁机制核心功能是用来协调多个会话中多线程并发访问相同资源时,资源的占用问题.锁机制是一个非常大的模块,贯彻MyS ...

  3. MySQL中的事务原理和锁机制

    本文主要总结 MySQL 事务几种隔离级别的实现和其中锁的使用情况. 在开始前先简单回顾事务几种隔离级别以及带来的问题. 四种隔离级别:读未提交.读已提交.可重复读.可串行化. 带来的问题:脏读.不可 ...

  4. ServiceStack.Redis常用操作 - 事务、并发锁_转

    一.事务 使用IRedisClient执行事务示例: using (IRedisClient RClient = prcm.GetClient()) { RClient.Add("key&q ...

  5. ServiceStack.Redis常用操作 - 事务、并发锁

    一.事务 使用IRedisClient执行事务示例: using (IRedisClient RClient = prcm.GetClient()) { RClient.Add("key&q ...

  6. Redis学习笔记~Redis并发锁机制

    回到目录 redis客户端驱动有很多,如ServiceStack.Redis,StackExchange.Redis等等,下面我使用ServiceStack.Redis为例,介绍一下在redis驱动中 ...

  7. Mysql事务,并发问题,锁机制

    .什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约束 ...

  8. Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)

    1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约 ...

  9. 【转】Mysql事务,并发问题,锁机制

    转自:http://www.cnblogs.com/fidelQuan/p/4549068.html 1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成 ...

随机推荐

  1. 01: RestfulAPI与HTTP

    1.1 RestfulAPI与HTTP简介 1.什么是RestfulAPI 1.REST直接翻译:表现层状态转移,实质就是一种面向资源编程的方法 2.REST描述的是在网络中client和server ...

  2. Android实践项目汇报(四)

    全国天气客户端 本周学习计划 添加修改功能,完成项目 实际完成情况 1.成功显示当天及后几天的天气信息 通过修改chaxun.java程序,比较JSON数据格式中JSONObject("to ...

  3. Android实践项目汇报(一)

    # 我要做的是Google天气客户端 一.Need(需求): 1. 功能性需求分析 天气预报客户端,顾名思义就是为用户提供实时准确的天气信息,方便用户出行生活.根据用户日常需求,软件实现后所达到的功能 ...

  4. 嵌入式C语言--面试题

    C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法.这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是 ...

  5. Java8中数据流的使用

    Code: @Data @ToString @NoArgsConstructor @AllArgsConstructor public class Employee { private Integer ...

  6. HDU1251 统计难题 (字典树模板)题解

    思路:模板题,贴个模板 代码: #include<cstdio> #include<cstring> #include<cstdlib> #include<q ...

  7. 【第三十八章】 springboot+docker(maven)

    回顾上一章的整个部署过程: 使用"mvn install"进行打包jar 将jar移动到与Dockerfile文件相同的文件夹下 编写Dockerfile文件 使用"do ...

  8. 【Android实验】组件通信Intent

    实验目的 [TOC] 了解使用Intent进行组件通信原理 掌握使用Intent启动Activity的方法 熟悉和掌握Android组件间通信的方式和技巧 实验要求 设计一个主Activity和一个子 ...

  9. 【Coursera】Security Introduction -Eighth Week(2)

    Review -Terminology(术语): Confidentiallity & Integrity 泄密 & 欺骗 Confidentiallity: Prevent unau ...

  10. 解决方案:c调用python,PyImport_Import或者PyImport_ImportModule总是返回为空

    下面c_python_utils.h是处理工具函数,test.cpp是测试程序,hello.py是python类 可是当我集成到项目中的时候,PyImport_Import总是返回为空,起初我以为是i ...