精华内容
下载资源
问答
  • 2021-08-27 15:53:38

    并发控制概述
    1.事务
    2.数据不一致问题

    一、事务
    事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,
    要么全不做,是一个不可分割的工作单位事务和程序是两个概念
    -在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序
    -一个应用程序通常包含多个事务
    事务是恢复和并发控制的基本单位

    -对多用户并发存取同一数据的操作不加控制可能会存取和
    存储不正确的数据DBMS必须提供并发控制机制

    定义事务的两种方式
    -显式方式
    事务的开始由用户显式控制或DBMS自动隐含
    事务结束由用户显式控制

    -隐式方式
    当用户没有显式地定义事务时,由DBMS按缺省规定自动划分事务

    显式定义事务
    begin transaction(事务开始)
    SQL语句1
    SQL语句2
    。。。
    commit(事务结束)

    begin transaction(事务开始)
    SQL语句1
    SQL语句2
    。。。
    rollbacke(事务结束)

    事务结束语句
    commit
    -事务正常结束
    -提交事务的所有操作(读+更新)
    -事务中所有对数据库的更新永久生效
    rollback
    -事务异常终止
    -事务运行的过程中发生了故障,不能继续执行,回滚事务的所有更新操作
    -事务回滚到开始时的状态

    事务的ACID特性:
    原子性(Atomicity)
    一致性(Consistency)
    隔离性(Isolation)
    持续性(Durability )

    (1)原子性
    事务是数据库的逻辑工作单位
    -事务中包括的诸操作要么都做,要么都不做

    (2)一致性
    事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
    -一致性状态:数据库中只包含成功事务提交的结果
    -不一致状态:数据库中包含失败事务的结果

    (3)隔离性
    一个事务的执行不能被其他事务干扰
    -一个事务内部的操作及使用的数据对其他并发事务是隔离的
    -并发执行的各个事务之间不能互相干扰

    (4)持续性
    持续性也称永久性(Permanence)
    -一个事务一旦提交,它对数据库中数据的改变就应该是永久性的
    -接下来的其他操作或故障不应该对其执行结果有任何影响

    保证事务ACID特性是事务处理的重要任务
    破坏事务ACID特性的因素
    -多个事务并行运行时,不同事务的操作交叉执行
    ·DBMS必须保证多个事务的交叉运行不影响这些事务ACID特性,特别是原子性和隔离性
    –事务在运行过程中被强行停止
    ·DBMS必须保证被强行终止的事务对数据库和其他事务没有任何影响
    这些就是DBMS中恢复机制和并发控制机制的责任

    多事务执行方式
    -事务串行执行(serial)
    ·每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行
    。不能充分利用系统资源,发挥数据库共享资源的特点

    -交叉并发方式(interleaved concurrency)
    ·事务的并行执行是这些并行事务的并行操作轮流交叉运行
    ·是单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率

    -同时并发方式(simultaneous concurrency>
    ·多处理机系统中,每个处理机可以运行一个事务,多个处理机
    可以同时运行多个事务,实现多个事务真正的并行运行
    ·最理想的并发方式,但受制于硬件环境

    事务并发执行带来的问题
    -对多用户并发存取同一数据的操作不加控制可能会存取和存储不正确的数
    据,破坏事务的隔离性和数据库的一致性
    -DBMS必须提供并发控制机制
    -并发控制机制是衡量一个DBMS性能的重要标志之一

    并发操作带来的数据不一致性
    -丢失修改(lost update)
    -不可重复读(non-repeatable read)
    -读“脏”数据(dirty read)

    并发操作的调度
    计算机系统对并行事务中并行操作的调度是随机的,而不同的调度可
    能会产生不同的结果
    将所有事务串行起来的调度策略一定是正确的调度策略
    -如果一个事务运行过程中没有其他事务在同时运行
    -也就是说它没有受到其他事务的干扰
    -那么就可以认为该事务的运行结果是正常的或者预想的

    可串行化的调度
    以不同的顺序串行执行事务也有可能会产生不同的结果
    -但由于不会将数据库置于不一致状态,所以都可以认为是正确的

    几个事务的并行执行是正确的
    -当且仅当其结果与按某一次序串行地执行它们时的结果相同。
    这种并行调度策略称为可串行化(Serializable)的调度

    可串行化的调度策略
    为了保证并行操作的正确性,DBMS的并行控制机制必须提供一定的手段
    来保证调度是可串行化的
    从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是
    可串行化的调度,这也是最简单的调度策略
    但这种方法实际上是不可行的,因为它使用户不能充分共享数据库资源

    总结:
    1.事务:恢复和并发控制的基本单位
    可以是一条SQL也可以是一组SQL

    2.commit正常结束事务
    rollback异常终止事务,回滚到开始状态
    3.事务的ACID特征
    A:原子性-要么都做,要么都不做
    C:一致性-数据库从一个一致性状态变到另一个一致性状态
    I:隔离性-并发执行的各个事务之间不能互相干扰
    D:持续性-事务提交之后,它对数据库中的数据的改变是永久性的

    3.多事务执行方式
    事务串性执行:同时只允许一个事务运行
    交叉并发执行:多处理机系统中,每个处理机可以运行一个事务。同时运行多个事务
    同时并发执行:多用户并发存取同一数据


     

    更多相关内容
  • 云计算环境下的复杂数据库并行调度模型仿真.pdf
  • 数据库系统并发控制

    2022-04-12 20:55:57
    对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性 并发操作带来的数据不一致性: 丢失修改:读入同一数据并修改。 不可重复读:读第一次和读第二次的结果不一样,因为别人这中间修改插

    数据库系统并发控制

    并发控制概述

    多用户数据库系统:允许多个用户同时使用的数据库系统

    image-20220407214034936

    事务并发执行带来的问题

    1. 会产生多个事务同时存取同一数据的情况
    2. 可能会存取和存储不正确的数据,破坏事务隔离性和数据库的一致性

    DBMS必须提供并发控制机制

    并发控制机制是衡量一个DBMS性能的重要标准之一

    并发控制机制的任务

    1. 对并发操作进行正确调度
    2. 保证事务的隔离性
    3. 保证数据库的一致性

    image-20220407214519593

    并发操作带来的数据不一致性:

    1. 丢失修改:读入同一数据并修改。
    2. 不可重复读:读第一次和读第二次的结果不一样,因为别人这中间修改插入删除了某些数据。
    3. 读“脏”数据:T1修改某一数据并写回,T2读取,T1撤销操作,T2的数据便是脏数据,也就是不正确的数据。

    原因:并发操作破坏了事务的隔离性

    image-20220407215005493

    并发控制的主要技术

    1. 封锁(Locking)
    2. 时间戳(Timestamp)
    3. 乐观控制法
    4. 多版本并发控制

    商用的DBMS一般都采用封锁方法

    封锁是一种悲观的技术,认为冲突总在发生,因此控制并发事务。

    乐观控制法认为冲突不常发生,如果冲突再回滚。

    封锁

    什么是封锁?

    封锁就是事务T在对某个数据对象(如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。(如 火车上上厕所,进入厕所后,方便之前先锁门,对这个厕所有了使用权,在开门之前,别人不能使用此厕所)

    封锁是实现并发控制的一个非常重要的技术。

    基本封锁类型

    1. 排它锁(Exclusive Locks,简记为X锁)也叫写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁为止。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。
    2. 共享锁(Share Locks,简记为S锁)也叫读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁为止,这就保证了其他事务可以读A,但在T上释放A的S锁之前不能对A做任何修改。

    封锁协议

    一级封锁协议:事务T在修改数据R前必须先对其加X锁,直到事务结束才释放。只能保证不发生丢失修改。

    二级封锁协议:在一级封锁协议基础上,增加事务T在读取数据R前必须先对其加S锁,读完后即可释放S锁。保证了不发生读“脏”数据。

    三级封锁协议:在一级封锁协议基础上,增加事务T在读取数据R前必须先对其加S锁,直到事务结束才释放进一步保证了不可重复读。

    封锁协议级别越高,一致性程度越高。

    活锁和死锁

    封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题

    活锁

    事务T1封锁了数据R

    事务T2又请求封锁R,于是T2等待

    T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待

    T4又请求封锁R,当T3释放了R上的封锁之后又批准了T4的请求…

    T2有可能永远等待,这就是活锁的情形

    image-20220408012146260

    避免活锁的简单方法是采用先来先服务的策略

    死锁

    事务T1封锁了数据R1

    事务T2封锁了数据R2

    T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁

    接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁

    这样T1在等待T2,而T2又在等待T1,T1和T2两个事务永远不能结束,形成死锁

    image-20220408012611321

    解决死锁的方法:

    1. 预防死锁
    2. 死锁的诊断与解除

    预防死锁

    1. 一次封锁法:每个事务必须一次将所有要使用的数据全部加锁。

      缺点:降低了系统的并发度。而且数据是不断变化的,很难事先精确确定每个事务所要封锁的数据对象。

    2. 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实现封锁。

      缺点:封锁的数据对象极多且在不断变化。事务的封锁请求随着事务的执行而动态地决定,很难事先确定。

    在操作系统中广为采用的预防死锁的策略并不很合适数据库的特点

    DBMS在解决死锁的问题上更普遍采用的是诊断并解除死锁的方法

    死锁的诊断与解除

    1. 超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。实现简单,用得最多。

      缺点:可能误判。若时限太长不能及时发现

    2. 等待图法:精确判断死锁。

    通常解除死锁的方法:选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有的死锁,使其他事务得以继续运行下去。但实际上是很难的,通常顺便选定一个回滚,因为代价很难判断。

    image-20220408205258684

    并发调度的可串行性

    可串行化调度

    定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果相同,称这种调度策略为可串行化调度。

    可串行性(serializability)是并发事务正确调度的准则

    现在有两个事务,分别包含:

    事务T1:读B;A=B+1;写回A

    事务T2:读A;B=A+1;写回B

    假设A、B的初值均为2,按T1->T2次序执行结果为A=3,B=4;按T2->T1次序执行结果为B=3,A=4;

    系统对并行事务中并行操作的调度是随机的,而不同的调度可能会产生不同的结果。

    如果并发执行的结果和上面两种情况任意一种都相同,那么就说这个并发操作满足并发调度的可串行性。

    两段锁协议

    (保证并发调度的正确性)

    定义:所有事务必须分两个阶段对数据项进行加锁和解锁

    1. 在对任何数据进行读写操作之前,首先要申请并获得对该数据的封锁
    2. 在释放一个封锁之后,事务不再申请和获得任何其他封锁

    事务分为两个阶段:

    1. 获得封锁,也称为扩展阶段,可以申请获得任何数据项上的任何类型的锁,不能释放任何锁。
    2. 释放封锁,也称为收缩阶段,可以释放任何锁,但是不能申请任何锁。

    可以证明,若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的(充分不必要条件),但是可能导致死锁。

    若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议。

    封锁的粒度

    封锁的对象的大小称为封锁的粒度(Granularity)

    封锁的对象:逻辑单元、物理单元

    例:在关系数据库中,封锁对象:

    逻辑单元:属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等。

    物理单元:页(数据页或索引页)、物理记录等。

    封锁粒度与系统的并发度和并发控制的开销密切相关

    • 粒度大,开销小,并发度小
    • 粒度小,开销大,并发度大

    多粒度封锁

    多粒度树:根是整个数据库,表示最大的数据粒度,叶节点表示最小的数据粒度。

    多粒度封锁协议:对一个节点加锁意味着这个节点的所有后代节点也被加以相同类型的锁。

    image-20220409015244071

    • 显式封锁:应事务的要求直接加到数据对象上的锁。
    • 隐式封锁:该数据对象没有被独立加锁,是由于其上级节点加锁而使该数据对象加上了锁。

    加锁过程:对R1加X锁,需要搜索其上级节点数据库、R1本身和R1的下级节点,如果其中某一个数据库对象已经加了不相容锁,则必须等待。

    开销太大,解决方法是意向锁。

    意向锁

    引进意向锁(intention lock)目的:提高对某个数据对象加锁时系统的检查效率。

    意向锁:如果对一个节点加意向锁,则说明该节点的下层节点正在被加锁;

    对任一节点加锁时,必须先对它的上层加意向锁。

    1. 意向共享锁(Intent Share Lock,简称IS锁)

      如果对一个数据对象加IS锁,表示它的后代节点拟(意向)加S锁。

    2. 意向排它锁(Intent Exclusive Lock,简称IX锁)

      如果对一个数据对象加IX锁,表示它的后代节点拟(意向)加X锁

    3. 共享意向排它锁(Share Intent Exclusive Lock,简称SIX锁)

      如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX

    展开全文
  • 数据库并发控制之并发调度

    千次阅读 2018-10-25 01:08:22
    一、并发调度的可串行性 二、两段锁协议 三、封锁的粒度 四、其他并发控制机制

    一、并发调度的可串行性

    1、可串行化调度

    定义 : 多个事务的并发执行是正确的,当且仅当其结果与按某一次串行地执行这些事务时的结果相同,称这种调度策略为可串行化调度。
    可串行性是并发事务正确调度的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。

    2、冲突可串行化调度

    并发事务的不听调度:
    并发事务的不同调度
    冲突操作: 不同的事务对同一数据的读写操作和写写操作。
    Ri(x)与Wj(x) -->事务Ti读x,Tj写x,其中i≠j
    Wi(x)与Wj(x) -->事务Ti读x,Tj写x,其中i≠j
    其他操作是不冲突操作。
    不同事务的冲突操作和同一事务的两个操作是不能交换的。对于Ri(x)与Wj(x),若改变二者的次序,则事务Ti看到的数据库状态就发生了改变,自然会影响到事务Ti后面的行为。对于Wi(x)与Wj(x),改变二者的次序也会影响数据库的状态,x的值由等于Tj的结果变成了Ti的结果。
    一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc‘,如果Sc’是串行的,称调度Sc为冲突可串行化的调度。若一个调度是冲突可串行化,则一定是可串行化的调度。因此可以用这种方法来判断一个调度是否是冲突可串行化的。

    冲突可串行化调度是可串行化调度的充分条件,不是必要条件。

    二、两段锁协议

    数据库管理系统普遍采用两段锁(2PL)协议的方法实现并发调度的可串行性,从而保证调度的正确性。
    定义: 所有事物必须分两个阶段对数据项加锁和解锁。

    1. 在对数据进行读、写操作之前,首先要申请并获得对该数据的封锁;
    2. 在释放一个封锁之后,事务不再申请和获得任何其他封锁。

    所谓“两段”的含义是,事务分为两个阶段:
    第一阶段是获得封锁,也称为扩展阶段,在这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁;
    第二阶段是释放封锁,也称为收缩阶段,在这个阶段,事务可以是否任何数据项上的任何类型的锁,但是不能再申请任何锁。

    若并发执行的所有事务均遵守两端锁协议,则对这些事务的任何并发调度策略都是可串行化的。

    示例:遵守两段锁协议的可串行化调度
    遵守两段锁协议的可串行化
    事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。若并发事务都遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化的;但是,若并发事务的一个调度是可串行化的,不一定所有事务都符合两段锁协议。
    备注: 两段锁协议和防止死锁的一次封锁法的异同:

    1. 一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。
    2. 两段锁协议:并不要求事务必须一次将所有要使用的数据全部加锁,印象遵守两段锁协议的事务可能发生死锁。
    3. 一次封锁法遵守两段锁协议。

    三、封锁的粒度

    封锁对象的大小称为封锁粒度。封锁对象可以是逻辑单元,也可以是物理单元。以关系数据库为例,封锁对象可以是这样一些逻辑单元:属性值、属性值的集合、元组、关系、索引项、整个索引直至整个数据库;也可以是这样一些物理单元:页(数据页或索引页)、物理记录等。
    封锁粒度与系统的并发度和并发控制的开销密切相关。

    封锁的粒度越大,数据库所能够封锁的数据单元就越少,并发度就越小,系统开销也越小;反正,封锁的粒度越小,并发度较高,但系统开销也就越大。

    1、多粒度封锁

    在一个系统中同时支持多种封锁粒度供不同的事务选择,这种封锁方法称为多粒度封锁。
    多粒度树示例:三级粒度树
    三级粒度树
    其中,根节点就是整个数据库,表示最大的数据粒度。叶结点表示最小的数据粒度。数据库的子结点为关系,关系的子结点为元组。
    多粒度封锁协议允许多粒度树多粒度树中的每个结点被独立地加锁。对一个结点加锁意味着这个结点的所有后裔结点页被加以同样类型的锁。因此,在多粒度封锁中一个数据对象可能以两钟方式封锁,显式封锁和隐式封锁。

    1. 显式封锁:应事务的要求直接加到数据对象上的锁;
    2. 隐式封锁:该数据对象没有被独立加锁,是由于其上级节点加锁而使该数据对象加上了锁。
      多粒度封锁方法中,显式封锁和隐式封锁的效果是一样的,因此系统检查封锁冲突时不仅要检查显式封锁还要检查隐式封锁。
      一般地,对某个数据对象加锁,系统要检查该数据对象上有无显式封锁与之冲突;再检查其所有上级结点,看本事务的显示封锁是否与该数据对象上的隐式封锁(即由于上级结点已加的封锁造成的)冲突;还要检查其所有下级结点,看它们的显式封锁是否与本事务的隐式封锁(将加到下级结点的封锁)冲突。
    2、意向锁

    为了解决多粒度封锁的检查方法效率低的问题,数据库管理系统无须逐个检查下一级结点的显式封锁,引进了一种新型锁–意向锁。
    含义: 如果对一个结点加意向锁,则说明该结点正在被加锁;对任一结点加锁时,必须先对它的上层结点加意向锁。

    1. 意向共享锁(IS锁)
      如果对一个数据对象加IS锁,表示它的后裔结点拟(意向)加S锁。
    2. 意向排他锁(IX锁)
      如果对一个数据对象加IX锁,表示它的后裔结点拟(意向)加X锁。
    3. 共享意向排他锁(SIX锁)
      如果对一个数据对象加SIX锁,表示对它加S锁,再加IX锁,即SIX=S+IX。

    所谓锁的强度是指它对其他锁的排斥程度。一个事务在申请封锁时以强锁代替弱锁是安全的,反之则不然。

    在具有意向锁的多粒度封锁方法中,任意事务T要对一个数据加锁,必须先对它的上层结点加意向锁。申请封锁时应该按自上而下的次序进行,释放封锁时应该按自下而上的次序进行。
    加上意向锁后锁的相容矩阵与偏序关系图:
    加上意向锁后锁的相容矩阵与偏序关系
    具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销。

    选择封锁粒度时应该同时考虑封锁开销和并发度两个因素,适当选择封锁粒度以追求得最优的结果。一般来说,需要处理某个关系的大量元组的事务可以以关系为封锁粒度;需要处理多个关系的大量元组的事务可以以数据库为封锁粒度;而对于一个处理少量元组的用户事务,以元组为封锁粒度就比较合适了。

    四、其他并发控制机制

    并发控制的方法除了封锁技术外还有时间戳方法、乐观控制法和多版本并发控制等。

    1、多版本并发控制

    多版本并发控制(MVCC)是指在数据库中通过维护数据对象的多个版本信息来实现高效并发控制的一种策略。

    版本是指数据库中数据对象的一个快照,记录了数据对象某个时刻的状态。数据库系统的数据对象保留多个版本,以提高系统的并发操作程度。

    在多版本机制中,每个write(Q)操作都创建Q的一个新版本,这样一个数据对象就有一个版本序列Q1,Q2,…,Qm与之相关联。每一个版本Qk拥有版本的值、创建Qk的事务的时间戳W-timestamp(Qk)和成功读取Qk的事务的最大时间戳R-timestamp(Qk)。其中,W-timestamp(Qk)表示数据项Q上成功执行write(Q)操作的所有事务中的最大时间戳,R-timestamp(Qk)表示在数据项上Q上成功执行read(Q)操作的所有事务中的最大时间戳。
    封锁方法与MVCC示意图:
    封锁方法与MVCC示意图
    用TS(T)表示事务T的时间戳,TS(Ti)<TS(Tj)表示事务Ti在事务Tj之前开始执行,多版本协议描述如下:
    假设版本Qk具有小于或等于TS(T)的最大时间错。若事务T发出read(Q),则返回版本Qk的内容。若事务T发出write(Q),则:

    1. 当TS(T)<R-timestamp(Qk)时,回滚T;
    2. 当TS(T)=W-timestamp(Qk)时,覆盖Qk的内容。
      否则,创建Q的新版本。
      若一个数据对象的两个版本Qk和Ql,其中W-timestamp都小于系统中最老的事务的时间戳,那么这两个版本中较旧的那个版本将不再被用到,因而可以从系统中删除。

    多版本并发控制利用物理存储上的多版本来维护数据的一致性。这就意味着当检索数据库时,每个事务都看到一个数据的一段时间前的快照,而不管正在处理的数据当前的状态。多版本并发控制和封锁机制相比,主要的好处是消除了数据库中数据对象读和写操作的冲突,有效地提高了系统的性能。

    2、改进的多版本并发控制

    多版本并方控制方法有利于提高事务的并发度,但也会产生大量的无效版本,而且在事务结束时刻,其所影响的元组的有效性不能马上确定。因此多版本协议可以进一步改进。区分事务的类型为只读事务和更新事务。对于只读事务,发生冲突的可能性很小,可以采用多版本时间戳。对于更新事务,采用较保守的两阶段封锁(2PL)协议。这样的混合协议称为MV2PL。
    除了传统的读锁(共享锁)和写锁(排他锁)外,引进一个新的封锁类型,称为验证锁(C锁)。封锁的相容矩阵如下:
    验证锁的 相容矩阵
    在这个相容矩阵中,读锁和写锁变得是相容的了。这样当某个事物写数据对象的时候,允许其他事务读数据(写操作生成一个新版本,读操作就是读旧版本)。一旦写事务要提交的时候,必须首先获得在那些加了锁的数据对象上的验证锁。由于验证锁和读锁是不相容的,所以为了得到验证锁,写事务不得不延迟它的提交,直到所有被它加上写锁的数据对象都被所有那些正在读它们的事务释放。一旦写事务获得验证锁,系统就可以丢弃数据对象的旧值,使用新版本,然后释放验证锁,提交事务。
    这样,系统最多只要维护数据对象的两个版本。多个读操作可以和一个写操作并发地执行。这种情况是传统的2PL所不允许的,提高了读写事务之间的并发度。

    3、时间戳方法

    给每一个事务盖上一个时标,即事务开始执行的时间。每个事务具有唯一的时间戳,并按照这个时间戳来解决事务的冲突操作。如果方式冲突操作,就回滚具有较早时间戳的事务,以保证其他事务的正常执行,被回滚的事务被赋予新的时间戳并从头开始执行。

    4、乐观控制法

    乐观控制法又称为验证方法。
    乐观控制法认为事务执行时很少发生冲突,因此不对事务进行特殊的管制,而是让它自由执行,事务提交前再进行正确性检查。如果检查后发现该事务执行中出现过冲突并影响了可串行性,则拒绝提交并回滚该事务。

    M2PL把封锁机制和时间戳方法相结合,维护一个数据的多个版本,即对于关系表上的每一个写操作产生r的一个新版本,同时会保存前一次修改的数据版本。M2PL和封锁机制相比,主要的好处是在多版本并发控制中对读数据的锁要求与写数据的锁要求不冲突,所以读不会阻塞写,而写也从不阻塞读,从而使读写操作没有冲突,有效地提高了系统的并发性。

    展开全文
  • 数据库期末复习之例题汇总

    千次阅读 多人点赞 2021-06-11 22:38:33
    文章目录数据库期末复习之例题汇总第1讲 绪论数据 - P11层次模型 - P69网状结构 - P81模式与实例 - P101第2讲 关系数据库笛卡尔积 – P13关系模式 - P29实体完整性 - P42关系间的引用 例2.1 - P46关系间的引用 例2.2...

    文章目录

    数据库期末复习之例题汇总

    第1讲 绪论

    数据 - P11

    image-20210609152750910 image-20210609152811585

    层次模型 - P69

    image-20210609154221627 image-20210609154232560

    树形结构,双亲唯一,一对多

    网状结构 - P81

    image-20210609154321224 image-20210609154331309

    可以多对多

    模式与实例 - P101

    image-20210609154558724

    实例是模式的一个具体值

    第2讲 关系数据库

    笛卡尔积 – P13

    image-20210609144434529 image-20210609144444870 image-20210609144457840

    其中,每一个元素称为元组,如(张清玖,计算机专业,李勇)

    元组中每一个值叫分量,如张清玖,计算机专业,李勇

    基数计算方法则是每个域中值的个数的乘积

    关系模式 - P29

    image-20210609150947821

    R(U, D, DOM, F)

    R:关系名

    U:组成该关系的属性名集合

    D:U中属性所来自的域

    DOM:属性向域的映像集合

    F:属性间数据的依赖关系的集合

    实体完整性 - P42

    image-20210609152154333

    关系间的引用 例2.1 - P46

    image-20210609152413894

    关系间的引用 例2.2 - P47

    image-20210609152439899

    关系间的引用 例2.3 - P48

    image-20210609152510044

    外码 例2.1 - P50

    image-20210609155348366

    F是R的外码

    • F是基本关系R的一个或一组属性,但不是关系R的码
    • F与基本关系S的主码Ks相对应

    R:参照关系

    S:被参照关系 / 目标关系

    通俗的讲外码就是只是参照关系里的普通属性(非码),但是却和被参照关系里的主码对应

    外码 例2.2 - P51

    image-20210609161228627

    外码 例2.3 - P52

    image-20210609161803781

    参照完整性规则 延申 - P55

    image-20210609162408153 image-20210609162450927 image-20210609162503146

    对应参照完整性规则2.2

    外码要么取空值要么取等于S中某个元组的主码值

    用户定义的完整性 - P60

    image-20210609162757230

    个人理解是满足语义要求即可

    集合运算 并(Union) - P66

    image-20210609163008824

    R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R \cup S = \{ t|t \in R \vee t \in S \} RS={ttRtS}

    集合运算 差(Difference) - P68

    image-20210609164629078

    R − S = { t ∣ t ∈ ∧ t ∉ S } R-S = \{ t | t \in \wedge t \notin S \} RS={ttt/S}

    集合运算 交(Intersection) - P70

    image-20210609165204554

    R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R \cap S = \{ t|t \in R \wedge t \in S \} RS={ttRtS}

    关系运算 笛卡尔积 - P72

    image-20210609165402141

    R × S = { t r ⌢ t s ∣ t r ∈ R ∧ t s ∈ S } R \times S= \{ t_r\frown t_s | t_r \in R \wedge t_s \in S \} R×S={trtstrRtsS}

    象集 - P78

    image-20210610130407528

    Z x = { t [ Z ] ∣ t ∈ R , t [ X ] = x } Z_x = \{ t[Z] | t\in R, t[X]=x \} Zx={t[Z]tR,t[X]=x}

    表示R中属性组X上值为x的诸元组再Z上分量的集合

    选择 例2.4 例2.5 - P85

    image-20210610131210176 image-20210610130807171 image-20210610131235485

    σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = ′ 真 ′ } σ_F(R) = \{ t|t \in R ∧ F(t)= '真' \} σF(R)={ttRF(t)=}

    投影 例2.6 例2.7 - P88

    image-20210610131429335 image-20210610131442126

    π A ( R ) = { t [ A ] ∣ t ∈ R } π_A(R) = \{ t[A] | t \in R \} πA(R)={t[A]tR}

    A:R中的属性列

    连接 例2.8 - P94

    image-20210610132133100 image-20210610132143074 image-20210610132154177 image-20210610132211646

    看图,不解释

    外连接 例2.8延申 - P100

    image-20210610132749572 image-20210610132800768

    悬浮元组:在自然连接中未被连接的元组

    外连接:吧悬浮元组保存在结果关系中,在其他属性上填空值(NULL)

    左外连接:只保留左边关系R中的悬浮元组

    由外连接:只保留右边关系S中的悬浮元组

    除运算 例2.9 - P104

    image-20210610134243588 image-20210610140315023

    R ÷ S = { t r [ X ] ∣ t r ∈ R ∧ π Y ( S ) ⊆ Y x } R \div S= \{ t_r[X]|t_r \in R∧π_Y(S) \subseteq Y_x \} R÷S={tr[X]trRπY(S)Yx}

    Y x Y_x Yx:X在R中的象集, x = t r [ X ] x=t_r[X] x=tr[X]

    a1的象集{(b1,c2), (b2,c3), (b2,c1)}

    a2的象集{(b3,c7), (b2,c3)}

    a3的象集{(b4,c6)}

    a4的象集{(b6,c6)}

    S在(B,C)上的投影{(b1,c2), (b2,c1), (b2,c3)}

    只有a1的象集包含S的投影集,故结果为a1

    综合举例 - P106

    image-20210610140643615 image-20210610140943862 image-20210610140956913

    第3讲 关系数据库标准语言 SQL

    定义模式 例3.1 例3.2 - P28

    image-20210610144452349

    定义模式实际上是定义一个命名空间,在其中可以定义数据库对象(基本表、试图、索引等)

    定义模式和表 例3.3 - P30

    image-20210610144654167

    删除模式 例3.4 - P32

    image-20210610144818925

    CASCADE(级联):删除模式的同时删除模式中所有数据库对象

    RESTRICT(限制):如果模式中定义了下属的数据库对象,则拒绝执行删除;只有当没有下属对象时才能删除。

    定义基本表 例3.5-3.7 - P35

    image-20210610145049566 image-20210610145115775 image-20210610145129281

    修改基本表 例3.8-3.10 - P45

    image-20210610145444957 image-20210610145501623

    ADD:增加新列、新列级完整性约束条件和新表级完整性约束条件

    DROP COLUMN:用于删除表中的列

    DROP CONSTRAINT:用于删除指定的完整性约束条件

    ALTER COLUMN:用于修改原有的列定义

    删除基本表 例3.11-3.12 P48

    image-20210610145843721 image-20210610145900793 image-20210610145927223

    RESTRICT:存在依赖该表的对象,则不能删除

    CASCADE:删除表的同时,删除相关依赖对象

    建立索引 例3.13 - P56

    image-20210610150210250

    修改索引 例3.14 - P57

    image-20210610150243994

    删除索引 例3.15 - P68

    image-20210610150312612

    查询表中若干列 例3.16-3.17 - P66

    image-20210610150426543

    查询全部 例3.18 - P67

    image-20210610150455702

    查询计算值 例3.19-3.20 - P68

    image-20210610150609426 image-20210610150635643 image-20210610150712328

    查询-消除重复 例3.21 - P72

    image-20210610150911441 image-20210610150923798

    查询-比较大小 例3.22-3.24 - P75

    image-20210610151102408

    查询-范围 例3.25-3.26 - P76

    image-20210610151138087

    查询-确定集合 例3.27-3.28 - P77

    image-20210610151245863

    查询-字符匹配 例3.29-3.35 - P79

    image-20210610151331117 image-20210610151408017 image-20210610151419944 image-20210610151431445

    查询-涉及空值 例3.37 - P83

    image-20210610151532863

    这里的is不能用**=**代替

    查询-多重条件 例3.38 - P84

    image-20210610151647274 image-20210610151700949

    and优先级高于or

    查询-排序 例3.39-3.40 - P88

    image-20210610151913069

    升序:ASC

    降序:DESC

    缺省为升序

    查询-聚集函数 例3.41-3.45 - P91

    image-20210610152251464 image-20210610152342014

    查询-分组 例3.46-3.48 - P95

    image-20210610152626100 image-20210610152638562 image-20210610152653346

    GROUP BY 分组

    HAVING短语与WHERE子句作用对象不同

    • WHERE作用于基本表或试图
    • HAVING短语作用组

    GROUP BY的作用感觉PPT上写的有点模糊,可以看这里:https://www.cnblogs.com/rainman/archive/2013/05/01/3053703.html

    查询-等值连接 例3.49 - P102

    image-20210610153910798 image-20210610153923171

    查询-自然连接 例3.50 - P108

    image-20210610155137783

    查询-非等值连接 例3.51 - P109

    image-20210610155341671

    查询-自身连接 例3.52 - P111

    image-20210610155449770 image-20210610155501990 image-20210610155511761

    查询-外连接 例3.53 - P116

    image-20210610155934761 image-20210610160002452

    外连接会将主题表中不满足连接条件的元组一并输出而普通连接不会

    查询-多表连接 例3.54 - P119

    image-20210610160216636

    查询-嵌套-IN 例3.55-3.56 - P126

    image-20210610160533371 image-20210610160549105 image-20210610160603466 image-20210610160628102 image-20210610160705016 image-20210610160716105

    查询-嵌套-比较 例3.57 - P133

    image-20210610160953132 image-20210610161006226 image-20210610161103955 image-20210610161113860 image-20210610161125055

    查询-嵌套-ALL/ANY 例3.58-3.59 - P141

    image-20210610161334294 image-20210610161424737 image-20210610161527402 image-20210610161646269 image-20210610161708828
    image-20210610161301499 image-20210610161309094 image-20210610161632521

    查询-嵌套-EXISTS(难点) 例3.60-3.63 - P150

    image-20210610161813355 image-20210610161826337 image-20210610161901111 image-20210610161911425

    3.62的思路可以先看3.63

    下面两个式子要记住:

    $(\forall ) P \equiv \neg ( \exist x (\neg P) ) $

    $p \rightarrow q \equiv \neg p \vee q $

    image-20210610162858229 image-20210610162914439 image-20210610163008586

    查询-集合操作 例3.64-3.68 - P161

    image-20210610164436424 image-20210610164447433 image-20210610164457471 image-20210610164506980 image-20210610164519597 image-20210610164533397 image-20210610164542211 image-20210610164550130

    并:UNION

    交:INTERSECT

    差:EXCEPT

    查询-派生表 例3.57+3.60 - P170

    image-20210610165544786 image-20210610165621849

    在FROM里面加个子查询并将查询结果作为一个新表

    插入元组 例3.69-3.71 - P184

    image-20210610170511981 image-20210610170542501 image-20210610170553808

    插入子查询结果 例3.72 - P188

    image-20210610170705245

    修改一个元组的值 例3.73 - P193

    image-20210610170800426

    修改多个元组的值 例3.74 - P194

    image-20210610170833700

    带子查询的修改 例3.75 - P195

    image-20210610170959025

    删除一个元组的值 例3.76 - P200

    image-20210610171035966

    删除多个元组的值 例3.77 - P201

    image-20210610171102522

    带子查询的删除 例3.78 - P202

    image-20210610171139794

    空值的产生 例3.79-3.80 - P205

    image-20210610171302955 image-20210610171311568

    空值的判断 例3.81 - P207

    image-20210610171400469

    NOT NULL 和 UNIQUE 和 码属性 不能取空值

    空值的运算 例3.82-3.83 - P211

    image-20210610171735368 image-20210610171749546

    空值算数运算为空值 空值比较运算为UNKNOWN

    建立试图 例3.84-3.90 - P221

    image-20210610171906620 image-20210610171916356 image-20210610172320477 image-20210610172331937 image-20210610172410510 image-20210610172421230 image-20210610172440398

    删除视图 例3.91 - P230

    image-20210610172551011

    如果一个试图上还导出了其他试图,使用CASCADE级联删除

    查询视图 例3.92-3.94 - P233

    image-20210610172736570

    试图消解法

    • 进行有效性检查
    • 转换成等价的对基本表的查询
    • 执行修正后的查询
    image-20210610172904372 image-20210610172920139 image-20210610173003816 image-20210610173020243

    更新视图 例3.95-3.97 - P239

    image-20210610173135476 image-20210610173150766 image-20210610173631356
    image-20210610173915161 image-20210610173950606 image-20210610174000158

    第4讲 数据库安全性

    授权 例4.1-4.7 - P50

    image-20210611163232717 image-20210611163359074 image-20210611163539070 image-20210611163607929 image-20210611163619423 image-20210611163810747

    image-20210611165028637image-20210611165045407

    WITH GRANT OPTION 可传播权限,如果没有这句话默认不可传播

    回收权限 例4.8 - P58

    image-20210611164904260 image-20210611164922791 image-20210611164958024 image-20210611165115945

    创建用户 - P63

    image-20210611170155567 image-20210611170205540

    数据库角色 例4.11-4.13 - P72

    image-20210611170352326 image-20210611170430356 image-20210611170642903 image-20210611170735593

    数据库角色:被命名的一组与数据库操作相关的权限

    • 角色是权限的集合
    • 可以为一组具有相同权限的用户创建一个角色
    • 简化授权过程

    视图机制 例4.14 - P86

    image-20210611172010304 image-20210611172040804

    审计 例4.15-4.16 - P95

    image-20210611172811193

    第5讲 数据库完整性

    实体完整性定义 例5.1-5.2 - P12

    image-20210611192052690 image-20210611193437796 image-20210611193500946

    两个字段作为联合主键,这两个变量可以有重复,但是不能两个同时重复。

    比如说我们拿id和name作为联合主键,name可以重复,id也可以重复,但是不能有两个元组同时拥有一样的id和name。

    参照完整性 例5.3 - P23

    image-20210611200946079

    破坏参照完整性

    • SC表中增加一个元组,该元组的Sno值在Student表中找不到一个元组的Sno值与之对应
    • 修改SC表中一个元组,修改后找不到元组与之对应
    • 从Student表中删除一个元组,删除后SC表中元组Sno值找不到对应
    • 修改Student表中一个元组,修改后SC表中元组Sno值找不到对应

    参照完整性违约处理 例5.4 - P30

    image-20210611203125563 image-20210611203256962

    处理方式

    • NO ACTION : 拒绝执行
    • CASCADE : 级联操作
    • SET_NULL : 设置为空值

    属性上约束条件的定义 例5.5-5.8 - P37

    image-20210611203620086 image-20210611203632055 image-20210611203640844 image-20210611203651066

    定义属性上的约束条件

    • NOT NULL : 列值非空
    • UNIQUE : 列值唯一
    • CHECK : 检查列值是否满足一个条件表达式

    元组上约束条件的定义 例5.9 - P44

    image-20210611203801158

    元组级的约束可设置不同属性之间的取值的相互约束条件

    不满足条件拒绝执行

    完整性约束命名子句 例5.10-5.13 - P48

    image-20210611204535076 image-20210611204943632 image-20210611205519640 image-20210611205532747

    断言 例5.18-5.20 - P54

    image-20210611205741291 image-20210611205750160 image-20210611205758417

    删除断言:DROP ASSERTION <断言名>;

    定义触发器 例5.21-5.23 - P67

    image-20210611210522842 image-20210611210554661 image-20210611210617544

    语法样式

    • image-20210611211056613

    触发事件

    • INSERT, DELETE, UPDATE
    • AFTER / BEFORE 表示触发时间(在事件发生前后)

    触发器类型

    • FOR EACH ROW : 行级触发器
    • FOR EACH STATEMENT : 语句级触发器

    触发条件

    • 缺省WHEN,则触发器激活后立即执行

    激活触发器

    • 事件触发
    • 多个触发器
      • 执行该表上BEFORE触发器
      • 激活触发器的SQL语句
      • 执行该表上的AFTER触发器

    删除触发器

    • DROP TRIGGER <触发器名> ON <表名>;

    第6讲 关系数据理论

    问题的提出 例6.1 - P12

    image-20210611212509565 image-20210611212519195 image-20210611212539597

    Student<U,F>中存在的问题

    U:属性,F:属性上的一组数据依赖

    • 数据冗余:系主任名字重复出现
    • 更新异常:更换系主任要改好多次
    • 插入异常:一个系刚成立无学生,则无法存入系主任信息
    • 删除异常:删除所有学生的信息时,会把系和系主任一起删了

    解决:

    image-20210611213020821

    函数依赖 - P25

    image-20210611213529875 image-20210611214333294

    这里有错误,应该是圈出两个S1

    image-20210611214358836

    函数依赖:X→Y(X确定Y / Y依赖于X):不可能存在一个元组,X上值相等而Y上值不等

    完全函数依赖与部分函数依赖 - P32

    image-20210611215709192

    F:完全函数依赖

    • X里面任何一个真子集都不能确定Y

    P:部分函数依赖

    • X中存在一个真子集能确定Y

    平凡的函数依赖

    • Y是X的一个子集

    非平凡的函数依赖

    • Y不是X的一个子集

    传递函数依赖 - P33

    image-20210611220335019

    码 例6.2-6.3 - P37

    image-20210611221611635

    候选码(Candidate Key):K为R<U,F>中的属性或属性组合且U完全依赖于K,则K为R的一个候选码

    超码(Superkey):U部分依赖于K,则K为超码

    主码(Primary key):若关系模式R有多个候选码,则选一个为主码

    主属性(Prime attribute):包含在任何一个候选码中的属性

    非主属性(Nonprime attribute)或非码属性(Non-key attribute):不包含在任何码中的属性

    全码(All-key):整个属性组是码

    外码 - P38

    image-20210611222306609

    2NF 例6.4 - P43

    image-20210612095224567 image-20210612095320183 image-20210612100210139 image-20210612100221194 image-20210612100230141

    2NF要求每个主属性都必须完全依赖于任何一个候选码

    3NF - P49

    image-20210612100438736

    3NF要求无传递依赖

    BCNF 例6.5-6.8 - P53

    image-20210612101454519 image-20210612101548980 image-20210612101559111 image-20210612102203870

    BCNF:每一个决定属性集都包含候选码

    多值依赖 例6.9 - P60

    image-20210612102549006 image-20210612102600056 image-20210612102643606 image-20210612102704934

    缺点:

    • 数据冗余度大
    • 增加操作复杂性
    • 删除操作复杂
    • 修改操作复杂

    原因:存在多值依赖

    image-20210612103313496

    不得不说,数据库在定义说明上有一手的,属实难理解。

    个人理解:

    • 就拿上面这个例子来说,我们可以取很多个(C,B),C相同,B不同,此时T都有一组值与之对应。

    • 说白了就是对于(X,Y,Z)一个X对应多个Y,然后一组(X,Z)对应多个Y。

    • 如果实在不理解就采用最简单粗暴的方式,X→→Y中一个X对应多个Y

    image-20210612104138506 image-20210612104242619 image-20210612104252097

    补充:多值依赖的性质 P74

    image-20210612105449725

    多值依赖于函数依赖区别:

    XY为W的子集,W为U的子集

    • X→→Y 在U上成立,则W上一定成立
    • X→→Y 在W上成立,在U上未必成立
    • 这个实际上就是大范围推小范围

    Y‘为Y的真子集

    • X→Y 则 X→Y’

    • X→→Y 不能断言 X→→Y’

    4NF - P82

    image-20210612110127640

    第7讲 数据库设计

    E-R模型 - P60

    image-20210612141150111 image-20210612141041833 image-20210612141208751 image-20210612141228742 image-20210612141346746 image-20210612141402744 image-20210612141417239 image-20210612141427404 image-20210612141440093

    image-20210612141449874image-20210612141457997

    image-20210612142950262 image-20210612141513672

    为啥这里的一个联系名用的是仓库

    概念结构涉及 例1-3 - P73

    image-20210612141720635 image-20210612141749161 image-20210612141808673

    概念结构设计 例7.1 - P76

    image-20210612143139484 image-20210612143228173

    image-20210612143238004image-20210612143248039

    image-20210612143320828

    ER图-合并 - P87

    image-20210612144759281

    ER图-消除冗余 - P89

    image-20210612144946194

    ER图-视图集成

    image-20210612152729159 image-20210612153537487 image-20210612153758747

    ER图转换关系模型 - P107

    image-20210612155103019 image-20210612155110298

    聚簇存取方法 - P141

    image-20210612161447403

    数据存放位置 - P150

    image-20210612161908071

    第8讲 数据库编程

    数据库连接+游标 例8.1 - P26

    image-20210612165744841

    image-20210612165757458image-20210612165805916

    image-20210612165817877 image-20210612165828554

    建立数据库连接

    • EXEC SQL CONNECT TO target [AS connection-name] [USER user-name];
    • target为要连接的数据库服务器
    • connect-name是可选的连接名

    关闭数据库连接

    • EXEC SQL DISCONNECT [connection];

    不用游标 例8.2 - P33

    image-20210612172821648

    用into子句指定存放查询结果的主变量

    查询结果为单记录的SELECT语句 例8.3 - P35

    image-20210612172950111

    非CURRENT形式的增删改语句 例8.4-8.5 - P36

    image-20210612173146572 image-20210612173155739

    对于多条记录等的必须使用游标

    • 说明游标

      • EXEC SQL DECLARE <游标名> CURSOR FOR <SELECT 语句>;
    • 打开游标

      • EXEC SQL OPEN <游标名>;
    • 推进游标指针并取当前记录

      • EXEC SQL FETCH <游标名> INTO <主变量>[<指示变量>] [,<主变量>[<指示变量>]]…;
    • 关闭游标

      • EXEC SQL CLOSE <游标名>;

    动态SQL 例8.6-8.7 - P53

    image-20210612174057797 image-20210612174311870

    存储过程的用户接口 例8.8-8.9 - P79

    image-20210612175433874 image-20210612175446613 image-20210612175455090 image-20210612175548661 image-20210612175607410

    看看就好,感觉应该不会考吧

    创建、执行、修改和删除的代码见PPT - P78 P83 P85

    函数见PPT - P88

    ODBC工作流程 例8.11-8.12 - P118

    image-20210612181101158 image-20210612181128307

    操作步骤

    • 配置数据源
    • 初始化环境
    • 建立连接
    • 分配语句句柄
    • 执行SQL语句
    • 结果集处理
    • 中止处理
    image-20210612191922075 image-20210612191933512 image-20210612191944311 image-20210612191956880 image-20210612192015518

    image-20210612192046278image-20210612192126321

    image-20210612192126321 image-20210612192256494

    这个简单看吧 这个排版有点糟糕,建议看书,书上的排版赏心悦目

    第9讲 关系查询处理和查询优化

    选择操作的实现 例9.1 - P18

    image-20210612194545030image-20210612194713115

    image-20210612194642498 image-20210612194654543 image-20210612194747362 image-20210612194808996

    连接操作的实现 例9.2 - P24

    image-20210612194858015 image-20210612194912704 image-20210612194928489 image-20210612194940999 image-20210612195016657 image-20210612195031599 image-20210612195039400 image-20210612195117164

    查询优化 例9.3 - P43

    image-20210612200453081 image-20210612200511608 image-20210612200524220 image-20210612200534418 image-20210612200711052 image-20210612200726131 image-20210612200747872 image-20210612200921129 image-20210612201047666 image-20210612201104312 image-20210612201251566 image-20210612201538132 image-20210612201600948 image-20210612201724711

    这个其实不难理解,先选择完再连接的消耗比连接完再选择要低得多。

    PS:连接操作时查询处理中最耗时的操作之一 - P24

    通过索引来选择比顺序查找效率高。

    查询树的启发式优化 例9.4 - P73

    image-20210612204233807image-20210612204329105

    image-20210612204352951

    第10讲 数据库恢复技术

    事件-一致性于原子性 - P13

    image-20210612210603529

    数据库的ACID特性

    • 原子性(Atomicity)
    • 一致性(Consistency)
    • 隔离性(Isolation)
      • 不可被干扰
    • 持续性(Durability)
      • 一旦事物被提交,改变为永久性的

    恢复的实现技术 - P41 P57

    image-20210612211707089

    恢复的实现技术

    • 数据转储
    • 登记日志文件

    检查点 - P83

    image-20210612212733328

    第11讲 并发控制

    并发控制-不一致性 例11.1 - P11

    image-20210612213555126

    丢失修改

    image-20210612213756475

    不可重复读

    脏数据 - P20

    image-20210612213907292

    image-20210612213915559image-20210612214157943

    一级封锁 - P35

    image-20210612214157943

    一级封锁:事务T在修改R之前必须加X锁,知道事务结束才释放

    • 没有共享锁,所以不能保证可重复性读和不读脏数据

    二级封锁 - P37

    image-20210612214401319

    二级封锁:一级封锁协议加上事务T在读数据R之前必须对其加S锁,读完即可释放S锁

    • 读完数据即可释放S锁,不能保证可重复性读

    三级封锁协议 - P39

    image-20210612214638290

    三级封锁:一级封锁加上事务T在读数据R之前必须先对其加S锁,知道事务结束才可释放

    • 三级封锁可防止丢失修改、读脏数据和不可重复读

    可串行化调度 例11.2 - P67

    image-20210612215348341

    image-20210612215447578

    image-20210612215528618

    image-20210612215528618

    image-20210612215554148image-20210612215733504

    冲突可串行化 例11.3-11.4 - P76

    image-20210612215733504

    image-20210612215848463image-20210612220033109

    两段锁协议 - P81

    image-20210612220033109

    两阶段:

    • 一阶段:只能获得锁
    • 二阶段:只能释放锁

    两段锁仍然可能发生死锁:两段锁不是一次性对要用的数据全部加锁

    image-20210612220410432image-20210612220643489

    封锁粒度 - P89

    image-20210612220643489 image-20210612220659495

    意向锁 - P107

    image-20210612221321059

    IS锁:对后裔结点加S锁

    IX锁:对后裔结点加X锁

    SIX锁:加S锁,再加IX锁

    展开全文
  • 并行数据库

    2021-01-19 10:29:45
    并行数据库 计算机系统性能价比的不断提高迫切要求硬件、软件结构的改进。硬件方面,单纯依靠提高微处理器速度和缩小体积来提高性能价比的方法正趋于物理极限;磁盘技术的发展滞后于微处理器的发展速度,使得磁盘 I/...
  • 基于分布式文件系统的MPP(大规模并行处理)数据库是目前的研究热点,为改善其执行查询扫描操作前调度执行单元读取数据块的过程,提出一种基于节点负载的调度策略NLS。这种策略同时结合数据本地性和节点负载,通过...
  • 数据库事务、可串行化调度、封锁

    千次阅读 2022-03-16 16:36:35
    一、 数据库事务 1.1 数据库事务介绍 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。 事务处理(事务操作):保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当...
  • 并发(或并行)调度:多个事务从宏观上看是并行执行的,但其微观上的基本操作(读、写)则是交叉执行的。 并发调度的正确性:当且仅当在这个并发调度下所得到的新数据库结果与分别串行地运行这些事务所得的新数据库完全...
  • 并行视频服务器调度算法研究.pdf
  • 并行设计子任务调度的遗传算法原理与实现方法.pdf
  • 事务的并发 事务的并发是指在某一时间段内...一致性调度:如果执行一个调度能使得数据库从一个一致性状态转入另一个一致性状态,则称该调度是一个一致性调度。 可串行化调度:一组并发执行的事务,如果其一个调度与该组
  • 基于Hama并行计算框架的多层级作业调度算法的研究及实现.pdf
  • 数据库】并发调度的可串行性

    千次阅读 2018-10-22 18:44:33
    DBMS对并行事务中各指令的安排执行(调度)是随机的,而不同的调度可能会产生不同的结果。 将所有事务串行执行的调度策略一定是正确的调度策略。 如果错了,一定是事务程序逻辑上的错误,不是因调度而产生的。 以...
  • 数据库 - 并发调度的可串行性

    万次阅读 2015-05-12 17:35:31
    并发调度的可串行性DBMS对并发事务不同的调度(schedule)可能会产生不同的结果 什么样的调度是正确的?串行化(Serial)调度是正确的 对于串行调度,各个事务的操作没有交叉,也就没有相互干扰,当然也不会产生并发所...
  • 工业级本机承诺调度库。 自动限制并行运行的诺言数量。 由于无法兑现的大规模承诺是一场灾难,因此您甚至要面对现实就不会考虑。 一个例子 Promise . all ( userList . map ( user => { return ...
  • 数据库运行过程中,数据库管理系统需要对数据库进行保护管理,以保证数据的正确性与一致性,避免数据丢失、泄露或遭到破坏。数据库保护主要是通过并发控制、数据恢复、安全性控制和完整性控制4个方面实现的。 本章...
  • 此概念证明使用SAP HANA和Oracle数据库的功能将表作为平面文件(即CSV)从Oracle移动到SAP HANA。 为了获得最佳性能,该工具创建了许多线程以将表导出为CSV,将它们移至SAP HANA平台,然后将其加载到SAP HANA模式中...
  • 对于数据库引擎,这意味着服务器组件必须支持多线程计算,允许操作系统在所有处理器核心上执行并行任务调度。不仅如此,数据库引擎必须提供有效的方法,以在多核上分解工作负荷。举个例子,如果数据库只使用四个线程...
  • (2)数据库并发控制手段资源占用隔离的思路主要是先检测到交易会占用什么资源,然后依据这些资源占用的情况,将占用不同资源的交易分开并行执行。一般情况下,资源占用的检测需要以静态分析的形式,在执行智能合约...
  • 并行数据库技术分析与发展展望

    千次阅读 2014-12-17 11:51:29
    我将首先描述什么是并行数据库以及它们的典型特征;然后从存储、执行、管理等方面分析其技术要点;最后展望一下并行数据库的未来发展方向。 一、并行数据库的定义和架构特点 在维基百科上,并行数据库被定义为通过...
  • 计算机复试——数据库的并发控制
  • 数据库是一个共享资源,可以提供多个用户使用。这些用户程序可以一个一个地串行...因此,为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户程序并发存取
  • 在执行查询之前,SQL Server数据库引擎会根据许多因素检查是否需要并行执行,例如,SQL Server实例是否在具有多个CPU的服务器上运行,是否需要所需的线程数,以及如果要处理的行数足以使用并行计划,并且查询成本...
  • 数据库总结_事务篇

    2021-02-10 16:01:19
    深入认识事务 事务定义 (宏观角度:应用程序员)一个存取或改变数据库内容的程序的一次执行,或者说一条或多条...多个事务从宏观上看是并行执行的,但其微观上的基本操作(读,写)则可以是交叉执行的。 事务特性ACI
  • 重新调度并行SQL,以便它们不会试图并发执行。如果PARALLEL_DEGREE_POLICY被设成AUTO,oracle11G发行版本2可以自动重新调度SQL。2.调整并行配置的参数以允许更大的并发并行。可能通过增加PARALLEL_THREADS_PER_CPU或...
  • 分析型模型需要深入研究数据库系统查询执行过程,对动态查询的适应性较好,无须成本高昂的采样实验,但在查询并行执行情景下建模复杂,对不同的数据库系统有不同的理论模型。统计型模型无须分析查询执行过程,通过...
  • 神通大型通用数据库

    千次阅读 2020-12-30 15:01:53
    ·数据字典 提供的数据字典视图进行查询或通过图形化管理工具查看下列数据库实例相关信息:实例名称、安装的主机名称、版本、启动时间、当前状态、运行模式(并行、归档、DBA维护、管理的数据库等)、运行统计信息...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,630
精华内容 25,052
关键字:

数据库并行调度