数据库系统原理与实践 笔记 #11

news/2024/9/18 2:52:24

文章目录

  • 数据库系统原理与实践 笔记 #11
  • 事务管理和并发控制与恢复
    • 事务概念
      • 转账的例子
    • 事务ACID特性
      • ACID特性
      • 事务原子性和持久性
      • 事务隔离性
      • 调度
      • SQL中的事务定义
    • 可串行化
      • 事务的简化视图
      • 冲突的指令
      • 冲突可串行化
    • 可恢复性
      • 级联回滚
      • 无级联调度

数据库系统原理与实践 笔记 #11

事务管理和并发控制与恢复

事务概念

  • 事务是构成单一逻辑工作单元的操作集合
  • 事务是访问并可能个您各种数据项的一个程序执行单元
  • 事务由事务开始(begin trasaction)与实务结束(end transaction)之间执行的全体操作组成
  • 事务管理处理的两个主要问题
    • 各类故障恢复,如硬件故障,系统崩溃等
    • 多个事务的并发执行

转账的例子

  • 从账户A过户$50到账户B的事务:
    • 1.read(A)
    • 2.A := A - 50
    • 3.write(A)
    • 4.read(B)
    • 5.B := B + 50
    • 6.write(B)
  • 原子性要求:在3之后、6之前,如果事务出现故障,钱就会丢失,从而导致数据库的不一致性,系统应该保证部分执行的事务的更新不会体现在数据库中
  • 持久性要求:一个事务成功完成后,它对数据库的改变必须是永久的,即使出现系统故障
  • 一致性要求:事务执行结束后A和B的总和不变
  • 隔离性要求:如果3到6之间,另一个事务T2允许进入部分更新的数据库,该事务将会看到一个不一致的数据库(A+B的和可能会少于其实际值)
  • 可以通过将事务串行化保证隔离性,但是并发执行事务有很大的性能优势

事务ACID特性

ACID特性

  • 事务是访问并可能更新各种数据项的一个程序执行单元
  • 原子性(Atomicity):事务的所有操作在数据库中要么全部反映出来,要么完全不反映
  • 一致性(Consistency):事务隔离执行时(即在没有其他事务并发执行的情况下)保持数据库的一致性
  • 隔离性(Isolation):尽管多个事务可能并发执行,但是每个事务都感觉不到系统中有其他事务在并发地执行
  • 持久性(Durability):一个事务成功完成后,它对数据库的改变是永久的,即便系统出现故障时也是如此

