为什么需要MVCC 隔离级别

简介: 【8月更文挑战第5天】

锁本身就是用于并发控制的,那么为什么InnoDB还要引入MVCC,读写都加锁不就可以控制住并发吗?
锁确实可以,但是性能太差。如果是纯粹的锁,那么写和写、读和写、读和读之间都是互斥的。如果是读写锁,那么写和写、读和写之间依旧是互斥的。
数据库和一般的应用有一个很大的区别,就是数据库即使是读,也不能被写阻塞住
所以数据库要有一种机制,避免读写阻塞。在理解了为什么MVCC必不可少后,现在你需要进一步了解一个和MVCC紧密关联的概念:隔离级别

数据库的隔离级别是一组规则,用来控制并发访问数据库时如何分配、保护和共享资源。不同的隔离级别在不同的并发控制策略之间进行调整,从而提供了不同的读写隔离级别和安全性。隔离级别代表了一个事务是否了解别的事务以及了解程度怎么样。
MySQL的隔离级别有四个。

  1. 读未提交 Read Uncommitted 是指一个事务可以另外一个事务尚未提交的修改

  2. 读已提交 Read Committed 是指一个事务只能看到已经提交的事务的修改。如果在事务执行过程中有别的事务提交了,那么事务还是能够看到别的事务最新提交的修改

  3. 可重复读 Repeatable Read 是指在这一个事务内部读同一个数据多次,读到的结果都是同一个。这意味着,即使在事务执行过程中有别的事务提交,这个事务依旧看不到别的事务提交的修改。这是MySQL默认的隔离级别。

  4. 串行化 Serializable 是指事务对数据的读写都是串行化的

从上到下,隔离性变强了但是性能变差了,所以一个提升MySQL性能最简单的方式,就是把隔离级别往下调,这也是我们的一个亮点方案。

目录
相关文章
|
存储 关系型数据库 MySQL
MVCC多版本并发控制
MVCC多版本并发控制 1、MVCC MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。
92 0
|
1天前
MVCC 与其他并发控制机制的区别
【10月更文挑战第15天】总之,MVCC 与其他并发控制机制各有特点和适用场景。在实际应用中,需要根据具体的业务需求和系统特点选择合适的并发控制机制,以实现最佳的性能和数据一致性。
|
2月前
|
存储 Java 数据库
|
5月前
|
存储 关系型数据库 MySQL
MVCC:深入解析多版本并发控制机制
【4月更文挑战第20天】MVCC是数据库并发控制的关键技术,通过保存数据多个版本,使读写操作无锁并发,减少锁竞争,提高并发性能。它保证事务看到一致数据快照,避免并发问题,并支持事务回滚与恢复。MVCC广泛应用于PostgreSQL、InnoDB等,提供时间旅行查询和无锁读等功能,对于构建高性能、高并发数据库系统至关重要。
138 13
|
5月前
|
关系型数据库 数据库
关于innodb下,幻读是如何被解决的
关于innodb下,幻读是如何被解决的
62 0
|
5月前
|
存储 缓存 关系型数据库
RR有幻读问题吗?MVCC能否解决幻读?
RR有幻读问题吗?MVCC能否解决幻读?
60 0
RR有幻读问题吗?MVCC能否解决幻读?
|
5月前
|
SQL
事务的隔离级别
事务的隔离级别 多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题。设置不同隔离级别就可以解决 1.脏读:一个事务,读取到另一个事务中没有提交的数据 2.不可重复读,在同一个事务中,两次读取的数据不一样 3.幻读:(dml)一个事务操作数据表中记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改 隔离级别 1.read uncommitted:读未提交 产生问题:脏读、不可重复读、幻读 2.read committed:读已提交 产生问题:不可重复读、幻读 3.repeatable read:可重复读 产生问题:幻读 4.serializable:串行
43 0
|
5月前
|
供应链 数据库
|
算法 关系型数据库 MySQL
事务的隔离级别和对应的问题
事务的隔离级别和对应的问题
|
存储 关系型数据库 Java
MVCC你了解多少?
MVCC(Multi-Version Concurrency Control)是一种并发控制机制,用于解决数据库中并发访问数据时可能出现的读-写冲突问题。MVCC通过为每个事务分配一个唯一的事务ID,并为每个数据项维护多个版本,使得读操作可以同时进行,从而提高并发性能。 MVCC的核心思想是通过版本号或时间戳来区分不同的事务和数据版本。当一个事务开始时,它会被分配一个唯一的事务ID,并在执行读操作时,只能看到在该事务开始之前已经提交的数据版本。这样,即使其他事务正在修改数据,当前事务也不会受到影响,从而避免了读-写冲突。
136 0