事务基础与并发控制
低頻约 35 分钟4 个术语过去问 14 题
本单元目标
- 能分成处理成功和失败两种情况,说明提交与回滚的区别。
- 能按各自保护的内容,区分ACID 特性的 4 种性质。
- 能区分防止多个处理同时访问同一数据而产生矛盾的排他控制,与因互相等待锁而发生的死锁。
- 能按阶段顺序说明两阶段提交如何让多个数据库的更新保持一致。
术语总表(4 个)
术语
事务(トランザクション)是把相关的多个更新处理归为一组,以全部生效或全部不生效之一结束的处理单位。
归组的处理全部正常结束后确定更新的操作叫提交(コミット),中途失败时取消更新、恢复到开始前状态的操作叫回滚(ロールバック)。为了能够撤销,DBMS 会把更新的历史记录在名为日志(ログ)的文件中。多个用户同时访问同一数据时结果可能出现矛盾,因此要实行排他控制(排他制御):给正在使用的数据加上锁(ロック),让其他处理等待。
类比就像只能把机票和酒店一起预订的套餐旅行。酒店满房的话机票也不订,两者都订到才算预订成功。
记法英语 transaction 原意是“交易”:交货和付款缺一不可,两者都完成,交易才算成立。
考点
- 常考提交(コミット)是在归组的处理全部正常结束时确定更新的操作。它与失败时恢复到开始前状态的回滚(ロールバック)作用相反。
- 常考排他控制(排他制御)是防止多个处理同时访问同一数据而产生不一致的机制,做法是给正在使用的数据加锁(ロック),在用完之前让其他处理等待。
- 常考如果不加锁就并行更新,两个处理读入同一个值后依次写入,只有后写入一方的结果会留下,先前的更新会丢失。
该术语的过去问 3 题 トランザクション →
ACID 特性(ACID特性)是用英文名称首字母表示的、事务为得到正确处理而应满足的 4 种性质。
原子性(原子性)指更新要么全部生效、要么全部不生效;一致性(一貫性)指处理前后数据始终满足既定条件(例如数量不会变成负数)。隔离性(独立性)指同时运行的多个事务不受彼此中间结果的影响;持久性(耐久性)指已提交的结果即使之后发生故障也不会丢失。
记法把 A、C、I、D 连起来就是英语 acid(酸)。打头的 Atomicity 来自 atom(不可再分的原子),联想到一连串更新不会被拆开、只留下一部分。
考点
- 常考原子性(原子性)是让一连串更新要么全部生效、要么全部不生效的性质,正对应事务(トランザクション)成功时确定、失败时复原的行为。
- 常考隔离性(独立性)是同时运行的处理不受彼此中间结果影响的性质,靠排他控制来保持:给正在使用的数据加锁,让其他处理等到该处理结束。
- 易混原子性是不留下提交前半途状态的性质,持久性(耐久性)是保护提交后的结果不受故障影响的性质,两者的区别在于保护的是提交之前还是之后。
该术语的过去问 2 题 ACID特性 →
死锁(デッドロック)是多个处理各自占有资源,同时等待对方释放其持有的资源,结果所有处理都无法继续推进的状态。
例如处理1锁定资源X、处理2锁定资源Y之后,如果处理1请求Y、处理2请求X,就会形成互相等待对方解锁的环。只要没有一方让步,这种等待就解不开,因此 DBMS 会采取让其中一个处理回滚、释放锁等方式来解除。
类比就像两个人各拿一根筷子,都在等对方那一根空出来,结果谁也吃不上饭。
记法dead(不动)加上 lock(锁)。互相锁住、僵在原地,看字面就能记住。
考点
- 常考死锁(デッドロック)的关键在于:每个处理都持有资源又在等待别的资源,而且这些等待互相连成了一个环。
- 常考锁要在读入数据之前加上,在写完结果之后再解除。这是为了不让其他处理在读入到写入之间插进来。
- 易混排他控制是为防止同时访问引起矛盾而设的机制,死锁则是使用锁的处理之间互相等待时可能发生的停滞状态。区别在于一个是目的所在的机制,一个是由此产生的问题。
该术语的过去问 3 题 デッドロック →
两阶段提交(2相コミットメント)是为使跨多个数据库的事务整体确定或整体取消,分准备和确定两个阶段推进提交的步骤。
统筹全局的协调者(調整役)在第1阶段询问各数据库是否已做好确定的准备,各数据库先把更新置于随时可以确定的状态,再答复可否。只有全部答复可以时,才在第2阶段指示确定;只要有一个不可以,就指示全部数据库回滚。这样就能避免某个站点已经确定、另一个站点却被取消的不一致。
类比就像团购:先等所有参与者都回复“能付款”,再一起扣款;只要有一个人付不了,就谁的钱也不扣。
记法日语名称里的“相”是 phase(阶段)的译词。第 1 相询问,第 2 相决定,把数字和动作配成对来记。
考点
- 易混在单个数据库内完成的更新,靠该数据库的 1 次提交就能确定;而两阶段提交(2相コミットメント)在确定之前,还要加入一个确认所有参与数据库都已准备完毕的阶段。
- 易混在第1阶段答复可以的数据库,此时也还没有确定。如果在第2阶段收到取消的指示,这个数据库同样要回滚。
该术语的过去问 1 题 2相コミットメント →
要点
- 事务是让一连串更新全部生效或全部不生效的单位,成功时提交,失败时回滚到开始前的状态。
- 多个处理同时访问同一数据可能产生矛盾(例如后写入的结果冲掉先前的更新),可以用加锁让其他处理等待的排他控制来防止。
- ACID 特性指原子性、一致性、隔离性、持久性这 4 种性质,例如隔离性是指同时运行的处理不受彼此中间结果的影响。
- 死锁是持有资源的同时等待对方资源而形成环的状态,可以通过让其中一方回滚、释放锁等方式解除。
- 两阶段提交中,协调者先从全部数据库收齐准备完毕的答复,再一齐指示确定或取消。
查看这个领域的全部过去问 →