事务原子性和持久性

  • 事务的状态包括:
    • 活动的:初始状态,事务执行时处于这个状态
    • 部分提交的:最后一条语句执行前
    • 失败的:发现正常的执行不能继续后
    • 中止的:事务回滚并且数据库已恢复到事务开始执行前的状态后(中止之后可以重新开始事务,也可以杀死事务)
    • 已提交的:成功完成执行的事务(撤销已提交事务所造成影响的唯一方法是执行一个补偿事务

p23

事务隔离性

  • 事务处理系统通常允许多个事务并发地执行,优点是:
    • 提高吞吐量和资源利用率
    • 减少等待时间
  • 并发控制机制:实现事务隔离性的机制(控制并发的事务之间的相互作用,来避免他们破坏数据库的一致性)

调度

  • 调度:执行执行顺序,指定并发执行事务的指令执行的时间顺序
    • 一组事务的一个调度必须包含这一组事务的全部执行
    • 必须保持指令在各个事务中出现的顺序
  • 一个事务成功执行后,会有一条指令作为最后的声明:事务默认提交指令commit为其最后一条执行
  • 一个事务没有成功完成时,会用一条中止指令abort来作为最后的声明

SQL中的事务定义

  • 数据操纵语言(DML)必须包含用于说明构成事务的活动集合的结构
  • SQL标准规定事务的开始是隐式
  • 事务的结束用下列SQL语句之一来表示(work可选):
    • Commit [work]:提交当前事务并开始一个新的事务
    • Rollback [work]:回滚当前事务
  • 在几乎所有的数据库系统中,缺省每个SQL语句如果成功执行的话,也立即隐式提交事务(这种隐式提交也可以通过数据库指令关闭)

可串行化

  • 基本假设:每个事务都可能保持数据库的一致性
  • 事务的串行执行是可以保持一致性的
  • 如果一个调度等级碍于一个串行调度,那么这个调度就是可串行化
  • 按调度的不同形式可分为:冲突可串行化视图可串行化

事务的简化视图

  • 只考虑readwrite指令
  • 假设事务在read和write指令之间可以对本地缓冲区的数据进行任意的操作
  • 简化的调度只包含read和write指令

冲突的指令

  • 两条连续指令 l i l_i li l j l_j lj分别属于事务 T i T_i Ti T j T_j Tj,当且仅当数据项Q被 l i l_i li l j l_j lj同时访问,并且至少有一个指令执行了write Q操作才会发生冲突
  • 1. l i = r e a d ( Q ) l_i = read(Q) li=read(Q) l j = r e a d ( Q ) l_j=read(Q) lj=read(Q),不冲突
  • 2. l i = r e a d ( Q ) l_i = read(Q) li=read(Q) l j = w r i t e ( Q ) l_j=write(Q) lj=write(Q),冲突
  • 3. l i = w r i t e ( Q ) l_i = write(Q) li=write(Q) l j = r e a d ( Q ) l_j=read(Q) lj=read(Q),冲突
  • 4. l i = w r i t e ( Q ) l_i = write(Q) li=write(Q) l j = w r i t e ( Q ) l_j=write(Q) lj=write(Q),冲突

冲突可串行化

  • l i l_i li l j l_j lj之间的冲突迫使它们之间有一个逻辑时间顺序
  • 一个调度中,如果 l i l_i li l j l_j lj在时间上连续并且不发生冲突,则可以交换这两条指令的顺序
  • 如果调用S可以通过一系列非冲突指令交换转换成S’,我们称S和S’是冲突等价
  • 若一个调度S与一个可串行调度冲突等价,则称调度S是冲突可串行化

可恢复性

  需要了解并发运行的事务的失败会产生什么影响

  • 可恢复调度:如果 T j T_j Tj读取了之前由 T i T_i Ti所写的数据项,则 T i T_i Ti需先于 T j T_j Tj提交

  • 下面的调度无法恢复,如果 T 9 T_9 T9在read之后直接提交
    p24

  • 如果 T 8 T_8 T8要中止, T 9 T_9 T9会读到一个不一致的数据A。因此,数据库必须保证调度可恢复

级联回滚

  • 级联回滚:因单个事务故障导致一系列事务回滚
    p25

  • 如果没有一个事务是提交的,如果 T 10 T_{10} T10失败, T 11 T_{11} T11 T 12 T_{12} T12必须回滚,会导致撤销大量工作

无级联调度

  • 无级联调度:对于每对事务 T i T_i Ti T j T_j Tj,如果 T j T_j Tj读取了先前由 T i T_i Ti所写的数据项,则 T i T_i Ti必须在 T j T_j Tj这一读取操作前提交(不会发生级联回滚)
  • 无级联调度是可恢复

http://lihuaxi.xjx100.cn/news/1863218.html

相关文章

Docker容器(一)概述

一、虚拟化概述 1.1引⼊虚拟化技术的必要性 服务器只有5%的时间是在⼯作的;在其它时间服务器都处于“休眠”状态. 虚拟化前 每台主机⼀个操作系统; 软硬件紧密结合; 在同⼀个主机上运⾏多个应⽤程序通常会遭遇冲突; 系统的资源利⽤率低; 硬件成本⾼昂⽽且不够灵活…

医院信息化专业人员必备医院业务运作及管理流程知识(详细)

业务流程是一家医院运作的基础,医院所有业务都需要流程加以驱动。熟知医院各项业务,了解医院管理流程,有利于医院工作人员更好地投入自身岗位,提高工作效率。本文整理了常见医院业务运作及管理流程,仅供参考! 【门诊业务】 一、门诊业务的特点: 1.接诊病人多,就诊时…

C++:智能指针[重点!]

目录 一、关于智能指针 1、引入智能指针 2、RAII 二、详述智能指针 auto_ptr unique_ptr shared_tr 循环引用 weak_ptr 定制删除器 三、关于内存泄漏 一、关于智能指针 1、引入智能指针 首先引入一个例子: 在Test函数中,new了两个对象p1p2&a…

正点原子linux应用编程——提高篇4

MP157开发板支持音频,板上搭载了音频编解码芯片CS42L51,支持播放以及录音功能。 ALSA概述 ALSA是Advanced Linux Sound Architecture(高级的Linux声音体系)的缩写,目前已经成为了 linux 下的主流音频体系架构,提供了音频和MIDI的…

智能变压器监控系统

智能变压器监控系统是一种先进的物联网技术和智能设备,能够实现对变压器的实时监测和管理,提高变压器的运行效率和可靠性,为用户提供及时、准确的变压器运行状态信息和故障预警。 力安科技A30变压器云控终端是一款集变压器温控仪、变压器运行…

分享80个菜单导航JS特效,总有一款适合您

分享80个菜单导航JS特效,总有一款适合您 80个菜单导航JS特效下载链接:https://pan.baidu.com/s/1NgNc759Kg1of_8vR7kaj6A?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,…

Go to do list

go 语言中怎么实现分布式系统? 在Go语言中实现分布式系统需要考虑以下几个方面: 通信协议:在分布式系统中,各个节点需要通过网络进行通信。Go语言提供了丰富的网络编程库,如net/http、net/rpc等,可以方便…

【国际会议】2024年材料科学与机械应用发展国际会议(ICMSMAD 2024)

2024年材料科学与机械应用发展国际会议(ICMSMAD 2024) 2024 International Conference on Materials Science and Mechanical Application Development(ICMSMAD 2024) 一、【会议简介】 ​2024年材料科学与机械应用发展国际会议(ICMSMAD 2024)即将在美丽的中国成都盛大召开。这…