InnoDB秘籍:MVCC机制与行锁的深度探索(1)

云掣YunChe5个月前技术文章155


前言



事务的起源可以追溯到 6000 年以前,当时苏美尔人(Sumerians)就发明了事务处理和记录的方法。已知最早的记录是写在土块上的,上面写了皇家的税收、土地、谷物、牲畜、奴隶和黄金,明确地记下了每笔交易。


这种早期的系统已经具备了事务处理的关键特征。记录使用的土块和记号方式就是数据库,土块每次的加入都会造成数据状态的变化,在现在可以称为事务。


1f036a485cbf50fb18316977351d90ab.png

PS:左图是苏美尔发明的 60 进位制,右图是考古发现的苏美尔人用于记录赋税的泥板。


事务是数据库关系系统中的一系列操作的一个逻辑单位。


这种基于土块的事务处理系统的技术演变了数千年,经历了纸莎草纸、羊皮纸、到我们现在用的纸张。在19世纪后期,出现了打孔卡片计算机系统,应用于1890 年美国人口普查的数据存储和记录。20 世纪前半叶,对事务处理的需求促进了打孔卡片计算机的发展,提升了其查询和更新速度,1 秒可以处理一张卡片,这种系统被应用于库存控制和记账。


到了 20 世纪后半叶,事务处理出现了重大的进展,发展了基于磁性存储介质的成批事务处理以及随后基于电子存储和计算机网络的联机事务处理。事务处理的速度呈几何倍增长,极大地促进了计算机工业的发展。

9b70e2669a0c344f93ef751886a3f9e6.png


今天,事务处理被应用于各个核心领域,典型使用场景包括:银行交易、电子订单、火车预定、股票交易、自动收款、作业和存货规划、记账等。随着事务技术的发展和广泛应用,对事务处理的性能安全要求也越来越高。数据库系统中事务处理机制,需要在满足性能的前提下,保证用户的数据操作动作对数据是安全的。


本篇文章,将介绍 MySQL InnoDB 引擎中的事务处理机制,探究它是如何保障用户数据操作的安全。




事务处理挑战




a9f100e28273b34e6fb422ae49411e63.png



01

事务机制处理的问题


上面提到的事务处理机制,是为了保证用户对数据库的操作对数据是安全的。如何保障事务安全呢?在 1970 年, IBM 研究员发表了《关系模型的数据库管理系统》一文,首次提出了ACID 事务模型。数据只有在带有 ACID 四个特性的事务处理机制的保障下,才可以被认为是安全的。


  • 原子性(Atomicity):事务被视为一个原子操作,要么全部执行成功,要么全部执行失败,如果事务中的任何一部分操作失败,那么整个事务将回滚到初始状态,不会留下部分执行的结果。

  • 一致性(Consistency):事务要保证数据库整体数据的完整性和业务数据的一致性,事务成功则提交整体数据修改,事务错误则回滚到数据回到原来的状态。

  • 隔离性(Isolation):隔离性是说两个事务的执行都是独立隔离开来的,事务之间不会相互影响,多个事务操作一个对象时会以串行等待的方式保证事务相互之间是隔离的。

  • 持久性(Durability):一旦事务提交成功,其结果将永久保存在数据库中,并且对于系统故障或崩溃是持久的。即使在系统故障后进行恢复,数据库也能保持事务的持久性。


事务模型是商业世界运作的基石,主要体现在交易处理电子化。作为一个软件系统,数据库系统会遭遇一些故障,如我们常说的硬件故障、系统故障、介质故障等。对于数据库系统,因为数据实在太为重要,数据库系统应该能够保证在出现故障时,数据的流动依然满足 ACID 特性。


02

并发事务带来的问题

在 1990 年以前,数据库是非常简单的,隔离级别以及并发控制是没有标准的,用户需要处理无数的数据异常情况。为了解决这个问题,ASNI 美国国家标准学会推出 SQL-92 standard 基于并发带来的异象,首次尝试对隔离级别进行统一定义。

7fb41d8817b15de11ef28a58b9544bee.png

  • 写在前,读在后:脏读;

  • 读在前,写在后:不可重复读;

  • 读在前,写在后,再读:幻读。


相关文章

InnoDB秘籍:MVCC机制与行锁的深度探索(3)

InnoDB秘籍:MVCC机制与行锁的深度探索(3)

03Innodb 锁机制锁用来控制多个并发的进程或线程对共享资源的访问,在 MySQL 数据库中,共享资源包括:内存中的链表结构,如会话列表、活跃事务列表、InnoDB Buffer Pool 中 L...

kafka开启kerberos和ACL

kafka开启kerberos和ACL

kafka开启kerberos和ACL一、部署kafka-KB包1.上传软件包依次点击 部署中心----部署组件----上传软件包选择需要升级的kafka版本并点击确定 2.部署kafka依次点击部署...

Ambari开启kerberos+安全方案

Ambari开启kerberos+安全方案

安装Kerberosserver节点安装kerberos相关软件yum install -y krb5-server krb5-workstation krb5-libsclient节点安装yum i...

数据湖技术之iceberg(十一)Flink与Iceberg整合-DataStream API

数据湖技术之iceberg(十一)Flink与Iceberg整合-DataStream API

1.实时写入Iceberg表DataStream Api方式操作Iceberg方式目前仅支持Java Api。使用DataStream API 实时写入Iceberg表具体操作如下:2、编写代码使用D...

Doris资源管理

资源管理为了节省Doris集群内的计算、存储资源,Doris需要引入一些其他外部资源来完成相关的工作,如Spark/GPU用于查询,HDFS/S3用于外部存储,Spark/MapReduce用于ETL...

PG的锁(一)

一、表级锁1.1 表级锁模式常见锁模式以及应用场景:ACCESS SHARE :select操作获取该模式锁资源,通常情况下所有只读取不修改表的查询都会获取该模式锁资源ROW SHARE : sele...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。