并发控制

简介: 并发控制.

1.为什么需要并发控制?

当多个用户操作同一数据时,如果不加以控制。可能会存取不正确的数据。破坏数据库的数据、数据库的一致性。

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

3.为了保证事务的隔离性以及一致性。数据库需要对并发操作进行正确的调度

4.并发操作的不正确调度带来的问题以及解决方案:

带来的问题 解释 解决方案
丢失修改 多个事务对同一数据对象的写操作,导致前一个事务的值被后一个事务的值覆盖 遵循一级封锁协议
不可重复读 事务在读取数据时,同时有事务操作了此数据。导致事务再一次读取时无法重现之前的值 遵循三级封锁协议
脏读 事务在读取数据时,由于某原因,数据被撤销。导致读到的值与数据库的值不一致 遵循二级封锁协议

5.并发控制的几种技术:

封锁、时间戳、乐观控制法、多版本并发控制。

6.两种封锁:

  • 写锁(X锁):当事务T对数据项加X锁时,只允许T对数据进行读取以及写操作。
  • 读锁(S锁):当事务T对数据项加S锁时,只允许事务读数据。

7.封锁协议:

  • 一级封锁协议:当事务需要对数据项进行写操作时,需要向系统申请该数据的X锁。直到事务结束,才能释放X锁。(解决了丢失修改)
  • 二级封锁协议:在一级封锁协议的基础上。增加了事务在读取数据时,需要向系统申请S锁,直到读完才能释放S锁。(解决了脏读)
  • 三级封锁协议:在一级封锁协议的基础上。增加了事务在读取数据时,需要想系统申请S锁,直到事务结束,才能释放S锁。(解决了不可重复读)

8.活锁以及死锁

  • 活锁:多个事务读取数据时,没有按照先来先服务的原则。导致某些事务永久处于等待状态。
  • 死锁:事务A对B加X锁。事务C对D加X锁。A需要D,C需要B。导致事务永远不能结束。陷入死锁。

9.死锁地预防:

  • 一次封锁法:要求每个事务一次将要使用的所有数据加锁,否则不能继续执行
  • 顺序封锁法:预先对数据对象规定封锁顺序,事务都按这个顺序实施封锁

10.死锁的诊断:

  • 超时法:一个事物等待时间超过了规定时限,就认为发生了死锁
  • 等待图法:每个结点表示正运行的事务,边表示事务等待情况,如果发现图中存在回路,则发生死锁

11.死锁的解除:

选择一个处理死锁代价最小的事务,将其撤销,释放其持有的锁,使其他事务得以继续运行

12.可串行化调度

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

13.可串行性是并发事务正确调度的准则。

14.两段锁协议:

  • 第一阶段:获得封锁,也成为扩展阶段,这一阶段事务可以申请获取任何数据项上的任何类型的锁,但不能释放任何锁
  • 第二阶段:释放封锁,也成为收缩阶段,这一阶段事务可以释放任何数据项上的任何类型的锁,但不能申请任何锁。

15.事务遵循两段锁协议是可串行化调度的充分条件。冲突可串行化调度是可串行化调度的充分条件。

16.意向锁:

如果对一个节点加锁,则需要对它的上级加意向锁。

  • IS锁:后裔节点加了S锁。
  • IX锁:后裔节点加了X锁。
  • SIX锁:自己加了S锁,后裔节点加了X锁。

17.冲突可串行化: 一个调度,将任意两个相邻的不冲突操作交换位置。使操作后的序列 可串行化。

目录
相关文章
|
3月前
|
存储 关系型数据库 数据库
聊多版本并发控制(MVCC)
MVCC是数据库并发控制技术,用于减少读写冲突。它维护数据的多个版本,使事务能读旧数据而写新数据,无需锁定记录。当前读获取最新版本,加锁防止修改;快照读不加锁,根据读取时的读视图(readview)决定读哪个版本。InnoDB通过隐藏字段(DB_TRX_ID, DB_ROLL_PTR)和undo log存储版本,readview记录活跃事务ID。读已提交每次读取都创建新视图,可重复读则在整个事务中复用一个视图,确保一致性。MVCC通过undo log版本链和readview规则决定事务可见性,实现了非阻塞并发读。
204 5
聊多版本并发控制(MVCC)
|
10月前
|
存储 关系型数据库 MySQL
MVCC多版本并发控制
MVCC多版本并发控制 1、MVCC MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
71 0
|
1月前
|
SQL 监控 Java
深入理解悲观锁与其在并发控制中的应用
深入理解悲观锁与其在并发控制中的应用
|
2月前
|
存储 关系型数据库 MySQL
第16章_多版本并发控制
第16章_多版本并发控制
18 0
|
3月前
|
存储 关系型数据库 MySQL
MVCC:深入解析多版本并发控制机制
【4月更文挑战第20天】MVCC是数据库并发控制的关键技术,通过保存数据多个版本,使读写操作无锁并发,减少锁竞争,提高并发性能。它保证事务看到一致数据快照,避免并发问题,并支持事务回滚与恢复。MVCC广泛应用于PostgreSQL、InnoDB等,提供时间旅行查询和无锁读等功能,对于构建高性能、高并发数据库系统至关重要。
83 13
|
3月前
|
关系型数据库 MySQL 数据库
并发控制
并发控制
29 1
|
3月前
|
存储 SQL 关系型数据库
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
105 0
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
|
10月前
|
存储 关系型数据库 Go
深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
181 0
|
存储 关系型数据库 MySQL
第16章_多版本并发控制(上)
第16章_多版本并发控制
82 0
|
SQL 关系型数据库 MySQL
第16章_多版本并发控制(下)
第16章_多版本并发控制
112 0