首页 > 数据库 >数据库总结复习(并发控制二)

数据库总结复习(并发控制二)

时间:2023-11-23 23:45:47浏览次数:47  
标签:事务 加锁 复习 数据库 并发 死锁 串行 串行化 r1

目录

前言

本文为JMU22级数据库原理考前复习而总结归纳,刨除了课本以及课堂上晦涩且长篇大论的文章,以尽量简洁易懂的语句来对知识点进行归纳。

上一篇文章 关于文章末尾提到的“诊断-解除法”接着对并发控制进行归纳总结。
关于并发控制,还会有一篇文章介绍“封锁粒度”的相关内容。



死锁解决方法

超时等待法

先设置规定的时限,一旦有事务超过期限,就认为它处于死锁状态,然后就撤销它。

缺点:如果一个事务过长,会被误判。

等待图法

所有事务作为图节点,如果是事务T1等待事务T2,就画一条T1指向T2的有向边。出现回路就是互相等待,就是死锁。就会撤销。
缺点:维护和判断回路的开销很大。


这两种方法都是撤销代价最小的事务。



串行化

概念

多个事务并行执行的结果如果正确,应该与串行执行操作的结果一样。这样的并行就是可串行化调度。
也可以说可串行性是判断并行调度正确性的准则。


验证串行化

冲突可串行化是串行化的充分条件。(不是必要条件)
冲突是指:不同事务对同一数据对象同时进行写写或读写操作。
image

判断冲突可串行化

交换不冲突的事务,且保持冲突操作次序不变。如果最后能够变为串行调度,则可串行化,所以存在正确的并发调度方法。

  • 注意,串行化这个词蕴含着,事务各个操作的顺序不能改变。

举例

现有一个调度序列:r1(A)w1(A) r2(A)w2(A) r1(B)w1(B) r2(B)w2(B)
r1(A)代表,事务1对数据对象A进行读操作。
分析该序列,是事务1和2并行对数据对象A和B进行读写操作。
事务1:r1(A)w1(A)r1(B)w1(B)
事务2:r2(A)w2(A)r2(B)w2(B)

 

所以要想办法通过交换不冲突的事务来串行化,注意到事务1在第一位置,所以接下来就尝试按先1后2来串行。所以要把2换到后面。

image



为了保证可串行而出现的封锁协议--两段锁协议

概念

两段锁协议就是事务加锁解锁构成的整个操作序列,一定要是先加锁后解锁,不能加锁和解锁混杂。并且对任何读写操作都要加锁。
两段锁协议是可串行化调度的充分条件(非必要)。
image

与一次封锁的区别

一次封锁是事务开头全部加锁。导致成为串行。
两段锁是操作之前加锁。有一定程度的并行。

标签:事务,加锁,复习,数据库,并发,死锁,串行,串行化,r1
From: https://www.cnblogs.com/lmj00/p/17852798.html

相关文章

  • 高斯数据库HCNA之双机数据库安装
    一、双机数据库安装1、禁用防火墙及SElinuxsystemctlstopfirewalldsystemctldisablefirewalldsed-i-e's,enforcing,disabled,'/etc/selinux/config2、创建用户groupadddbgrpuseradd-gdbgrp-d/home/omm-m-s/bin/bashommechoredhat|passwd--stdinomm3......
  • 数据库
    数据库基础面试第一弹 1.SQL语句类型1.DDL(DataDefinitionLanguage,数据定义语言):DDL语句用于定义数据库对象(如表、索引、视图等)。常见的DDL语句包括:CREATE:用于创建数据库对象,如创建表、索引、视图等。ALTER:用于修改数据库对象的结构,如修改表的列、添加约束等......
  • C#winform中使用SQLite数据库
    公众号「DotNet学习交流」,分享学习DotNet的点滴。SQLite简介SQLite是一种轻量级的关系型数据库管理系统(RDBMS),它以一个C库的形式提供。以下是SQLite数据库的一些关键特点:1、无服务器:SQLite是一种无服务器的数据库管理系统,这意味着它不需要单独的服务器进程来运行。应用程序直接......
  • 第二单元 数据库操作
    1.数据库文件组成主数据文件主要数据文件的建议文件扩展名是.mdf。主要数据文件包含数据库的启动信息,并指向数据库中的其他文件,存储部分或全部的数据。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。mdf文件并非普通......
  • openGauss学习笔记-131 openGauss 数据库运维-启停openGauss
    openGauss学习笔记-131openGauss数据库运维-启停openGauss131.1启动openGauss以操作系统用户omm登录数据库主节点。使用以下命令启动openGauss。gs_om-tstart说明:双机启动必须以双机模式启动,若中间过程以单机模式启动,则必须修复才能恢复双机关系,用gs_ctlbuild进......
  • MAUI Sqlite数据库的使用
    1、安装1)Nuget中搜索sqlite-net-pcl安装2)搜索安装sqlitepclraw.bundle_green2、使用FileSystem.AppDataDirectory:获取可存储应用数据的位置1)建一个常量类,方便使用,文件名constants.cs2)再在services文件夹建一个DatabaseService.cs,使用sqlite数据库的类3、自增列创建类属性......
  • 关系(SQL)与非关系(NoSQL)型数据库
    关系型数据库行列式表存储结构化数据需要预定义数据类型数据量和查询量都不大,如果数据量大要做分表对数据一致性、完整性约束、事务性、可靠性要求比较高支持多表Join操作支持多表间的完整性,要删除A表的某条数据,可能需要先删除B表的某些数据SQL的增删改查功能强较......
  • windows版本--人大金仓数据库连接报错----启动----及替换过期的授权文件
       启动服务命令:1、找到安装目录下server的bin进行cmd C:\ProgramFiles\Kingbase\ES\V8\KESRealPro\V008R006C007B0012\Server\bin2、执行命令:sys_ctl.exe-D"data的存放目录"startsys_ctl.exe-D"C:\ProgramFiles\Kingbase\ES\V8\data"start 3、去官网根......
  • 您可以尝试添加 --skip-broken 选项来解决该问题 ** 发现 2 个已存在的 RPM 数据库问
    ##提示如下**Found2pre-existingrpmdbproblem(s),‘yumcheck’outputfollows:2:postfix-2.10.1-7.el7.x86_64hasmissingrequiresoflibmysqlclient.so.18()(64bit)2:postfix-2.10.1-7.el7.x86_64hasmissingrequiresoflibmysqlclient.so.18(libmysqlclient_18)......
  • 数据库备份与恢复
    生产环境中,数据的安全性是至关重要的,任何数据的丢失都可能产生严重的后果造成数据丢失的原因:程序错误、误操作(占比最大)、计算机失败、磁盘失败、物理灾难选择备份的依据是:丢失数据的代价与确保数据不丢失的代价之比数据库备份分类物理与逻辑区分物理备份:指对数据库操作系......