首页 > 数据库 >数据库系统概论—恢复与并发

数据库系统概论—恢复与并发

时间:2023-07-08 20:12:03浏览次数:46  
标签:封锁 事务 数据库 结点 并发 数据库系统 日志 概论

数据库概论系统—系统篇

一、关系查询处理和查询优化

1.1关系数据库的查询处理

查询处理可分为四个阶段:查询分析、检查检查、查询优选和查询执行(其中查询优化可分为代数和物理优化)

1.2关系数据库系统的查询优化

查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较高的效率,而且在于系统可以比用户程序“优化”做的更好

会将建立原始树,并能够将其转化为优化查询树

image

二、数据库恢复技术

2.1事务

2.1.1事务的基本概念

事务:是用户定义的一个数据库操作序列,要不全做,要不全不做,是一个不可分割的工作单位(是数据库恢复和并发控制的基本单位)

  • 一般来书,一个程序中包含多个事务(事务,程序两个概念)

COMMIT:提交,即提交事务的所有操作

ROLLBACK:回滚,即撤销该事务完成的操作,回滚到事务开始状态

2.1.2事务的ACID准则

原子性,一致性(正确性),隔离性和持续性

2.2故障的种类(处理非预期的)

  • 事务内部的故障:此处专指非预期的故障
  • 系统故障:是指造成系统停止运行的任何事件,使得系统要重新启动,不破坏数据数。故障时,正在进行的事务会撤销,已完成的在缓存区的事务要重做
  • 介质故障:又叫做硬故障,破坏最大
  • 计算机病毒

2.3恢复的实现技术

数据库恢复的原理十分简单:建立冗余—数据转储和建立日志文件

2.3.1数据转储

  • 静态转储:系统停止事务进行转储。期间不能操作数据库
  • 动态转储:转储和事务并发操作。但是数据会过时,一般的情况一个完整的副本 = 转储 + 日志文件
  • 还有海量和增量转储

2.3.2日志文件

  • 登记的次序严格按照并发事务执行的时间次序

  • 先写日志文件,再写数据库

    2.4恢复策略

  • 事务故障恢复:利用日志文件撤销。反向扫描,进行逆操作,知道读到事务的开始标记

  • 系统故障恢复:先站队列,正向扫描日志,有开始和提交->重做;只有开始->撤销;有开始和回滚->什么也不去。再对撤销队列中的事务进行撤销操作(见上)

  • 介质故障恢复:重装数据库然后重做已完成的事务(管理员接入)

2.5具有检查点的恢复技术

再日志文件中加入新记录—检查点记录,增加一个重新开始文件。让恢复子系统在登录日志文件期间动态维护日志。

  • 建立检查点时刻所有正在执行的事务清单
  • 这些事务最近一个日志记录的地址(正在进行中开始最早的)

image

2.6数据库镜像

处理介质故障,是提高数据库可用性的解决方案,提高并发性的办法

正常运行时,主盘自动复制到副盘;发生故障后副盘晋升为主盘并自动复制到新的副盘上。

三、并发控制

事务是并发控制的基本单位

3.1并发的概述

并发控制的目的是为了保证事务的隔离性和一致性

并发操作有可能会带来丢失修改,不可重复读,读"脏数据"的问题

image

针对上述的问题采取了各种方法

3.2封锁

事务T对某个数据对象操作前,像系统发出申请,对其加锁,加锁后事务会对数据有一定的控制

  • 排他锁、写锁、X锁:只允许读取和修改,其他事务不能对其加任何锁,直到释放
  • 共享锁、读锁、S锁:可以读但不能修改,其他事务可以对其加S锁

3.3封锁协议

  • 一级封锁:事务T修改前+X锁,直到事务结束才释放
  • 二级封锁:在一级的基础上,事务T读前+S锁,读完释放
  • 三级封锁:在一级的基础上,事务T读前+S锁,直到事务结束才释放

image

不同级别的封锁可解决不同的问题

image

3.4活锁和死锁

3.4.1活锁

事务有了优先级,会插队 =>先来先服务

3.4.2死锁

事务之间形成闭环

  • 死锁的预防

一次封锁法:一次将所有使用数据全部枷锁

顺序封锁法:预先对数据对象排序

  • 死锁的诊断与解除

超时法:规定等待时间,若超过等待时间,则认为是死锁

等待图法:选择代价最小的一个事务撤销

3.5并发调度的可串行性(了解)

3.5.1可串行化调度

多个事务并发是正确的<=>其结果与某一次串行执行的结果相同,即为可串行化调度

3.5.2冲突可串行化调度

冲突可串行化调度是可串行化的充分条件

只有对同一个数据的读写和写写会产生

  • 已知调度,判断是否冲突

1.画有向图(T,E) T:为事务个数;E:若Ri/Wi/Wi(x)在Wi/Ri/Wi(X)前则TIi—Tj

2.若有回路,则不是冲突可串行化调度;反之是

3.若为冲突可串行化调度,找一个入度为0的事务将其以及和其相连的边删去,再找一个入度为0的事务...重复

4.最后按照原调度顺逆顺序对每个事务内部进行排序

