数据库事务中调度串行化、冲突可串行化、前趋图(优先图)

简介: 数据库事务中调度串行化、冲突可串行化、前趋图(优先图)

在多用户DBS中,如果多个用户同时对同一数据进行操作称为并发操作。并发操作使多个事务之间可能产生相互干扰,破坏事务的隔离性(Isolation)。DBMS的并发控制子系统负责协调并发事务的执行,保证数据库的一致性,避免产生不正确的数据。


通常数据库事务是并发执行的(如果你的数据库隔离级别非serializable)),但是这里需要注意两点:


必须保证事务并发执行的正确性;

必须用正确的方法调度执行事务的并发操作;

这里就引入了一个概念:调度。

【1】调度

① 调度定义

多个事务的读写操作按时间排序的执行序列:

T1:r1(A)w1(A)r1(B)w1(B)
T2:r2(A)w2(A)r2(B)w2(B)
Sc=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)


需要注意的是:

  • 调度中每个事务的读写操作保持原来顺序
  • 事务调度时不考虑
  • 数据库的初始状态
  • 事务的语义


② 调度方式

多个事务的并发执行存在多种调度方式:Serializable,Conflict-serializable,Avoid cascading abort和Strict。


严格的


在一个事务写入的值在其提交或者中止之前没有其他事务读或者写


避免级联中止的


如果事务仅读已提交事务修改的数据,那么是避免级联终止的。


串行调度(Serial schedule)


各个事务之间没有任何操作交错执行,事务一个一个执行。S=T1T2T3…Tn。


可串行化调度(Serializable schedule)


如果一个调度的结果与某一串行调度执行的结果等价,则称该调度是可串行化调度,否则是不可串调度。


冲突可串行化调度


如果调度中一对连续操作是冲突的,则意味着如果它们的执行顺序交换,则至少i改变其中一个事务的最终执行结果。


如果两个连续操作不冲突,则可以在调度中交换顺序。


一个调度S在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度S’,如果S’是串行的,称调度S为冲突可串行化的调度。


如果一个调度满足冲突可串行,则该调度是可串行化调度。但可串行化调度不一定满足冲突可串行。冲突可串行为可串行的充分条件。


实例如下图:

但是需要保证调度中每个事务读写操作保持原来顺序:

③ 冲突操作

标记语言如下:

Ri(X):事务Ti的读X操作(Read(X,t));
Wi(X):事务Ti的写X操作(Write(X,t))


同一事务的两个动作冲突:ri(X);wi(X),


不同事务对同一数据库元素的写冲突:wj(X);wi(X),


不同事务对同一数据库元素的读和写冲突:ri(X);wj(X),


这些都是冲突操作:r1(A) w1(A), r1(A) w2(A) , w2(A) r1(A) , w1(A) w2(A)。


在前趋图中忽略同一事务的动作冲突,但需要保证调度中每个事务的读写操作保持原来顺序。



冲突等价

如果S1可以通过非冲突事务交换转换为S2,则称S1,S2为冲突等价。


目标可串行化

冲突可串行化调度是可串行化调度的充分条件,不是必要条件。还有不满足冲突可串行化条件的可串行化调度,称为目标可串行化(view serializability)的调度。

有3个事务, L1和L2是目标等价的(view equivalence):

T1=W1(Y)W1(X)
T2=W2(Y)W2(X),
T3=W3(X)

调度L1=W1(Y)W1(X)W2(Y)W2(X) W3(X)是一个串行调度。

调度L2=W1(Y)W2(Y)W2(X)W1(X)W3(X)不满足冲突可串行化。

但是调度L2是可串行化的,因为L2执行的结果与调度L1相同,Y的值都等于T2的值,X的值都等于T3的值

④ 事务调度方式实例

事务序列如下所示:


T1:R(X), T2:R(X), T1:W(X), T2:W(X)

T1:R(X), T2:R(Y), T3:W(X), T2:R(X), T1:R(Y)

T1:R(X), T2:W(X), T1:W(X), T2:Abort, T1:Commit

T1:W(X), T2:R(X), T1:W(X), T2:Abort, T1:Commit

T2: R(X), T3:W(X), T3:Commit, T1:W(Y), T1:Commit, T2:R(Y), T2:W(Z), T2:Commit

其满足的调度方式如下:


Not serializable, not conflict-serializable, avoid cascading aborts; not strict.

Serializable, conflict-serializable, not avoid cascading aborts, not strict.

Serializable, conflict-serializable, avoid cascading aborts, not strict.

Not serializable, not conflict-serializable, not avoid cascading aborts, not strict.

Serializable, conflict-serializable, avoid cascading aborts, strict

【2】优先图(Precedence Graph)/前趋图

优先图用于冲突可串行的判断,优先图无环则是冲突可串行化。


优先图结构:

  • 结点:事务;
  • 有向边(Arc):Ti—>Tj,满足Ti<s Tj
  • 存在Ti中的操作A1和Tj中的操作A2,满足A1在A2前,并且A1和A2是冲突操作

优先图实例一:




优先图实例二:

优先图实例三:

Since the graph is acyclic schedule, a is conflict-serializable.T3 , T1 ,T2 is the equivalent serial schedule.


优先图实例四:

Graph is not acyclic. Therefore schedule b is not conflict-serializable.

目录
相关文章
|
20天前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
1月前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
4月前
|
SQL 关系型数据库 MySQL
使用关系型数据库事务的例子
【5月更文挑战第12天】本文介绍了设置MySQL事务的三种方式:全局、当前session和下一个事务,并提供了示例代码展示如何开始事务和设置隔离级别。还简述了引擎设置和数据源DSN格式。最后,讨论了SQL优化策略,包括选择合适的存储引擎、优化字段数据类型、建立索引、避免全表扫描等。
271 4
使用关系型数据库事务的例子
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
4月前
|
存储 关系型数据库 MySQL
了解如何在关系型数据库中处理事务
【5月更文挑战第12天】数据库事务确保数据的ACID特性,即原子性、一致性、隔离性和持久性。它们用于一组操作,要么全部成功,要么全部不执行,防止数据不一致。MySQL的InnoDB存储引擎严格支持事务。MySQL默认隔离级别为REPEATABLE READ
68 3
|
2月前
|
存储 SQL 关系型数据库
数据库事务:确保数据完整性的关键20
【7月更文挑战第20天】事务是数据库操作的基本逻辑单位,确保数据一致性。ACID原则包括:原子性(操作全成或全败),一致性(事务前后数据合法性),隔离性(并发操作互不影响),持久性(提交后更改永久保存)。MySQL的InnoDB引擎支持事务,通过undo log实现回滚,redo log确保数据持久化。开启事务可使用`BEGIN`或`START TRANSACTION`,提交`COMMIT`,回滚`ROLLBACK`。
157 70
|
15天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
31 0
|
2月前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中与事务隔离级别结合使用
乐观锁在分布式数据库中与事务隔离级别结合使用
|
1月前
|
缓存 关系型数据库 MySQL
MySQL调优秘籍曝光!从索引到事务,全方位解锁高可用秘诀,让你的数据库性能飞起来!
【8月更文挑战第6天】MySQL是顶级关系型数据库之一,其性能直接影响应用的高可用性与用户体验。本文聚焦MySQL的高性能调优,从索引设计到事务管理,逐一解析。介绍如何构建高效索引,如联合索引`CREATE INDEX idx_order_customer ON orders(order_id, customer_id);`,以及索引覆盖查询等技术。
66 0
|
2月前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之从OceanBase(OB)数据库调度数据到MySQL数据库时遇到连接报错,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。