`
风雪涟漪
  • 浏览: 508772 次
  • 性别: Icon_minigender_1
  • 来自: 大连->北京
博客专栏
952ab666-b589-3ca9-8be6-3772bb8d36d4
搜索引擎基础(Search...
浏览量:9069
Ae468720-c1b2-3218-bad0-65e2f3d5477e
SEO策略
浏览量:18487
社区版块
存档分类
最新评论

MySQL 架构 - 多版本并发控制

阅读更多

多版本并发控制

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




 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    mysql-connector-java-8.0.24

    - 更好的线程安全性和并发处理能力,适应多线程和高并发应用。 - 提供了JDBC 4.2及以上的规范接口,兼容各种Java框架和ORM工具,如Hibernate和MyBatis。 - 包含错误处理和异常处理机制,帮助开发者更好地诊断和解决...

    MySQL架构执行与SQL性能优化 MySQL高并发详解 MySQL数据库优化训练营四期课程

    MySQL架构执行与SQL性能优化-MySQL高并发详解课程,课程的目标简单明确,核心就是MySQL的性能优化与高并发。课程内容进行了精华的浓缩,有四大内容主旨,MySQL架构与执行流程,MySQL索引原理详解,MySQL事务原理与...

    mysql-5.7版本源码包

    MySQL 5.7版本引入了多项改进,旨在提高查询性能、安全性和可扩展性。以下是一些主要知识点: 1. **存储引擎**:MySQL支持多种存储引擎,如InnoDB(默认)、MyISAM、Memory等。在5.7中,InnoDB成为默认引擎,提供...

    mysql5.7-arm64.zip

    标题中的“mysql5.7-arm64.zip”指的是MySQL数据库管理系统的一个特定版本,即5.7版,适配于ARM64架构的处理器。描述提到的“银河麒麟系统”是中国自主研发的操作系统,主要针对服务器和桌面环境,具有良好的安全性...

    mysql-5.7.32-linux-glibc-2.28-aarch64.tar.gz

    总的来说,"mysql-5.7.32-linux-glibc-2.28-aarch64.tar.gz"是为ARM架构设计的MySQL版本,旨在为基于ARM的设备提供稳定且高效的数据存储和管理解决方案。正确安装和配置MySQL 5.7.32,可以充分利用这些设备的潜力,...

    mysql-8.0.31-winx64-debug-test.zip

    对于MySQL这样的数据库系统,测试套件通常包括各种SQL查询、并发操作和性能测试,确保其在不同场景下的正确性和稳定性。 6. **mysql-8.0.31-winx64**:这个文件名可能代表压缩包解压后的根目录,其中包含了所有...

    mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz

    此外,InnoDB也增强了行级锁定和多版本并发控制(MVCC),降低了锁竞争,从而提高了多用户环境下的性能。 MySQL 5.7还增强了SQL查询的处理能力,比如支持窗口函数,使得在复杂的数据分析和报表生成中更加便捷。另外...

    MySQL-5.5.28-winx64安装包以及说明文档

    - **性能优化**:监控和调整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.tar.gz"包含了MySQL服务器的5.7.17版本,专为运行在Linux系统上(基于glibc2.5库)的x86_64架构设计。在这个版本中,MySQL引入了许多性能优化和新特性,使得它...

    MySQL-5.6.17-liunx-32bit

    本文将详述关于“MySQL-5.6.17-linux-32bit”这一特定版本的知识点,包括其特点、安装过程以及在Linux 32位系统上的应用。 MySQL 5.6.17是MySQL的第五个主要版本,它带来了许多性能提升和新特性。此版本对查询优化...

    MySQL逻辑架构-存储引擎-用户权限密码详解

    服务层是MySQL架构的最上层,主要负责客户端的连接处理、授权认证以及安全检查,为客户端提供访问MySQL服务的接口。 核心层主要包含查询解析、分析优化SQL语句,以及缓存查询结果等功能,是MySQL处理数据的核心部分...

    MySQL8.4.0 LTS(mysql-8.4.0-solaris11-sparc-64bit.tar.gz)

    2. **InnoDB存储引擎升级**:作为MySQL的核心存储引擎,InnoDB在8.4.0版本中可能引入了更多并发控制策略,如改进的自适应哈希索引、更有效的事务处理和更好的行锁定机制,以提高多用户环境下的并发性能。 3. **安全...

    mysql-boost-5.7.24.tar.gz

    "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的一个重要版本,...

    mysql源码(mysql-8.2.0.zip)

    5. **复制与集群**:MySQL的复制功能使得数据可以从主服务器同步到多个从服务器,提高可用性和容灾能力。8.2.0版本可能会包含更先进的复制策略和性能优化。集群技术如Group Replication也可能有所改进。 6. **性能...

    MySQL-Cluster架构图文详解

    ### MySQL-Cluster 架构详解 #### 一、配置环境 **操作系统**: Linux CentOS 5.0 **MySQL版本**: mysql-cluster-gpl-7.1.13-linux-i686-glibc23.tar.gz(需确保是Cluster版本,可从官网下载:...

    MySQL 5.5.28-1 linux2.6.x86_64.rpm

    1. **InnoDB存储引擎增强**:InnoDB是MySQL中支持事务处理的主要存储引擎,5.5版本对其进行了优化,提高了并发性能,并增强了对ACID(原子性、一致性、隔离性、持久性)的遵循。 2. **性能提升**:包括查询优化器的...

    mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz

    这个特定的压缩包"mysql-5.6.38-linux-glibc2.12-x86_64.tar.gz"是为基于Linux的系统设计的,特别是那些使用glibc(GNU C库)版本2.12或更高版本的32位x86架构的系统。glibc是Linux系统中的核心部分,提供了许多系统...

    mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

    这个版本支持GLIBC 2.12库,适用于64位处理器架构。 **MySQL 5.7.24 版本详解** MySQL 5.7是其主版本中的一个重要里程碑,引入了诸多性能提升、功能增强以及安全性改进。5.7.24作为该系列的一个稳定版本,主要包含...

    最新版windows mysql-8.0.20-winx64.zip

    winx64表示这个版本是针对64位Windows操作系统的,这允许MySQL利用更多的内存资源,提高处理大数据集时的性能。64位版本还能够处理超过4GB的大数据库,这对于需要处理大量数据的应用程序至关重要。 3. **安装与...

    MySQL-client-5.6.29-1.linux_glibc2.5.x86_64.rar

    5. **多线程支持**:在多线程环境中,MySQL客户端可以同时处理多个连接,使得并发操作成为可能。 6. **性能优化**:MySQL 5.6版本引入了许多性能优化特性,例如更高效的查询缓存、InnoDB存储引擎的改进,以及对分区...

Global site tag (gtag.js) - Google Analytics