3.6两段锁协议

事务分成两个阶段对数据项进行加锁和解锁

  • 获得封锁(扩展阶段):事务申请获得任何数据项上任何类型的锁
  • 释放封锁(收缩阶段):事务释放任何数据项上任何类型的锁

:遵循两段锁是可串行的充分条件。遵循两段锁也可能出现死锁

3.7封锁的粒度

封锁粒度,即封锁对象的大小(逻辑单元,数据库,元组...)

  • 封锁粒度越大,数据库能封锁的数据单元越,并发度就越,开销
  • 封锁粒度越小,数据库能封锁的数据单元越,并发度就越,开销

3.7.1多粒度封锁

多粒度封锁允许每个结点被独立地i加锁。多粒度封锁中的锁有向下继承关系

image

检查一个数据是否可以加锁:先检查自己,再看上下级的数据结点

3.7.2意向锁

如果对一个结点加意向锁,则说明该锁下层正在被加锁;对任一结点加锁,其上层结点都要加意向锁。可以提高检查效率

三种意向锁

  • 意向共享锁(IS锁):若对结点+S锁,则上层结点+IS锁
  • 意向排他锁(IX锁):若对结点+X锁,则上层结点+IX锁
  • 意向共享排他锁(SIX锁):若对结点+SIX锁,则它对同一个下结点+S和X锁(对同一个数据又读又修改,不排他)![1685974462931]image

注意:是否排他是对不同的事务来说

标签:封锁,事务,数据库,结点,并发,数据库系统,日志,概论
From: https://www.cnblogs.com/wht-de-bk/p/17537766.html

相关文章

  • jmeter: ${__P(THreadCount,)} 。P函数实现命令行变量,改变并发数和执行时间
         /export/apache-jmeter-5.4.1/bin/jmeter.sh-JrunTime300-JTHreadCount10 -n-tpinter_get.jmx-lpinter_test.jtl  ......
  • 中断、主函数并发操作全局变量
    原子操作:指一系列操作不能被打断(并不是指一条指令)参考文章:文章1文章2文章3......
  • 并发网络周测题解释版
    并发网络周测题【一】理论篇1.简述OSI七层协议OSI七层协议(OpenSystemsInterconnection)是一种用于计算机网络通信的参考模型。该模型将网络通信过程分解为七个不同的层次,每个层次负责特定的功能和任务,这有助于网络设备和应用程序之间的协作和互操作性。【1】物理层(Physica......
  • 并发网络周测题
    并发网络周测题【一】理论篇1.简述OSI七层协议2.什么是C/S和B/S架构?3.简述TCP三次握⼿、四次挥⼿的流程。4.TCP和UDP的区别?为何基于tcp协议的通信⽐基于udp协议的通信更可靠?5.什么是socket?简述基于tcp协议的套接字通信流程6.简述进程、线程、协程的区别7.什么是GIL锁?......
  • c# 高并发问题及解决方案
    1、数据的不一致性解决:加锁2、大量的数据读取请求解决:缓存3、操作系统单个进程线程创建上限限制,抛出异常解决:分布式、负载均衡4、秒杀活动,多个请求,单个资源解决:消息队列......
  • TCN时间卷积网络——解决LSTM的并发问题
    TCN是指时间卷积网络,一种新型的可以用来解决时间序列预测的算法。在这一两年中已有多篇论文提出,但是普遍认为下篇论文是TCN的开端。论文名称:AnEmpiricalEvaluationofGenericConvolutionalandRecurrentNetworksforSequenceModeling作者:ShaojieBai1J.ZicoKolter2Vl......
  • python 并发编程之线程
    一、队列的使用1、在python中,内置的有一个类,Queue就是队列2、队列的使用frommultiprocessingimportQueueif__name__=='__main__':q=Queue(3)#队列的大小默认很大#1.如何入队、"""obj,block=True,timeout=None"""q.put('hellow......
  • 进程概念、进程的并发和并行、同步异步阻塞非阻塞、开启进程Process类,属性,方法、如何
    进程概念#进程、线程都是操作系统中的基本概念,也就是说进程和线程都是操作系统层面的东西,专业术语表达就是进程和线程的使用都是有操作系统来调度的.而不时有我们程序员自己来操控的在操作系统这门课里面,进程和线程是操作系统的概念,协程不是操作系统中的概念,而是我们程序员层......
  • python基础day38 并发编程
    进程概念进程、线程都是操作系统中的基本概念,也就是说进程和线程都是操作系统层面的东西,专业术语表达就是进程和线程都是由操作系统来调度的,而不是由我们程序员自己来操控的。在操作系统这门课里面,进程和线程是操作系统的概念,协程不是操作系统中的概念,而是我们程序员层面的协程......
  • 并发扣减库存不使用分布式锁用幂等性怎么实现
    扣减库存接口/***Notes:修改或删除库存信息复核提交,移位完成,调拨完成后触发*原始库位扣减操作*User:sl*Date:2023-04-1117:31*@param$data*@param$type1,复核完成2调拨出库完成后扣减3,源库位移位完成后*移位......