新闻详情

新闻详情

首页 / 资讯中心 / 详情

达梦事物特性及MVCC

发布时间:2026/10/1 16:01:47来源:尧图网络
达梦事物特性及MVCC
一 支持的事物隔离达梦几种隔离级别都支持默认的隔离级别是读已提交。隔离级别\数据库达梦未提交读支持已提交读支持默认可重复读支持可串行化支持隔离级别 \ 解决脏读不可重复读幻读未提交读可能可能可能已提交读不可能可能可能可重复读不可能不可能可能可串行化不可能不可能不可能二 相关验证2.1 读未提交查看当前的隔离级别select isolation from v$trx;1表示为默认的读已提交0为读未提交3为可重复读与可串行读。查看当前T1表中的数据新开会话修改当前会话隔离级别为读未提交。SQL SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;在另一个会话中插入一行新数据不用提交回到会话1中查看数据会话1此时的会话1能够查到会话2没有提交的数据。2.2 读已提交读已提交是达梦的默认隔离级别只能查询到其他事物提交之后的数据。新开一个会话查看当前的隔离级别。select isolation from v$trx;构建T2表插入一行数据新开一个会话插入一行数据不提交。回到会话1查看是查询不到新插入的数据的。在会话2中提交后返回会话1查看会话1能看到添加的数据能够查看到了。2.3 可重复读构建新表T3并插入新的数据。新开一个会话并设置隔离为可重复读。SQL SET TRANSACTION ISOLATION LEVEL repeatable read ;操作已执行已用时间: 7.290(毫秒). 执行号:1501.SQL SELECT isolation FROM V$TRX;行号 ISOLATION---------- -----------1 3在当前会话中修改一行数据的值但是不提交。此时会话1已经正常修改。新开一个会话2并设置隔离为可重复读。在会话2中查看T3表的数据能看到还是修改之前的。此时在会话1中提交数据返回会话2再次查看。会话2看到的还是修改之前的。其他会话修改并提交的数据不会影响当前会话的读取结果。这保证了在同一个事务中多次读取同一数据时能够得到相同的结果。2.4 可串行读验证过程与结果跟可重复度类似可串行读要求消除不可重复读取和幻像读现象本身查询不会增加任何代价但是当串行化事物更新或者删除数据时其他事物会被当前事物阻塞只有当串行化事物提交或者回滚后才会释放报错“串行化事物被打断”。创建新表插入数据。SQL create table t4 (id number(10),name char(10));操作已执行已用时间: 94.853(毫秒). 执行号:2101.SQL insert into t4 values(1,AA);影响行数 1已用时间: 3.777(毫秒). 执行号:2102.SQL commit;操作已执行已用时间: 2.794(毫秒). 执行号:2103.SQL select * from t4;行号 ID NAME---------- -- ----------1 1 AA已用时间: 2.977(毫秒). 执行号:2104.新开会话1设置隔离级别为可串行读SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;操作已执行已用时间: 1.634(毫秒). 执行号:2301.SQL SELECT isolation FROM V$TRX;行号 ISOLATION---------- -----------1 3已用时间: 0.197(毫秒). 执行号:2302.更新新表数据但是不提交新开一个会话2设置隔离级别为可串行读。查看T4表数据此时还是修改之前的数据在会话1中提交会话2查看还是修改之前的数据。此时在会话1中再更新一下数据不要提交。SQL update t4 set nameCC where id1;影响行数 1已用时间: 3.637(毫秒). 执行号:3006.在会话2中也修改此行发现会话卡住。在会话1中commit或者rollback之后这边会话才能结束。此时会话2出现串行化事物被打断MVCC机制达梦数据库为用户提供了两种MVCC模式通过参数TRX_VIEW_MODE控制1.基于回滚记录的MVCCTRX_VIEW_MODE0数据行包含事务TID和版本指针RPTR使得记录间单向连接形成链式版本结构。事务根据当前活动事务的视图依据链式版本结构构成可见的记录集合[]。2.基于时间戳的MVCCTRX_VIEW_MODE1全局维护一个大数组CMTARRCommit Array长度由参数TRX_CMTARR_SIZE控制单位百万。事务在启动时获取一个时间戳SNAP_CMTSEQ提交时将CMTARR中对应位置事务号的值设置为当前时间。数据版本的可见性通过比较SNAP_CMTSEQ和CMTSEQ来判断如果SNAP_CMTSEQ CMTSEQ则数据版本可见否则不可见。默认为基于时间戳的MVCC。1、进行多版本读时这个视图的使用方式是这样的在形成活动事务视图TRX_VIEW时一个事务还收集当前最下活动事务号MIN_ACTIVE_ID以及全局下一个事务号NEXT_ID。这样一个事务在读一条记录时就可以进行如下的比对记录事务ID大于等于下一个事务ID记录不可见记录事务ID等于自身事务ID记录可见记录事务ID小于当前最小已激活事务ID记录可见记录事务ID不在事务视图中记录可见记录事务ID在事务视图中记录不可见对于可见的记录则取这条记录为最终版本对于不可见的记录则通过链式版本继续向这条记录的过往版本进行上述的比对直到找到可见的版本或不取这条记录。2、DM数据库提供给用户第二种MVCC方式也是当前版本DM数据库的默认MVCC方式即基于时间戳的MVCC。这种MVCC的实现方式是全局只维护一个大数组CMTARR长度一般在千万级DM数据库令事务在启动时将这个数组中对应位置事务号上的数据CMTSEQ置为0而在事务提交时则将这个位置上的数据CMTSEQ置为当前的时间。这样的话事务或SQL启动时只需要获取一个当前的时间戳SNAP_CMTSEQ再与记录ID在CMTARR对应位置上的时间戳比对就可得出可见与否了。具体比对方式如下SNAP_CMTSEQ CMTSEQ可见SNAP_CMTSEQ CMTSEQ不可见这个大数组的长度可以由静态参数TRX_CMTARR_SIZE控制单位百万。这个参数设置 越大内存消耗越多单位时间内事务完成数量大时可将此参数值设大。DM在这种MVCC策略下对于“长事务”也有对应的处理方案。所谓“长事务”就是事务号下一个事务号-数组长度/2的事务即当前的下个事务即全局最新的事务与这个长事务间隔超过了CMTARR数组长度的一半也就是执行时间超长以至于在其执行期间由大量新事务启动的事务。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

