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

云掣YunChe9个月前技术文章406


前言



事务的起源可以追溯到 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

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

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

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


相关文章

pgbench 压测工具

pgbench 压测工具

一、基本参数pgbench工具是Postgres自带的一款轻量型基准压测工具。它自定义相关场景下脚本进行1.1 初始化参数参数含义-i / --initialize调用初始化模式-I init_ste...

hive元数据操作

1.查看hive从超过5000分区的表select dbs.name, tbls.TBL_NAME, count(1) as part_count from dbs, tbls, partitions...

MongoDB创建索引

一、后台创建索引默认情况下,当我们对一个比较热点的集合创建索引时,直到索引创建完毕,该集合都是无法读写的。1、后台创建索引语法db.collection.createIndex( { filed: 1...

grafana常见问题处理

grafana常见问题处理

发现了一个不错的grafana模版,下载安装后很多问题,需要处理后才能使用。第一个问题就是显示插件不存在。插件未找到问题处理安装插件并重启既然未找到插件,那我们肯定要安装下插件,使用grafana-c...

iotop-监控磁盘I/O

iotop-监控磁盘I/O

iotop概述iotop 是一个类似 top 的工具,用来显示实时的磁盘活动。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况。iotop 监控 Linux...

Linux Firewall规则配置

Linux Firewall规则配置

1、Firewalld是否启动成功systemctl start firewalld && systemctl enable firewalld2、开启规则需求:客户由于网络审查问题。...

发表评论    

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