跳到正文

事务基础与并发控制

低頻约 35 分钟4 个术语过去问 14 题

本单元目标

  • 能分成处理成功和失败两种情况,说明提交与回滚的区别。
  • 能按各自保护的内容,区分ACID 特性的 4 种性质。
  • 能区分防止多个处理同时访问同一数据而产生矛盾的排他控制,与因互相等待锁而发生的死锁。
  • 能按阶段顺序说明两阶段提交如何让多个数据库的更新保持一致。
术语总表(4 个)
术语一句话适用场景关键线索词
トランザクション把多个更新作为整体,要么全部生效、要么全部不生效的处理单位对数据库的一系列更新提交、回滚、日志
ACID特性事务应满足的 4 种性质的首字母衡量事务是否正确的标准原子性、一致性、隔离性、持久性
デッドロック持有资源的同时互相等待对方的资源,导致所有处理都无法推进的状态多个使用锁的处理同时运行等待形成环
2相コミットメント把跨多个数据库的更新,分准备和确定两个阶段统一起来的步骤跨多个数据库的更新协调者、准备、确定

术语

事务(トランザクション)是把相关的多个更新处理归为一组,以全部生效或全部不生效之一结束的处理单位。

提交回滚
执行时机归组的处理全部正常结束时归组的处理中途失败时
更新的处理确定更新,此后一直保留取消更新,恢复到开始前的状态

归组的处理全部正常结束后确定更新的操作叫提交(コミット),中途失败时取消更新、恢复到开始前状态的操作叫回滚(ロールバック)。为了能够撤销,DBMS 会把更新的历史记录在名为日志(ログ)的文件中。多个用户同时访问同一数据时结果可能出现矛盾,因此要实行排他控制(排他制御):给正在使用的数据加上锁(ロック),让其他处理等待。

类比就像只能把机票和酒店一起预订的套餐旅行。酒店满房的话机票也不订,两者都订到才算预订成功。

记法英语 transaction 原意是“交易”:交货和付款缺一不可,两者都完成,交易才算成立。

考点

  • 常考提交(コミット)是在归组的处理全部正常结束时确定更新的操作。它与失败时恢复到开始前状态的回滚(ロールバック)作用相反。
  • 常考排他控制(排他制御)是防止多个处理同时访问同一数据而产生不一致的机制,做法是给正在使用的数据加锁(ロック),在用完之前让其他处理等待。
  • 常考如果不加锁就并行更新,两个处理读入同一个值后依次写入,只有后写入一方的结果会留下,先前的更新会丢失。

该术语的过去问 3 题 トランザクション

ACID 特性(ACID特性)是用英文名称首字母表示的、事务为得到正确处理而应满足的 4 种性质。

首字母性质保护的内容
A (Atomicity)原子性更新要么全部生效,要么全部不生效
C (Consistency)一致性处理前后数据都满足既定条件
I (Isolation)隔离性同时运行的处理不受彼此中间结果影响
D (Durability)持久性已提交的结果即使发生故障也不会丢失

原子性(原子性)指更新要么全部生效、要么全部不生效;一致性(一貫性)指处理前后数据始终满足既定条件(例如数量不会变成负数)。隔离性(独立性)指同时运行的多个事务不受彼此中间结果的影响;持久性(耐久性)指已提交的结果即使之后发生故障也不会丢失。

记法把 A、C、I、D 连起来就是英语 acid(酸)。打头的 Atomicity 来自 atom(不可再分的原子),联想到一连串更新不会被拆开、只留下一部分。

考点

  • 常考原子性(原子性)是让一连串更新要么全部生效、要么全部不生效的性质,正对应事务(トランザクション)成功时确定、失败时复原的行为。
  • 常考隔离性(独立性)是同时运行的处理不受彼此中间结果影响的性质,靠排他控制来保持:给正在使用的数据加锁,让其他处理等到该处理结束。
  • 易混原子性是不留下提交前半途状态的性质,持久性(耐久性)是保护提交后的结果不受故障影响的性质,两者的区别在于保护的是提交之前还是之后。

该术语的过去问 2 题 ACID特性

