小白学习MySQL Day24-25 20240930-1001

一、事务 Transaction

1、定义

一个事务是由单个用户或应用程序程序执行的一个动作或一系列动作,

这些动作读取或更新数据库的内容。

A transaction is an action, or a series of actions, carried out by a single user or an application program, which reads or updates the contents of a database.

事务是数据库上的一个“逻辑工作单元” ‘logical unit of work’

• 每个事务都会在数据库中执行某些操作 Each transaction does something in the database

• 它的任何单独部分都无法实现任何有用或有趣的结果 

  No part of it alone achieves anything of use or interest

Two main issues to deal with:

(1)  Recovery 恢复: Failures of various kinds, such as hardware failures and system crashes

  • 数据完整性:事务是数据库操作的基本单位,它们要么全部成功,要么全部失败。当事务失败时(如由于硬件故障或系统崩溃),恢复机制能够确保数据库状态恢复到一致性和完整性状态,从而保护数据的完整性。
  • 故障恢复:数据库系统需要能够应对各种故障,包括硬件故障、软件错误、网络问题等。恢复机制通过备份和日志记录等手段,能够在故障发生后恢复数据库到最近的一致状态,从而最小化数据丢失和损坏的风险。

(2) Concurrent 并发: execution of multiple transactions 多个事务的并行执行

  • 提高性能:在现代数据库系统中,多个用户或应用程序可能同时访问和修改数据库。并发处理能够允许这些操作同时进行,从而提高系统的吞吐量和响应速度。
  • 数据一致性:并发事务可能会相互干扰,导致数据不一致。因此,并发控制机制(如锁、时间戳排序等)是确保多个事务在并发执行时能够正确交互、保持数据一致性的关键。

事务处理关注“恢复”和“并发”这两个问题,

是因为它们直接关系到数据库系统的可靠性和性能。

恢复机制能够保护数据的完整性,确保在故障发生时能够恢复数据库状态;

并发处理能够提高系统的性能,同时保持数据的一致性。

这两个问题的解决对于构建高效、可靠的数据库系统至关重要。

2、ACID特性

(1)原子性(Atomicity)

事务中的所有操作:All or Nothing 要么全部成功,要么全部失败,不会结束在中间某个环节。

(2)一致性(Consistency)

事务必须使数据库从一个一致性状态变换到另一个一致性状态

事务执行前后数据必须保持一致。

(3)隔离性(Isolation)

隔离性确保了一个事务在完全提交之前,其操作对其他事务或查询是不可见的。

数据库系统提供的隔离机制:避免了并发事务之间的干扰,确保了数据的一致性和完整性。

(4)持久性(Durability)

一旦事务被提交,它对数据库的修改就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

3、示例:转账操作

Atomicity - shouldn’t take money from A without giving it to B
 一个事务中的所有操作必须作为一个整体来执行,要么全部成功,要么全部失败。
如果:从A中扣款 但不向B中存款,
那么:该事务应该被视为失败,并回滚到事务开始之前的状态。
If the transaction fails after step 3 and before step 6, money will be “lost” leading to an inconsistent database state.
如果在第3步之后和第6步之前事务失败,那么资金将会“丢失”,从而导致数据库状态不一致。 系统应该确保部分执行的事务的更新不会反映在数据库中。 这里提到的“资金丢失”和“数据库状态不一致”是指,
在事务执行过程中,如果事务未能成功完成(即在某些步骤之后,但在最终提交之前 失败),
那么已经执行的部分更新(如从某个账户扣款但尚未向另一个账户存款)可能会被错误地保留在数据库中,导致数据库中的数据与预期不符。
为了避免这种情况,系统需要实现 事务的回滚机制,即当事务失败时,能够撤销已经执行的部分更新,确保数据库恢复到事务开始之前的一致状态。这样,即使事务未能成功完成,也不会对数据库造成不一致的影响。
The system should ensure that :
updates of a partially executed transaction are not reflected in the database
Consistency - money isn’t lost or gained 
 在事务完成后,系统的总金额应该保持不变,即A减少的金额应该等于B增加的金额。
事务T1:从账户A转账到另一个账户B。
事务T1的执行应该确保转账前后两个账户余额的总和保持不变。
The sum of A and B is unchanged by the execution of the transaction.
Isolation - other queries shouldn’t see A or B change until completion
 在事务完成之前,其他查询不应看到A或B的变化
