`
OuYangGod
  • 浏览: 54324 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

MySQL InnoDB非阻塞式读的实现原理

阅读更多

以前在学习《数据库概论》这门课程的时候,了解到在可重复读这个隔离级别下,一个事务内同一个SELECT查询的多次执行会返回相同的结果,而这个是对查询返回的记录加共享锁来实现的。这样,别的事务如果要更新相同的记录的话就必要要等前一个事务先释放锁。说白了,这就是通过数据库三级封锁协议(三级封锁协议:在一级封锁协议的基础上,事务T在读取数据R之前,必须先对其加上S锁,直到事务结束后才释放。三级封锁协议可以防止丢失更新、脏读和不可重复读)实现的。

 

但是最近在Mysql数据库上测试的时候,发现一个事务在可重复读隔离级别下查询了某个记录,在没有提交前,别的事务居然可以更新、删除这个记录并且顺利地提交,而且在原事务内再次查询的时候,记录还和第一次返回一样。开始觉得太不可思议了,这和自己的理解完全不一样,上网查阅了相关的资料后才明白,原来Mysql使用了Multi-Version Concurrent Controll多版本并发控制的技术来实现非阻塞式读的。

 

MySQL InnoDB使用MVCC来实现非阻塞式读,在这个模式下,数据库会为每个数据记录维护多个版本。在可重复读隔离级别下,事务第一次查询记录的时候,会记录下一个时间点,在该事务内如果再次(可是以不同的SELECT)查询相同的数据的话,事务只会取时间点前的记录版本,这样在不需要对数据加锁的情况下就实现了可重复读的隔离级别了,而且并发性能更好。在同一事务内多次查询同一数据,也不是就返回一个固定的记录版本,如果事务先查询了某个记录,随后自己又更新了这个数据,等再查询该数据的话,返回的就是自己更新过后的数据版本了。

 

对于读已提交这个隔离级别,事务内的查询操作总是会取数据最新的有效版本,即最新的、别的事务已经提交的内容。通过MVCC,事务内的查询操作(这里排除SELECT FOR UPDATESELECT LOCK IN SHARE MODE两种情况)就不需要对数据加任何锁了,这样,别的事务就可以在不影响原事务的前提下自由的操作这些记录,极大的提升了并发性能。

分享到:
评论

相关推荐

    学习MySQL原理,InnoDB底层结构,锁,事务等实现原理.zip

    总结,学习MySQL的原理,特别是InnoDB的底层结构、锁机制、事务管理和并发控制,对于提升数据库性能和保证数据安全性至关重要。通过深入理解这些核心概念,开发者能够更好地设计和优化数据库,满足高性能、高可用性...

    Innodb存储引擎浅析—事务系统

    - **多版本控制协议**(MVCC):通过维护多个版本的数据,实现非阻塞读操作,并支持不同隔离级别的实现。 - **自动死锁检测**:能够自动检测并解决死锁情况。 - **自动崩溃恢复**:利用redo log等机制实现崩溃后的...

    阿里大牛何sir 深入MySQL加锁处理分析

    MySQL是一个支持插件式存储引擎的数据库系统,其中InnoDB存储引擎因其支持事务处理和外键约束而被广泛使用。本文将重点讨论InnoDB存储引擎的加锁机制。 MVCC(Multi-Version Concurrency Control,多版本并发控制)...

    mysql管理 原理2

    可以通过`mysqlhotcopy`进行在线备份,但这种方式并不是非阻塞的。MyISAM还具有延迟更新索引的特性,以提高写入性能。 InnoDB是MySQL的另一个核心存储引擎,它是事务安全的,支持多版本并发控制(MVCC),这大大提高...

    MySQL Clone Plugin备份同步原理与实践.pptx

    - **实现逻辑**:Clone Plugin基于InnoDB存储引擎,只克隆InnoDB表,因为MySQL 8.0已将系统表改为InnoDB。非InnoDB表不会被克隆。 - **监控**:利用`performance_schema`中的`clone_progress`和`clone_status`视图...

    MySQL锁的详细介绍

    * select 语句:InnoDB 引擎采用 MVCC 机制实现非阻塞读,所以对于普通的 select 语句,InnoDB 不加锁。 * select … from lock in share mode 语句:追加了共享锁,InnoDB 会使用 Next-Key Lock 锁进行处理,如果...

    浅谈MySQL和MariaDB区别(mariadb和mysql的性能比较)

    此外,它还引入了非阻塞操作和进度报告等新功能,提高了并发处理能力和用户体验。 在性能方面,根据所描述的简单对比测试,MariaDB在某些特定场景下似乎表现更优。在从大量数据中获取特定范围的数据时,MariaDB的...

    mysql索引,分布式事务,三阶段协议,b+树

    2. InnoDB存储引擎:提供了对分布式事务的支持,通过事务隔离级别(读未提交、读已提交、可重复读、串行化)来控制并发问题。 三、三阶段提交协议(3PC) 为了缓解2PC的问题,提出了三阶段提交协议,分为预准备、...

    线程池&异步 + linux + mysql

    对于MySQL,了解其存储引擎(如InnoDB和MyISAM)、索引原理、事务处理、锁机制等内容是必要的。优化SQL语句,避免全表扫描,合理设计数据库架构,以及使用连接池来管理数据库连接,都是提高数据库性能的关键。在高...

    mysql并发控制原理知识点

    MVCC是一种非阻塞的并发控制策略,减少加锁操作,提高读取效率。在InnoDB中,MVCC通过记录行的创建和删除版本来实现,确保事务在执行期间看到的数据一致性。在特定隔离级别下,如可重复读(REPEATABLE READ)和已...

    mvcc面试题以及图示.zip

    MVCC的基本思想是,每个事务看到的数据版本是其开始时的数据版本,而不是当前数据库的最新版本,从而避免了读写冲突,实现了非阻塞的读操作。** ### MVCC实现原理 1. **读不加锁(Read Without Locking)**:MVCC...

    Java面试专题-面试人员必看-微服务架构面试专题系列:Tomcat+Mysql+设计模式+并发+Netty+JVM.rar

    了解Netty的Channel、EventLoop、ByteBuf等核心概念,以及其非阻塞I/O模型。同时,理解Netty如何处理HTTP、WebSocket等协议,以及如何实现自定义协议。 6. **JVM**:Java虚拟机是Java程序运行的基础,深入理解JVM...

    MySQL数据库面试题.pdf

    42. **MySQL权限系统的工作原理**:MySQL使用权限表来控制用户对数据库对象的访问。 43. **防止SQL注入攻击**:使用参数化查询或预编译语句,避免直接拼接用户输入到SQL语句中。 44. **MySQL的密码管理策略**:...

    mysql经典性能查询SQL

    MySQL是世界上最流行的关系型数据库管理系统之一,其性能优化和查询效率是DBA和开发者关注的重点。以下是一些经典的MySQL性能查询SQL,...同时,对于初学者来说,这些都是深入了解MySQL工作原理和性能调优的宝贵资源。

    一键lnmp(nginx 1.13+mysql5.5+php5.3)

    1. **事件驱动模型**:Nginx使用异步、非阻塞I/O模型,使其能够高效处理大量并发连接。 2. **反向代理**:Nginx可以作为反向代理服务器,转发来自客户端的请求到后端应用服务器,如PHP-FPM。 3. **负载均衡**:Nginx...

    物理备份,xtrabackup包 适用于MySQL5.7及以前

    1. **非阻塞备份**:Xtrabackup可以在不锁定表的情况下进行全量备份,这样就不会影响到在线业务。 2. **增量和差异备份**:除了全量备份,Xtrabackup还支持基于上一次全量或增量备份的增量和差异备份,有效减少备份...

    percona XtraBackup2.4.28

    Percona XtraBackup是专为MySQL数据库设计的一款高效、开源的热备份工具,尤其适用于InnoDB和XtraDB存储引擎的非阻塞备份。这款工具允许在不锁定数据库的情况下进行备份,确保生产环境中的服务不受影响,不论是高...

    MySQL性能优化

    在不影响业务的前提下,尽量选择非阻塞操作,如异步插入。 5. **服务器优化**:硬件层面,选择合适的服务器配置,包括足够的内存、快速的磁盘和强大的CPU。软件层面,操作系统调优如内存管理、文件系统和网络设置也...

Global site tag (gtag.js) - Google Analytics