第九章~第十一章 课后习题

第九章—关系查询处理和查询优化

关 系 查 询 处 理 和 查 询 优 化 { 关 系 数 据 库 系 统 的 查 询 处 理 { 查 询 处 理 步 骤 { 查 询 分 析 查 询 检 查 查 询 优 化 查 询 执 行 代 数 优 化 { 关 系 代 数 表 达 式 等 价 变 换 规 则 查 询 树 的 启 发 式 { 选 择 运 算 应 尽 可 能 先 做 投 影 和 选 择 运 算 同 时 进 行 投 影 同 其 前 或 后 的 双 目 运 算 结 合 某 些 选 择 同 笛 卡 尔 积 结 合 成 连 接 运 算 找 出 公 共 子 表 达 式 物 理 优 化 { 基 于 启 发 式 规 则 的 存 取 路 径 选 择 优 化 { 选 择 操 作 的 启 发 式 规 则 连 接 操 作 的 启 发 式 规 则 基 于 代 价 估 算 的 优 化 { 统 计 信 息 代 价 估 算 公 式 { 全 表 扫 描 算 法 索 引 扫 描 算 法 嵌 套 循 环 连 接 算 法 排 序 — 合 并 连 接 查 询 计 划 的 执 行 { 自 顶 向 下 : 被 动 的 、 需 求 驱 动 的 执 行 方 式 自 底 向 上 : 主 动 的 执 行 方 式 关系查询处理和查询优化\begin{cases} 关系数据库系统的查询处理 \begin{cases} 查询处理步骤 \begin{cases} 查询分析 \\ 查询检查 \\ 查询优化 \\ 查询执行 \\ \end{cases} \end{cases}\\ 代数优化 \begin{cases} 关系代数表达式等价变换规则 \\ 查询树的启发式 \begin{cases} 选择运算应尽可能先做 \\ 投影和选择运算同时进行 \\ 投影同其前或后的双目运算结合 \\ 某些选择同笛卡尔积结合成连接运算 \\ 找出公共子表达式 \\ \end{cases} \end{cases}\\ 物理优化 \begin{cases} 基于启发式规则的存取路径选择优化\begin{cases} 选择操作的启发式规则 \\ 连接操作的启发式规则 \\ \end{cases}\\ 基于代价估算的优化\begin{cases} 统计信息 \\ 代价估算公式\begin{cases} 全表扫描算法 \\ 索引扫描算法 \\ 嵌套循环连接算法 \\ 排序—合并连接\\ \end{cases}\\ \end{cases}\\ \end{cases}\\ 查询计划的执行\begin{cases} 自顶向下:被动的、需求驱动的执行方式 \\ 自底向上:主动的执行方式 \\ \end{cases}\\ \end{cases} {{

1. 试述查询优化在关系数据库系统中的重要性和可能性

  • 重要性:关系系统的查询优化既是RDBMS(关系数据库管理系统)实现的关键技术又是关系系统的优点所在。它减轻了用户选择存取路径的负担。用户只要提出"干什么",不必指出"怎么干"。查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的"优化"做得更好。
  • 可能性:这是因为:
    (1)优化器可以从数据字典中获取许多统计信息,例如各个关系中的元组数、关系中每个属性值的分布情况、这些属性上是否有索引、是什么索引(B+树索引还是HASH索引或唯一索引或组合索引)等。优化器可以根据这些信息选择有效的执行计划,而用户程序则难以获得这些信息。
    (2)如果数据库的物理统计信息改变了,系统可以自动对查询进行重新优化以选择相适应的执行计划。在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。
    (3)优化器可以考虑数十甚至数百种不同的执行计划,从中选出较优的一个,而程序员一般只能考虑有限的几种可能性。
    (4)优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。系统的自动优化相当于使得所有人都拥有这些优化技术。

2. 试述关系数据库管理系统查询优化的一般准则

  • 下面的优化策略一般能提高查询效率:
    (1)选择运算应尽可能先做。
    (2)把投影运算和选择运算同时进行。
    (3)把投影同其前或其后的双目运算结合起来执行。
    (4)把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算。
    (5)找出公共子表达式。
    (6)选取合适的连接算法。

3. 试述关系数据库管理系统查询优化的一般步骤

  • 各个关系系统的优化方法不尽相同,大致的步骤可以归纳如下:
    (1)把查询转换成某种内部表示,通常用的内部表示是语法树。
    (2)把语法树转换成标准(优化)形式。
    即利用优化算法,把原始的语法树转换成优化的形式。
    (3)选择低层的存取路径。
    (4)生成查询计划,选择代价最小的。

第十章——数据库恢复技术

数 据 库 恢 复 技 术 { 事 务 的 基 本 概 念 { 事 务 事 务 的 A C I D 特 性 { 原 子 性 一 致 性 隔 离 性 持 续 性 故 障 的 种 类 { 事 务 内 部 的 故 障 系 统 故 障 介 质 故 障 计 算 机 病 毒 恢 复 的 实 现 技 术 { 数 据 转 储 { 动 态 海 量 转 储 静 态 海 量 转 储 动 态 增 量 转 储 静 态 增 量 转 储 登 记 日 志 文 件 { 日 志 文 件 的 格 式 和 内 容 日 志 文 件 的 作 用 登 记 日 志 文 件 恢 复 策 略 { 事 务 故 障 的 恢 复 系 统 故 障 的 恢 复 介 质 故 障 的 恢 复 数据库恢复技术\begin{cases} 事务的基本概念 \begin{cases} 事务 \\ 事务的ACID特性 \begin{cases} 原子性 \\ 一致性 \\ 隔离性 \\ 持续性 \\ \end{cases} \end{cases}\\ 故障的种类 \begin{cases} 事务内部的故障 \\ 系统故障 \\ 介质故障 \\ 计算机病毒 \\ \end{cases}\\ 恢复的实现技术 \begin{cases} 数据转储\begin{cases} 动态海量转储 \\ 静态海量转储 \\ 动态增量转储 \\ 静态增量转储 \\ \end{cases}\\ 登记日志文件\begin{cases} 日志文件的格式和内容 \\ 日志文件的作用 \\ 登记日志文件 \\ \end{cases}\\ \end{cases}\\ 恢复策略\begin{cases} 事务故障的恢复 \\ 系统故障的恢复 \\ 介质故障的恢复 \\ \end{cases}\\ \end{cases} ACID

1. 试述事务的概念及事务的4个特性。恢复技术能保证事务的哪些特性?

  • 事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
  • 事务具有四个特性:原子性、一致性、隔离性和持续性
    原子性:事务是数据库的逻辑工作单位,事务中包括的操作要么都做,要么都不做。
    一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
    隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
    持续性:持续性也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
  • 恢复技术能保证事务的原子性\持续性。

2. 为什么事务非正常结束时会影响数据库数据的正确性?

  • 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。

3. 登记日志文件时为什么必须先写日志文件,后写数据库?

  • 把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。
  • 如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。
  • 如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。

4. 什么是检查点记录?检查点记录包括哪些内容?

  • 检查点记录是一类新的日志记录。它的内容包括:
    (1)建立检查点时刻所有正在执行的事务清单
    (2)这些事务的最近一个日志记录的地址

5. 具有检查点的恢复技术有什么优点?

  • 利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要REDO、哪些事务需要UNDO。一般来说,需要检查所有的记录。这样做有两个问题。一是搜索整个日志将消耗大耗费大量的时间;二是很多需要REDO处理的事务实际上已经将它们的更新操作结果写到数据库中了,恢复子系统又重新执行了这些操作,浪费了大量时间。检查点技术就是为了解决这些问题而提出的。
  • 在采用检查点技术之前,恢复时需要从头扫描日志文件;而利用检查点技术只需要从检查点开始扫描日志,从而缩短了扫描日志的时间。

6. 试述使用检查点方法进行恢复的步骤

  • (1)从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录。
  • (2)由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。
    这里建立两个事务队列:
    1)UNDO-LIST:需要执行UNDO操作的事务集合;
    2)REDO-LIST:需要执行REDO操作的事务集合。
    把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。
    3)从检查点开始正向扫描日志文件:
    ①如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列;
    ②如有提交的事务Tj,把Tj从UNDO-LIST 队列移到REDO-LIST队列,直到日志文件结束;
    4)对UNDO-LIST中的每个事务执行UNDO操作,对REDO-LIST中的每个事务执行REDO操作。

7. 什么是数据库镜像?它有什么用途?

  • 数据库镜像即根据DBA的要求,自动把整个数据库或者其中的部分关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS自动把更新后的数据复制过去,即DBMS自动保证镜像数据与主数据的一致性。
  • 数据库镜像的用途有:
    一是用于数据库恢复。当出现介质故障时,可由镜像磁盘继续提供使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。
    二是提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排它锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。

第十一章——并发控制

并 发 控 制 { 概 述 { 丢 失 修 改 不 可 重 复 读 读 " 脏 " 数 据 封 锁 和 封 锁 协 议 { 排 他 锁 共 享 锁 一 级 封 锁 协 议 二 级 封 锁 协 议 三 级 封 锁 协 议 活 锁 和 死 锁 { 活 锁 死 锁 { 死 锁 的 预 防 死 锁 的 诊 断 与 解 除 并 发 调 度 的 可 串 行 性 { 可 串 行 化 调 度 冲 突 可 串 行 化 调 度 封 锁 的 粒 度 { 多 粒 度 封 锁 { 显 式 封 锁 隐 式 封 锁 意 向 锁 { 意 向 共 享 锁 意 向 排 他 锁 共 享 意 向 排 他 锁 并发控制\begin{cases} 概述 \begin{cases} 丢失修改 \\ 不可重复读 \\ 读"脏"数据 \\ \end{cases}\\ 封锁和封锁协议 \begin{cases} 排他锁 \\ 共享锁 \\ 一级封锁协议 \\ 二级封锁协议 \\ 三级封锁协议 \\ \end{cases}\\ 活锁和死锁 \begin{cases} 活锁 \\ 死锁\begin{cases} 死锁的预防 \\ 死锁的诊断与解除 \\\end{cases}\\ \end{cases}\\ 并发调度的可串行性\begin{cases} 可串行化调度 \\ 冲突可串行化调度 \\\end{cases}\\ 封锁的粒度\begin{cases} 多粒度封锁\begin{cases} 显式封锁 \\ 隐式封锁 \\ \end{cases}\\ 意向锁\begin{cases} 意向共享锁 \\ 意向排他锁 \\ 共享意向排他锁 \\ \end{cases}\\ \end{cases} \end{cases} ""{{{

1. 在数据库中为什么要并发控制?并发控制技术能保证事务的哪些特性?

  • 数据库的一个明显的特点是多个用户共享数据库资源,尤其是多用户可以同时存取相同的数据。在这样的系统中,在同一时刻并发运行的事务数可达数百个。若对事务的并发操作不加以控制,就会造成数据库存、取的错误,破坏了数据的一致性和完整性。并发控制可以防止数据库不一致出现。

2. 并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?

  • 并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读"脏"数据。
    (1)丢失修改(Lost Update):两个事务 T 1 T_1 T1 T 2 T_2 T2读入同一数据并修改, T 2 T_2 T2提交的结果破坏了(覆盖了) T 1 T_1 T1提交的结果,导致 T 1 T_1 T1的修改被丢失。
    (2)不可重复读(Non-Repeatable Read):不可重复读是指事务 T 1 T_1 T1读取数据后,事务 T 2 T_2 T2执行更新操作,使 T 1 T_1 T1无法再现前一次读取结果。
    (3)读"脏"数据(Dirty Read):读"脏"数据是指事务 T 1 T_1 T1修改某一数据,并将其写回
    磁盘,事务 T 2 T_2 T2读取同一数据后, T 1 T_1 T1由于某种原因被撤销,这时 T 1 T_1 T1己修改过的数据恢复原值, T 2 T_2 T2读到的数据就与数据库中的数据不一致,则 T 2 T_2 T2读到的数据就为"脏"数据,即不正确的数据。
  • 避免不一致性的方法和技术就是并发控制。最常用的并发控制技术是封锁技术。也可以用其他技术,例如在分布式数据库系统中可以采用时间戳方法来进行并发控制。

3. 什么是封锁?基本的封锁类型有几种?

  • 封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。封锁是实现并发控制的一个非常重要的技术。
  • 基本的封锁类型有两种:排他锁(Exclusive Locks,简称X锁)和共享锁(Share Locks,简称S锁)。
  • 排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其
    他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。
  • 共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改
    A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

4. 如何用封锁机制保证数据的一致性?

  • 数据库管理系统DBMS要求事务在对数据对象进行读、写操作之前首先对该数据执行封锁操作,这样,当其他事务请求对该数据对象加锁时将被拒绝,只能等待。DBMS按照一定的封锁协议,对并发操作进行控制,使得多个并发操作有序地执行,就可避免丢失修改、不可重复读和读"脏"数据等数据不一致性。

5. 什么是活锁?试述活锁的产生原因和解决方法

  • 活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致死锁。
  • 避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。

6. 什么是死锁?请给出预防死锁的若干方法

  • 防止死锁的发生其实就是要破坏产生死锁的条件。预防死锁通常有以下两种方法:
    ①一次封锁法,要求每个事务必须一次将所有要使用的数据全部加锁,否则就
    不能继续执行
    ②顺序封锁法,预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁

7. 请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?

  • 数据库系统一般采用允许死锁发生,数据库管理系统检测到死锁后加以解除的方法。数据库管理系统中诊断死锁的方法与操作系统类似,一般使用超时法或事务等待图法。
  • 数据库管理系统并发控制子系统检测到死锁后,就要设法解除。通常采用的方法是选择一个处理死锁代价最小的事务,将其撤销,释放此事务持有的所有锁,使其他事务得以继续运行下去。当然,对撤销事务所执行的数据修改操作必须加以恢复。

8. 什么样的并发调度是正确的调度?

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

9. 为什么要引进意向锁?意向锁的含义是什么?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值