Durability - the money does not go back to A
Once a transaction has completed, its changes are made permanent.
Even if the system crashes, the effects of a transaction must remain in place.

二、并发 Concurrency

1、Why Concurrency

大型数据库被许多人使用,数据库上需要运行许多事务,最好让它们能够同时运行。
若不允许并发,则事务将按顺序(sequentially)运行,将事务排成队列a queue of transactions,
长时间运行的事务(例如备份backups)将使其他事务长时间等待。

2、优势与功能

系统中允许多个事务并发运行。其优势包括:

(1)提高处理器(processor)磁盘的利用率(disk utilization)

        从而提升事务吞吐量(transaction throughput)

例如,当一个事务正在使用CPU时,另一个事务可以同时从磁盘读取数据向磁盘写入数据

one transaction can be using the CPU while another is reading from or writing to the disk

(2)缩短事务的平均响应时间:短事务无需在长事务之后等待。

reduced average response time for transactions:
short transactions need not wait behind long ones.

3、并发问题

为了并发运行事务,我们交错执行它们的操作

In order to run transactions concurrently we interleave their operations.
每个事务都会获得一部分计算时间
这会导致多种问题:丢失更新,未提交更新,错误分析
所有这些问题都源于隔离性的破坏  All arise because isolation is broken
(1)丢失更新 Lost Update

例如:两个事务 T1 和 T2 都读取数据项 X,都修改它,然后都写入。

最终只有 T2 的更改生效,X 的值增加了 5,而不是预期的不变。

(2)未提交更新 Uncommitted Update

例如: T1 修改 X 后写入,但随后被 ROLLBACK,T2 看到了 T1 对 X 的更改,在 T1 回滚时更改应被撤销,但 T2 看到了不应看到的更改。

(3)不一致分析 Inconsistent Analysis

例如: T1 从 X 取 5 并加到 Y 上,但 T2 只看到了对 X 的操作,导致分析结果不一致。

4、调度 Schedules

(1)定义

调度 是 数据库管理系统 对多个并发事务的操作执行顺序的一种安排

sequence of operations from multiple transactions.

(2)组成

一组并发事务的操作序列组成。保留了每个单独事务中操作的顺序

例如,有事务T1执行一些数据库操作(如查询数据、更新数据等),

事务T2也同时执行一些不同的数据库操作,这些操作组合在一起就形成了一个调度。

(3)重要特性
保留操作顺序

对于每个单独的事务,其内部操作的顺序是被保留的

例如,事务T1可能是先读取某个表中的数据,然后对数据进行修改,最后将修改后的数据写回表中。在调度中,T1的这些操作必须按照这个顺序出现,不能出现先写回数据然后再读取的情况。

其他并发事务如T2、T3等,它们各自的操作顺序在调度中也会被严格遵循。这就保证了每个事务自身逻辑的正确性。

决定并发执行方式

调度决定了这些并发事务的操作是如何在时间上交错执行的。

不同的调度方式会导致不同的结果,有些调度可能会导致并发问题,

而有些合理的调度则可以避免这些问题,确保数据库的一致性和正确性。

例如,通过合理安排事务T1和T2对同一数据项的读和写操作顺序,可以避免数据不一致的情况发生。

(4)调度方式
1.串行调度 Serial schedule

每个事务依次执行,前一个事务完成所有操作并提交后,后一个事务才开始执行。

A serial schedule is a schedule where operations of each transaction are executed consecutively without any interleaved operations from other transactions
每个事务的操作都连续执行,没有任何来自其他事务的操作穿插其间
(each transaction commits before the next one is allowed to begin )
每个事务提交后,才允许下一个事务开始  One transaction after another
2.非串行调度 Non-serial Schedule

事务的操作是穿插进行的。

交错调度(Interleaved Schedule)是非串行调度(Non-serial Schedule)的子集。

