db2 v9.7 新特性cur_commit 能够实现未提交读新特性cur_commit 能够实现未提交读
db2 get db cfg|find "CUR_COMMIT"
当前已落实 (CUR_COMMIT) = ON
db2 update db cfg using cur_commit off
DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。
SQL1363W 未动态更改为立即修改而提交的一个或多个参数。对于这些配置参数,必须在所
有应用程序都与此数据库断开连接之后,更改才会生效。
db2 get db cfg|find "CUR_COMMIT"
当前已落实 (CUR_COMMIT) = DISABLED
C:\Users\Administrator>db2 force application all
DB20000I FORCE APPLICATION 命令成功完成。
DB21024I 此命令为异步的,可能未能立即生效。
---session 1 从tab2表中删除一条记录
C:\Users\Administrator>db2 +c "delete from javan.tab2 where id=3"
DB20000I SQL 命令成功完成。
C:\Users\Administrator>
---session 2 从tab2表中查 刚才删除的那条记录 会一直等待 知道锁定超时时间到
C:\Users\Administrator>db2 +c "select count(*) from javan.tab2"
SQL0911N 因为死锁或超时,所以当前事务已回滚。原因码为 "68"。 SQLSTATE=40001
C:\Users\Administrator>db2pd -db testdb -locks
Database Partition 0 -- Database TESTDB -- Active -- Up 0 days 00:07:59
Locks:
Address TranHdl Lockname Type Mode Sts Owner
Dur HoldCount Att ReleaseFlg rrIID
0x7FB71E80 2 02000800060000000000000052 Row ..X G 2 ----------看这里对那条记录id=3 的行 加了row 行级x 排他锁 和s锁是排斥的所以session 2查这条记录 会等待直到超时
1 0 0x00000020 0x40000000 0
0x7FB72380 2 41414141415A425A7F4760B841 Internal P ..S G 2
1 0 0x00000000 0x40000000 0
0x7FB72300 2 02000800000000000000000054 Table .IX G 2
1 0 0x00002000 0x40000000 0
现在我们启用db2 v9.7版本的 未提交读特性
db2 update db cfg using cur_commit on
DB20000I UPDATE DATABASE CONFIGURATION 命令成功完成。
SQL1363W 未动态更改为立即修改而提交的一个或多个参数。对于这些配置参数,必须在所有应用程序都与此数据库断开连接之后,更改才会生效。
C:\Users\Administrator>db2 get db cfg |find "CUR_COMMIT"
当前已落实 (CUR_COMMIT) = ON
C:\Users\Administrator>
C:\Users\Administrator>db2 connect to testdb
数据库连接信息
数据库服务器 = DB2/NT 9.7.1
SQL 授权标识 = ADMINIST...
本地数据库别名 = TESTDB
C:\Users\Administrator>db2 get db cfg|find "CUR_COMMIT"
当前已落实 (CUR_COMMIT) = ON
C:\Users\Administrator>
---session 1 删除id=1的记录
C:\Users\Administrator>db2 "select * from javan.tab2 where id=1"
ID NAME
----------- --------------------
1 1.25125888zjadolf
1 条记录已选择。
C:\Users\Administrator>db2 +c "delete from javan.tab2 where id=1"
DB20000I SQL 命令成功完成。
C:\Users\Administrator>
C:\Users\Administrator>db2pd -db testdb -locks
Database Partition 0 -- Database TESTDB -- Active -- Up 0 days 00:01:56
Locks:
Address TranHdl Lockname Type Mode Sts Owner
Dur HoldCount Att ReleaseFlg rrIID
0x7FB70980 2 41414141415A425A7F4760B841 Internal P ..S G 2
1 0 0x00000000 0x40000000 0
0x7FB72900 2 02000800040000000000000052 Row ..X G 2 ---一样的加了x row行级锁
1 0 0x00000020 0x40000000 0
0x7FB71E00 2 02000800000000000000000054 Table .IX G 2
1 0 0x00002000 0x40000000 0
---session 2 读取刚才删除id =2的记录
C:\Users\Administrator>db2 +c "select * from javan.tab2 where id=1"
ID NAME
----------- --------------------
1 1.25125888zjadolf
1 条记录已选择。
由于启用了未落实读 ,db2实现了类似oracle中undo 读的功能(虽然实现原理不一样)。
看一下ibm官方文档对 该新特性的描述:“当前已落实”(currently committed semantics,以后会简称 CC)新特性,
该新特性的显著特点是在游标稳定性(Cursor stability,以后会简称 CS)隔离级别时可以明显减少锁等待的出现,以及死锁的出现频率。
数据库配置参数 cur_commit
该数据库配置参数主要是用来控制游标稳定性扫描的行为,默认值为 ON,可选值为:
(1)ON :打开;
对于新创建的数据库,默认值是 ON,在此情况下,当你试图读取一个正在被其他应用程序修改的行时,将直接返回该行的当前已落实版本数据(也就是首次更改之前的值)。
(2)AVAILABLE:可用;
此值表示你的应用需要显式地请求“当前已落实行为”才能得到“当前已落实”结果。
(3)DISABLED:禁用;
如果数据库是从之前的版本升级而来,这个参数将被设置成 DISABLED,这是为了和以前版本的行为保持一致。如果你希望使用当前已落实来控制游标稳定性扫描的行为,需要将这个参数更改成 ON 。
需要注意的是,注册表变量 DB2_EVALUNCOMMITTED、DB2_SKIPDELETED 和 DB2_SKIPINSERTED 在启用 cur_commit 参数后会受到影响。在绑定(BIND)或预编译(PRECOMPILE)时对 CONCURRENTACCESSRESOLUTION 选项指定 USE CURRENTLY COMMITTED 或 WAIT FOR OUTCOME,那么注册表变量 DB2_EVALUNCOMMITTED、DB2_SKIPDELETED 和 DB2_SKIPINSERTED 将被忽略。
--附录
ORACLE Snapshot 隔离级别情况下的的堵塞情况
先出现的工作负载 \ 后出现的工作负载 读工作负载 写工作负载
读工作负载 否(不堵塞) 否(不堵塞)
写工作负载 否(不堵塞) 是(堵塞)
DB2 V9.7 之前的版本中使用 CS 隔离级别情况下的堵塞情况
先出现的工作负载 \ 后出现的工作负载 读工作负载 写工作负载
读工作负载 否(不堵塞) 可能
写工作负载 是(堵塞) 是(堵塞)
DB2 V9.7 中启用“当前已落实”的 CS 隔离级别情况下的堵塞情况
先出现的工作负载 \ 后出现的工作负载 读工作负载 写工作负载
读工作负载 否(不堵塞) 否(不堵塞)
写工作负载 否(不堵塞) 是(堵塞)
db2 v9.7 新特性cur_commit 能够实现未提交读新特性cur_commit 能够实现未提交读的更多相关文章
- [置顶] 老孟 DB2 V9.7 ESE(一)产品部署 基于centOS 6.4
本文安装系统CENTOS 6.4 DB2位数64 安装中涉及目录位置各位可自行定义 生产系统为安全和性能考虑,一般将DB2实例目录.日志目录.归档日志目录.表空间目录区分开,可建立/db2home / ...
- atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性
atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性 1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...
- [Android 新特性] 改进明显 Android 4.4系统新特性解析
Android 4.3发布半年之后,Android 4.4随着新一代Nexus5一起出现在了用户的面前,命名为从之前的Jelly Bean(果冻豆)换成了KitKat(奇巧).这个新系统究竟都有怎样的 ...
- 3.0.0 alpha 重磅发布!九大新功能、全新 UI 解锁调度系统新能力
2022 年 4 月 22 日,Apache DolphinScheduler 正式宣布 3.0.0 alpha 版本发布!此次版本升级迎来了自发版以来的最大变化,众多全新功能和特性为用户带来新的体验 ...
- 如何向Openstack社区提交一个新项目
前几天有个朋友问我:自己有一个idea不错的项目,也把基本的框架写好了,想贡献到Openstack社区,却不知道应该怎么做.正好之前我有过类似的经历,那么来分享一下我是如何向Openstack社区提交 ...
- “新浪UC”的后江湖时代------易名新浪SHOW重出江湖
说到新浪UC,相信很多老网民应该并不陌生,当年QQ放号收费让新浪UC火爆了好一阵子,而随着QQ的崛起,UC也就渐渐退出了即时通信市场,不过,这并不意味着新浪UC退出了历史舞台,因为目前炙手可热 ...
- Rendertron:谷歌 Chrome 新的 headless 模式又贡献了一个新的技巧
摘自:https://zhuanlan.zhihu.com/p/31670033 Rendertron:JavaScript Web 富应用的一个老问题是如何使这些页面的动态渲染部分可供搜索引擎检索. ...
- Git库搭建好之后,当要提交一个新的文件,需要做的是3个步骤
Git库搭建好之后,当要提交一个新的文件,需要做的是3个步骤 1.git add new.txt 2.git commit -m "add a new file" 3.git pu ...
- 人社部新职业,Panda Global发现区块链新职业榜上有名!
近日,为了助力新冠肺炎疫情的防控,扎实做好"六稳"工作,全面落实"六保"任务,促就业拓岗位,人力资源社会保障部联合市场监管总局.国家统计局近日正式向社会发布一批 ...
随机推荐
- mysql存储引擎的一点学习心得总结
首先我们应该了解mysql中的一个重要特性--插件式存储引擎,从名字就能够看出在mysql中,用户能够依据自己的需求随意的选择存储引擎.实际上也是这样.即使在同一个数据库中.不同的表也能够使用不同的存 ...
- 第三部分:Android 应用程序接口指南---第四节:动画和图形---第一章 属性动画及动画与图形概述
第1章 属性动画及动画与图形概述 Android提供了一系列强大的API来把动画加到UI元素中,以及绘制自定义的2D和3D图像中去.下面的几节将综述这些可用的API以及系统的功能,同时帮你做出最优的选 ...
- 微信小程序测试指南
[本文出自天外归云的博客园] 微信小程序本地部署测试方法 下载微信开发者工具 让小程序管理员将测试人员的微信号添加开发者权限 本地设置hosts为测试环境hosts 打开微信web开发者工具并扫码登录 ...
- python开发-与其他语言的比较
1.关于函数 1)不需要指定返回类型,不需要指定是否有返回值,每个函数都有返回值,没有的话,就返回None 2)参数也可以不指定类型,可以有默认参数,但是必须放到最后,调用的时候指定参数的值,和顺序无 ...
- MXNET:分类模型
线性回归模型适用于输出为连续值的情景,例如输出为房价.在其他情景中,模型输出还可以是一个离散值,例如图片类别.对于这样的分类问题,我们可以使用分类模型,例如softmax回归. 为了便于讨论,让我们假 ...
- [转]mysql大表更新sql的优化策略
看了该文章之后,很受启发,mysql在update时,一般也是先select.但注意,在Read Committed隔离级别下,如果没有使用索引,并不会锁住整个表, 还是只锁住满足查询条件的记录而已. ...
- 【iCore1S 双核心板_FPGA】例程一:GPIO输出实验——点亮LED
实验现象: 三色LED循环点亮. 核心源代码: //--------------------Module_LED-----------------------------// module LED( ...
- select理解
https://www.cnblogs.com/skyfsm/p/7079458.html
- svn常见错误解决
Svn冲突导致锁住的解决方案:错误码:svn: E155037: Previous operation has not finished; run 'cleanup' if it was interr ...
- shell-跳板机便捷增加用户及设置密码
我的需求: 因网络限制,某些客户机ssh到服务器都得使用跳板机进行转一下,每次帮开帐户,不麻烦不难,但总觉得还可以再优. 不多说,直接放shell.很简单 #!/bin/bash #test add ...