1、事务
事务是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。数据库服务器保证在事务范围内执行的操作完整且正确地提交至磁盘,否则数据库会复原至事务启动之前的状态。
一个逻辑工作单元要成为事务,必须满足所谓的ACID属性。ACID的具体含义如下:
1)A(Atomicity):操作序列要么完整的执行,否则什么都不做;
2)C(Consistency):一致性,事务执行后,保证数据库从一个一致性状态到另外一个一致性状态;
3)I(Isolation):隔离,一个事务的中间状态对其他事务不可见,即每个用户都感觉他们在单独使用数据库。隔离级别用来定义多大程度的隔离多个不同的事务;
4)D(Durability):持久性,事务的有效性,不会应用硬件或软件的失败而丢失。
2、并发控制
1)相关概念
i)隔离(+一致性) => 并发控制;
ii)多个事务可以访问或修改相同的资源;
iii)只要多个进程共享资源,就需要对访问进程进行排队控制;
iv)在进行并发控制时,数据库内部将生成多个并发事务访问资源的操作序列表,并且每一个事务内部的各个操作都需要序列化。
2)串行调度存在的问题
在串行调度中,采用操作序列,一个事务完成了再完成另外一个,即使两个事务T1、T2更新的是数据库中不同的对象。此种方式从并发和性能角度考虑,都不能很好的利用计算机资源。
为了改善性能,需要采用非串行调度,即允许事务并发执行,即一个事务内的操作可以在其他事务提交前开始执行。
3)并发调度的常见问题
i)脏读:事务T2读取到了事务T1没有提交的结果
例如如下的操作序列会导致脏读:
事务T1读取记录,然后更新记录;
事务T2读取了更新后的记录;
若T1后续操作失败,会导致更新的记录回滚,而同时事务T2已经使用了这个没有提交的值。
ii)不可重复读:事务T1中多个读操作返回不同的结果
事务T1读取一个对象;
事务T2读取并更新同一个对象;
事务T1再次读取同一个对象返回了不同的值。
iii)幻影读:如果事务T1在同样的情况下多次执行select读取的结果不同
事务T1从一个表中检索满足特定条件的记录返回m条记录;
事务T2往该表中insert/delete其他满足相同条件的记录;
事务T1再次以相同的条件检索该表的数据返回的数据记录不为m条。
3、锁机制
1)相关概念
i)用户可以锁定一个对象,可
Informix的事务、并发控制、锁机制、隔离级别
最新推荐文章于 2023-03-30 11:46:04 发布