深度学习故障检测算法源码实战:模型选型与落地避坑指南 2026/10/1 17:23:16

深度学习故障检测算法源码实战:模型选型与落地避坑指南

简介:工业设备在运行中持续产生时间序列数据,故障常表现为瞬时突变、缓慢漂移或未知异常。传统阈值规则难以覆盖复杂工况,而深度学习技术如1D-CNN、LSTM和自编码器为故障检测提供了不同路径:1D-CNN擅长捕捉局部冲击模式&#xff0…

阅读更多 →
WinForm Ribbon 控件源码解析:从界面美化到深度换肤实战 2026/10/1 17:23:15

WinForm Ribbon 控件源码解析:从界面美化到深度换肤实战

简介:面向 C# WinForm 开发者的 Ribbon 控件完整源码包,基于 .NET 平台实现,旨在帮助中高级开发者掌握 Office 风格界面组件的设计思路与工程落地方法。压缩包共 212 个文件,约 487KB,以 126 个 C# 源码文件为核心&…

阅读更多 →
BERT中文情感分析实战:从源码解读到模型微调落地 2026/10/1 17:23:15

BERT中文情感分析实战:从源码解读到模型微调落地

简介:基于Python实现BERT情感分析模型的课程设计资料包,面向自然语言处理初学者、高校相关专业学生以及需要快速搭建情感分析demo的开发者。项目使用正向、无情感、负向三类倾向性共1万多条语料微调BERT模型,迭代3次后在3000余条测试集上达到…

阅读更多 →
基于PINN的微分方程求解:PyTorch实现与避坑指南 2026/10/1 17:23:15

基于PINN的微分方程求解:PyTorch实现与避坑指南

简介:基于PINN的微分方程求解Python代码包,面向科研人员、工程师和拥有一定Python基础的学习者,系统展示物理信息神经网络求解常微分方程与偏微分问题的完整流程。内容覆盖常微分方程组、扩散方程、泊松方程、拉普拉斯方程、洛伦兹系统以及欧…

阅读更多 →
C# SQLite3工业级增删改查实战指南 2026/10/1 17:23:15

C# SQLite3工业级增删改查实战指南

简介:本资源是一份面向C#初学者与.NET开发者的SQLite3数据库操作实战Demo,聚焦轻量级本地数据库在桌面应用中的增删改查实践。项目完整封装了连接管理、参数化查询、事务处理及CRUD辅助类,帮助开发者快速掌握System.Data.SQLite在实际项目中的…

阅读更多 →
Suntime 在 LuatOS 中的应用与开发实践:从 Air8101 到 AirUI 的完整落地 2026/10/1 17:23:08

Suntime 在 LuatOS 中的应用与开发实践:从 Air8101 到 AirUI 的完整落地

1. 从 Air8101 到 AirUI:Suntime 时间应用到底解决什么问题 Suntime 是 OpenLuat 生态里一个专门做日出日落时间计算的模块,跑在 LuatOS 上,配合 AirUI 轻量化图形框架,能在 Air8101 这类工业引擎模组上做出一个完整的「日出日落时…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