死锁(デッドロック)是多个处理各自占有资源,同时等待对方释放其持有的资源,结果所有处理都无法继续推进的状态。

  1. 处理1锁定资源X
  2. 处理2锁定资源Y
  3. 处理1等待资源Y释放
  4. 处理2等待资源X释放

处理2也需要X而进入等待。等待形成一个环,两者都停住了。

4 / 4

例如处理1锁定资源X、处理2锁定资源Y之后,如果处理1请求Y、处理2请求X,就会形成互相等待对方解锁的环。只要没有一方让步,这种等待就解不开,因此 DBMS 会采取让其中一个处理回滚、释放锁等方式来解除。

类比就像两个人各拿一根筷子,都在等对方那一根空出来,结果谁也吃不上饭。

记法dead(不动)加上 lock(锁)。互相锁住、僵在原地,看字面就能记住。

考点

  • 常考死锁(デッドロック)的关键在于:每个处理都持有资源又在等待别的资源,而且这些等待互相连成了一个环。
  • 常考锁要在读入数据之前加上,在写完结果之后再解除。这是为了不让其他处理在读入到写入之间插进来。
  • 易混排他控制是为防止同时访问引起矛盾而设的机制,死锁则是使用锁的处理之间互相等待时可能发生的停滞状态。区别在于一个是目的所在的机制,一个是由此产生的问题。

该术语的过去问 3 题 デッドロック

2相コミットメント两阶段提交

在术语表中打开 2相コミットメント

两阶段提交(2相コミットメント)是为使跨多个数据库的事务整体确定或整体取消,分准备和确定两个阶段推进提交的步骤。

  1. 协调者请求各DB准备
  2. 各DB准备并答复可否
  3. 协调者确认全部答复
  4. 向全部DB指示确定或取消

第2阶段:全部可以就指示确定,只要有一个不可以,就向全部数据库指示取消。

4 / 4

统筹全局的协调者(調整役)在第1阶段询问各数据库是否已做好确定的准备,各数据库先把更新置于随时可以确定的状态,再答复可否。只有全部答复可以时,才在第2阶段指示确定;只要有一个不可以,就指示全部数据库回滚。这样就能避免某个站点已经确定、另一个站点却被取消的不一致。

类比就像团购:先等所有参与者都回复“能付款”,再一起扣款;只要有一个人付不了,就谁的钱也不扣。

记法日语名称里的“相”是 phase(阶段)的译词。第 1 相询问,第 2 相决定,把数字和动作配成对来记。

考点

  • 易混在单个数据库内完成的更新,靠该数据库的 1 次提交就能确定;而两阶段提交(2相コミットメント)在确定之前,还要加入一个确认所有参与数据库都已准备完毕的阶段。
  • 易混在第1阶段答复可以的数据库,此时也还没有确定。如果在第2阶段收到取消的指示,这个数据库同样要回滚。

该术语的过去问 1 题 2相コミットメント

「事务」与「两阶段提交」的区别

比较点事务两阶段提交
是什么作为整体处理的处理单位让跨多个数据库的单位得以确定的步骤
关键确定的方式如果在单个数据库内完成,1 次提交即可确定确认全部数据库准备完毕后,一齐确定
失败时通过回滚恢复到开始前的状态只要有一个不可以,就让全部数据库回滚

要点

  • 事务是让一连串更新全部生效或全部不生效的单位,成功时提交,失败时回滚到开始前的状态。
  • 多个处理同时访问同一数据可能产生矛盾(例如后写入的结果冲掉先前的更新),可以用加锁让其他处理等待的排他控制来防止。
  • ACID 特性指原子性、一致性、隔离性、持久性这 4 种性质,例如隔离性是指同时运行的处理不受彼此中间结果的影响。
  • 死锁是持有资源的同时等待对方资源而形成环的状态,可以通过让其中一方回滚、释放锁等方式解除。
  • 两阶段提交中,协调者先从全部数据库收齐准备完毕的答复,再一齐指示确定或取消。

确认题

从本单元的过去问中选 5 题

开始做确认题

查看这个领域的全部过去问