多版本并发控制
Multiversion Concurrency Control
大部分的MySQL的存储引擎,比如InnoDB,Falcon,以及PBXT并不是简简单单的使用行锁机制。它们都使用了行锁结合一种提高并发的技术,被称为MVCC(多版本并发控制)。MVCC并不单单应用在MySQL中,其他的数据库如Oracle,PostgreSQL,以及其他数据库也使用这个技术。
MVCC避免了许多需要加锁的情形以及降低消耗。这取决于它实现的方式,它允许非阻塞读取,在写的操作的时候阻塞必要的记录。
MVCC保存了某一时刻数据的一个快照。意思就是无论事物运行了多久,它们都能看到一致的数据。也就是说在相同的时间下,不同的事物看相同表的数据是不同的。如果你从来没有这方面的经验,可能说这些有点令人困惑。但是在以后这个会很容易理解和熟悉的。
每个存储引擎实现MVCC方式都是不同的。有许多种包含了乐观(optimistic)和悲观(pessimistic)的并发控制。我们用简单的InnoDb的行为来举例说明MVCC工作方式。
InnoDB实现MVCC的方法是,它存储了每一行的两个额外的隐藏字段,这两个隐藏字段分别记录了行的创建的时间和删除的时间。在每个事件发生的时候,每行存储版本号,而不是存储事件实际发生的时间。每次事物的开始这个版本号都会增加。自记录时间开始,每个事物都会保存记录的系统版本号。依照事物的版本来检查每行的版本号。在事物隔离级别为可重复读的情况下,来看看怎样应用它。
SELECT
InnoDB检查每行,要确定它符合两个标准。
- InnoDB必须知道行的版本号,这个行的版本号至少要和事物版本号一样的老。(也就是是说它的版本号可能少于或者和事物版本号相同)。这个既能确定事物开始之前行是存在的,也能确定事物创建或修改了这行。
- 行的删除操作的版本一定是未定义的或者大于事物的版本号。确定了事物开始之前,行没有被删除。
符合了以上两点。会返回查询结果。
INSERT
InnoDB记录了当前新增行的系统版本号。
DELETE
InnoDB记录的删除行的系统版本号作为行的删除ID。
UPDATE
InnoDB复制了一行。这个新行的版本号使用了系统版本号。它也把系统版本号作为了删除行的版本。
所有其他记录的结果保存是,从未获得锁的查询。这样它们查询的数据就会尽可能的快。要确定查询行要遵循这些标准。缺点是存储引擎要为每一行存储更多的数据,检查行的时候要做更多的处理以及其他内部的一些操作。
MVCC只能在可重复读和可提交读的隔离级别下生效。不可提交读不能使用它的原因是不能读取符合事物版本的行版本。它们总是读取最新的行版本。可序列化不能使用MVCC的原因是,它总是要锁定行。
下面的表说明了在MySQL中不同锁的模式以及并发级别。
锁的策略 |
并发性 |
开销 |
引擎 |
表 |
最低 |
最低 |
MyISAM,Merge,Memory |
行 |
高 |
高 |
NDB Cluster |
行和MVCC |
最高 |
最高 |
InnoDB,Falcon,PBXT,solidDB |
分享到:
相关推荐
- 更好的线程安全性和并发处理能力,适应多线程和高并发应用。 - 提供了JDBC 4.2及以上的规范接口,兼容各种Java框架和ORM工具,如Hibernate和MyBatis。 - 包含错误处理和异常处理机制,帮助开发者更好地诊断和解决...
MySQL架构执行与SQL性能优化-MySQL高并发详解课程,课程的目标简单明确,核心就是MySQL的性能优化与高并发。课程内容进行了精华的浓缩,有四大内容主旨,MySQL架构与执行流程,MySQL索引原理详解,MySQL事务原理与...
MySQL 5.7版本引入了多项改进,旨在提高查询性能、安全性和可扩展性。以下是一些主要知识点: 1. **存储引擎**:MySQL支持多种存储引擎,如InnoDB(默认)、MyISAM、Memory等。在5.7中,InnoDB成为默认引擎,提供...
标题中的“mysql5.7-arm64.zip”指的是MySQL数据库管理系统的一个特定版本,即5.7版,适配于ARM64架构的处理器。描述提到的“银河麒麟系统”是中国自主研发的操作系统,主要针对服务器和桌面环境,具有良好的安全性...
总的来说,"mysql-5.7.32-linux-glibc-2.28-aarch64.tar.gz"是为ARM架构设计的MySQL版本,旨在为基于ARM的设备提供稳定且高效的数据存储和管理解决方案。正确安装和配置MySQL 5.7.32,可以充分利用这些设备的潜力,...
对于MySQL这样的数据库系统,测试套件通常包括各种SQL查询、并发操作和性能测试,确保其在不同场景下的正确性和稳定性。 6. **mysql-8.0.31-winx64**:这个文件名可能代表压缩包解压后的根目录,其中包含了所有...
此外,InnoDB也增强了行级锁定和多版本并发控制(MVCC),降低了锁竞争,从而提高了多用户环境下的性能。 MySQL 5.7还增强了SQL查询的处理能力,比如支持窗口函数,使得在复杂的数据分析和报表生成中更加便捷。另外...
- **性能优化**:监控和调整MySQL的性能参数,如innodb_buffer_pool_size、query_cache_size等,以及合理设计数据库架构,可以显著提升系统性能。 - **复制与集群**:MySQL支持主从复制和集群配置,用于提高可用性...
这个压缩包文件"mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz"包含了MySQL服务器的5.7.17版本,专为运行在Linux系统上(基于glibc2.5库)的x86_64架构设计。在这个版本中,MySQL引入了许多性能优化和新特性,使得它...
本文将详述关于“MySQL-5.6.17-linux-32bit”这一特定版本的知识点,包括其特点、安装过程以及在Linux 32位系统上的应用。 MySQL 5.6.17是MySQL的第五个主要版本,它带来了许多性能提升和新特性。此版本对查询优化...
服务层是MySQL架构的最上层,主要负责客户端的连接处理、授权认证以及安全检查,为客户端提供访问MySQL服务的接口。 核心层主要包含查询解析、分析优化SQL语句,以及缓存查询结果等功能,是MySQL处理数据的核心部分...
2. **InnoDB存储引擎升级**:作为MySQL的核心存储引擎,InnoDB在8.4.0版本中可能引入了更多并发控制策略,如改进的自适应哈希索引、更有效的事务处理和更好的行锁定机制,以提高多用户环境下的并发性能。 3. **安全...
"mysql-boost-5.7.24.tar.gz" 是一个包含了MySQL与Boost集成的源码包,版本为5.7.24,适用于Linux环境下的LNMP(Linux、Nginx、MySQL、PHP)架构搭建。 **MySQL 5.7.24 知识点** MySQL 5.7是MySQL的一个重要版本,...
5. **复制与集群**:MySQL的复制功能使得数据可以从主服务器同步到多个从服务器,提高可用性和容灾能力。8.2.0版本可能会包含更先进的复制策略和性能优化。集群技术如Group Replication也可能有所改进。 6. **性能...
### MySQL-Cluster 架构详解 #### 一、配置环境 **操作系统**: Linux CentOS 5.0 **MySQL版本**: mysql-cluster-gpl-7.1.13-linux-i686-glibc23.tar.gz(需确保是Cluster版本,可从官网下载:...
1. **InnoDB存储引擎增强**:InnoDB是MySQL中支持事务处理的主要存储引擎,5.5版本对其进行了优化,提高了并发性能,并增强了对ACID(原子性、一致性、隔离性、持久性)的遵循。 2. **性能提升**:包括查询优化器的...
这个特定的压缩包"mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz"是为基于Linux的系统设计的,特别是那些使用glibc(GNU C库)版本2.12或更高版本的32位x86架构的系统。glibc是Linux系统中的核心部分,提供了许多系统...
这个版本支持GLIBC 2.12库,适用于64位处理器架构。 **MySQL 5.7.24 版本详解** MySQL 5.7是其主版本中的一个重要里程碑,引入了诸多性能提升、功能增强以及安全性改进。5.7.24作为该系列的一个稳定版本,主要包含...
winx64表示这个版本是针对64位Windows操作系统的,这允许MySQL利用更多的内存资源,提高处理大数据集时的性能。64位版本还能够处理超过4GB的大数据库,这对于需要处理大量数据的应用程序至关重要。 3. **安装与...
5. **多线程支持**:在多线程环境中,MySQL客户端可以同时处理多个连接,使得并发操作成为可能。 6. **性能优化**:MySQL 5.6版本引入了许多性能优化特性,例如更高效的查询缓存、InnoDB存储引擎的改进,以及对分区...