达梦事务管理之事务隔离级别

目录

1.DM事务隔离级别

1.1读提交隔离级

1.2读未提交隔离级

1.3串行化隔离级

1.4隔离级别表

2.测试

2.1读未提交隔离级

2.2串行化隔离级


本文第1部分介绍了达梦数据库的3种事务隔离级别,第2部分通过测试观察不同级别之间的区别。

1.DM事务隔离级别

        DM数据库支持三种事务隔离级别:读未提交、读提交和串行化。其中,读提交是DM数据库默认使用的事务隔离级别。

1.1读提交隔离级

        DM 数据库的读提交隔离可以确保只访问到已提交事务修改的数据,保证数据处于一致

性状态,能够满足大多数应用的要求,并最大限度的保证系统并发性能。

        用户可以在事务开始时使用以下语句设定事务为读提交隔离级:

SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

1.2读未提交隔离级

        读未提交隔离级别是最不严格的隔离级别。实际上,在使用这个隔离级别时,有可能发生脏读、不可重复读和幻像。一般来说,读未提交隔离级别通常只用于访问只读表和只读视图,以消除可见性判断带来的系统开销,提升查询性能。

        用户可以在事务开始时使用以下语句,设定事务为读未提交隔离级:

SQL> SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

        此外,DM 还允许用户在 SELECT 语句的末尾加上 WITH UR 以指定当前查询语句的隔离级为读未提交,即允许脏读,并在该语句结束时自动恢复为原来的隔离级。

1.3串行化隔离级

        在要求消除不可重复读取或幻读的情况下,我们可以设置事务隔离级为串行化。

        用户可以在事务开始时使用以下语句设定事务为串行化隔离级:

SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

1.4隔离级别表

        在 SQL-92 标准中,定义了四种隔离级别:读未提交、读提交、可重复读和串行化。每种隔离级别下对于读数据有不同的要求,下表中列出四种隔离级别下系统允许/禁止哪些类型的读数据现象。其中“Y”表示允许,“N”表示禁止。

1. 脏读(DirtyRead

所谓脏读就是对脏数据的读取,而脏数据所指的就是未提交的已修改数据。

2. 不可重复读(Non-RepeatableRead

一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读。如果

一个事务在读取了一条记录后,另一个事务修改了这条记录并且提交了事务,再次读取记录

时如果获取到的是修改后的数据,这就发生了不可重复读情况。

3. 幻读(PhantomRead

一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其

查询条件的新数据,这种现象就称为幻读

2.测试

2.1读未提交隔离级

读未提交隔离级允许脏读。下面我们通过实验来观察。

1.准备测试数据

create table tb_test_uncommit (
id  int,
c1  varchar(30)
);

在会话1(会话号145566328)中,插入1条数据,不执行commit

SQL> SELECT '当前会话id:'||sessid||',当前事务id:'||id  FROM  V$TRX  t where T.SESS_ID=sessid;
SQL> insert into tb_test_uncommit values(1,'uncommit测试');

2.在新会话中测试读现象

1)新会话的ID是:139960573195272

SQL> SELECT SESSID;

2)设置读未提交隔离级

SQL> SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SQL> select t.* from tb_test_uncommit t;

查询到了其他事务未提交的数据,发生了脏读现象

3)设置读提交隔离级

SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> select t.* from tb_test_uncommit t;

未发生脏读现象

4)设置串行化隔离级

SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SQL> select t.* from tb_test_uncommit t;

未发生脏读现象

2.2串行化隔离级

        “串行化”与默认的“读提交”隔离级的区别在于“不可重复读”和“幻读”现象。

        举个例子:事务A查询表TB1中c1=1的数据有1条,且c2字段值是’aaa’,事务A未结束,此时事务B修改了TB1中c1=1的数据,将c2更新为’bbb’,事务B执行commit。之后,事务A第2次查询表TB1中c1=1的数据,这时看到c2的值仍然是’aaa’。这是因为串行化隔离级禁用了“不可重复读”。具体情况看下面的测试:

1.准备数据

create table tb1
(
c1 int,
c2 varchar(10)
);

INSERT INTO TB1 VALUES(1,'aaa');
commit;

2.设置串行化隔离级别,在事务A中查询数据

SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 
SQL> SELECT '当前会话id:'||sessid||',当前事务id:'||id  FROM  V$TRX  t where T.SESS_ID=sessid;
SQL> select * from TB1 where c1=1;

3.会话B修改数据,并提交

SQL> SELECT '当前会话id:'||sessid||',当前事务id:'||id  FROM  V$TRX  t where T.SESS_ID=sessid;
SQL> update TB1 set c2='bbb' where c1=1;
SQL> commit;