(5)示例
定义两个事务 T1 和 T2:
T1 是从账户 A 向账户 B 转账 50 英镑,T2 是从账户 A 向账户 B 转账账户 A 余额的 10%。
T1 和 T2 各自的操作都是一个完整的逻辑单元,保证了转账操作前后账户余额的一致性。
A serial schedule in which T1 is followed by T2 :
A serial schedule where T2 is followed by T1 :
Schedule 3 is a non-serial schedule, but it is equivalent to Schedule 1:
Order of Read and Write 读写顺序
• If two transactions only read a data item, they do not conflict and order is not important.
• If two transactions either read or write completely separate data items, they do not conflict and order is not important.
• If one transaction writes a data item and another either reads or writes the same data item,
the order of execution is important (for preventing interference). They have conflict.
• 如果两个事务仅读取一个数据项,它们不会发生冲突,并且顺序并不重要。
• 如果两个事务读取或写入完全不同的数据项,它们不会发生冲突,并且顺序并不重要。
• 如果一个事务写入一个数据项,而另一个事务读取或写入同一个数据项,
  那么执行顺序就很重要(以防止干扰)。它们之间存在冲突。
(6)可串行化 Serialisability 

一个非串行调度,如果能产生与某个串行执行相同的结果,则是可串行化的。

A non-serial schedule is serialisable if it produces the same results as some serial execution

目标是找到允许事务并发执行且互不干扰的非串行调度。

• The objective of serialisability is to find non-serial schedules that allow transactions to execute concurrently without interfering with one another.
(7)冲突可串行化 Conflict Serialisability

如果一个调度中的事务存在冲突,但该调度仍然是可序列化的(即等价于某个串行调度),则称该调度为冲突可序列化。

A schedule is conflict serialisable if transactions in the schedule have a conflict but the schedule is still serializable (equivalent to some serial schedule).
冲突可序列化调度( Conflict Serialisable Schedules
是并发控制( Concurrency Control 的主要关注点
冲突可序列化调度 允许操作交错进行,同时保证其行为与串行调度一致 (特点与功能)
they allow for interleaving and at the same time
they are guaranteed to behave as a serial schedule
重要问题:
• 给定一个调度,如何确定它是否是冲突可序列化的?
• 如何构造冲突可序列化调度?
• 使用优先图 Precedence Graphs 判断一个调度是否是冲突可串行化的
   如果优先图包含环,则调度不是冲突可串行化的。
(8)优先图 Precedence Graphs

一种用于判断事务调度是否冲突可序列化的工具 To determine if a schedule is conflict serializable

节点 node:在优先图中,每个节点代表一个事务。

有向边 directed edge

如果事务Ti中的某个操作A1与事务Tj中的某个操作A2存在冲突,并且A1在A2之前发生,

则从Ti 到 Tj 绘制一条有向边Ti → Tj。

冲突操作包括:

读写冲突:一个事务读取另一个事务写入的数据

写写冲突:两个事务尝试写入同一数据

构建优先图

根据给定的事务调度,构建包含所有事务及其冲突关系的优先图。

Steps:
1. Create a node for each transaction.
2. Create a directed edge Ti   → Tj: 
        • If Tj  reads the value of an item written by Ti.
        • If Tj  writes a value into an item after it has been read by Ti.
        • If Tj  writes a value into an item after it has been written by Ti.
检测环

检查优先图中是否存在环。contains a cycle = the schedule is not conflict serializable.

如果存在环,则意味着存在无法避免的冲突,该调度不是冲突可序列化的。

如果图中无环,则可以通过重新排序事务来得到一个冲突可序列化的调度。

示例:

• The precedence graph can help us identify whether lock is needed for a certain resource. Lock prevents other transaction from accessing the same resource

三、事务管理器 The Transaction Manager

事务管理器 确保ACID(原子性、一致性、隔离性、持久性)属性得到执行,

安排事务的操作 It schedules the operations of transactions

1、确保原子性

使用COMMIT 和 ROLLBACK

(1)COMMIT 事务成功结束

事务的更改应保存并对其他事务可见;同时,将内存中的数据更改。写入数据库文件。

COMMIT signals the successful end of a transaction.
        • Any changes made by the transaction should be saved.
        • These changes are now visible to other transactions.
        • Writes the data change in the memory to the DB file.
(2)ROLLBACK事务不成功结束

事务的更改应撤销,就像事务从未发生过。

ROLLBACK signals the unsuccessful end of a transaction.
        • Any changes made by the transaction should be undone.
        • It is now as if the transaction never existed.

2、确保并发事务的一致性和隔离性

使用锁

保留日志,以确保在系统故障时数据的持久性

未完待续......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值