4.在事务A中第2次查询数据

SQL> SELECT '当前会话id:'||sessid||',当前事务id:'||id  FROM  V$TRX  t where T.SESS_ID=sessid;
SQL> select * from TB1 where c1=1;

        我们看到,B事务修改c2为‘bbb’后执行了commit,事务A看到的值还是'aaa',这是因为串行化隔离级禁用了“不可重复读”。

        幻读现象的测试步骤同上,可以将事务B中的UPDATE改为INSERT,插入几条ID值为1的数据,观察是否有幻读现象。

本文结束!

参考文档: 《DM8系统管理员手册》

日期:20240903

<think>好的,我现在需要处理用户关于复合材料频散曲线计算方法及软件仿真的问题。首先,我得理解用户的需求。他们可能是在研究复合材料的波动特性,比如声学或弹性波传播,想要知道如何计算频散曲线,以及用什么软件进行仿真。频散曲线显示的是波速随频率变化的情况,对复合材料设计和分析很重要。 接下来,我需要确定用户问题中的关键点:复合材料、频散曲线、计算方法、分析、软件仿真。可能用户需要了解不同的计算方法,比如解析法、数值法(如有限元、边界元),以及各种仿真软件如COMSOL、ANSYS、ABAQUS的应用。 然后,我得考虑如何组织信息。根据用户的要求,回答需要分步骤或方法,每个部分换行,避免使用第一人称和步骤词汇。还要确保引用内容不集中在末尾,而是分散在相关部分。此外,需要检查是否需要数学公式或代码,用户提到如果有的话,必须用正确的格式。比如,频散方程可能有公式,如$c_p = \omega / k$,其中c_p是相速度,ω是角频率,k是波数。 关于软件仿真部分,需要列出常用的软件,并简要说明它们的应用方法和特点。比如COMSOL的波动模块,ANSYS的模态分析,或者专用工具如Disperse。同时,可能需要提到计算步骤,如建模、材料定义、边界条件设置、求解和后处理。 然后,生成相关问题。需要确保问题基于原始内容和回答,可能包括如何选择合适的方法,实验验证的方法,或不同软件之间的比较。 现在,需要验证是否有遗漏的信息,比如是否覆盖了主要的计算方法和软件,是否解释了频散曲线在复合材料中的应用,以及是否有实际的操作步骤或注意事项。同时,确保没有使用被禁止的格式,如第一人称或步骤词汇,引用分散,代码和公式正确标记。 最后,检查相关问题的部分是否符合要求,至少三个,用正确格式,基于用户的问题和回答内容。比如,可能的问题涉及方法比较、实验验证、软件教程、各向异性的影响等。</think>针对复合材料频散曲线的计算分析,主要通过理论建模和软件仿真两种方式实现。以下为具体方法及工具分类说明: **理论计算方法** 1. **传递矩阵法** 建立复合材料的层间传递矩阵模型,通过求解特征方程$det(\mathbf{T} - e^{ikd}\mathbf{I}) = 0$获得频散关系。适用于层状结构分析,需处理复数特征值问题。 2. **谱有限元法** 将波动方程离散为频域形式,构建刚度矩阵$\mathbf{K}(\omega) - \omega^2\mathbf{M}$,求解特征频率对应的波数$k$。适合复杂几何结构,计算量随频率增加而增大。 3. **各向异性Christoffel方程** 对于纤维增强复合材料,通过弹性常数矩阵$\mathbf{C}_{ijkl}$构建Christoffel方程: $$(C_{ijkl}n_jn_l - \rho c^2 \delta_{ik})p_k = 0$$ 求解相速度$c$频率关系,需处理复杂的本构关系。 **软件仿真工具** ```python # COMSOL波动模块示例代码 model = Model() model.component("comp1").physics("solidmech").feature("f1").set("Frequency", "1000[Hz]") model.study("std1").feature("freq").set("plist", "range(1000,1000,10000)") ``` 1. **COMSOL Multiphysics** - 使用波动模块建立层状模型 - 设置各向异性材料参数 - 进行频率扫描求解特征频率 2. **ANSYS Mechanical** - 通过Modal分析获取固有频率 - 使用Harmonic Analysis计算频响函数 - 结合APDL脚本实现参数化扫描 3. **Disperse专业软件** - 内置多层复合材料模型库 - 自动生成Lamb波频散曲线 - 支持横观各向同性材料分析 **关键参数设置注意事项** - 材料坐标系需纤维方向对齐 - 阻尼系数采用Rayleigh阻尼模型$C = \alpha M + \beta K$ - 网格尺寸应满足$\lambda_{min}/8$精度要求 - 边界条件建议设置无限元或完美匹配层(PML)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值