彩神8官网下载官方资深程序员经典总结:MySQL的并发控制原理

  • 时间:
  • 浏览:24
  • 来源:大发快3官网app-大发快3官网

MySQL是主流的开源关系型数据库,提供高性能的数据彩神8官网下载官方存储服务。许多人 在做后端开发时,性能瓶颈往往一定会 应用并有无生活,许多 数据库层面。

作者:IT技术分享来源:今日头条|2019-07-24 11:300

MySQL是主流的开源关系型数据库,提供高性能的数据存储服务。许多人 在做后端开发时,性能瓶颈往往一定会 应用并有无生活,许多 数据库层面。许多掌握MySQL的许多底层原理有益于许多人 更好地理彩神8官网下载官方解MySQL,对MySQL进行性能调优,从而开发高性能的后端服务。

MySQL的逻辑架构

MySQL的逻辑架构如下图:

最上层是外理客户端过来的连接的。主要做连接外理、授权认证、安全彩神8官网下载官方等。MySQL在你是什么层维护了有有一3个 守护进程池,用于外理来自客户端的连接。MySQL能不能 使用用户名密码认证,也能不能 使用SSL基于X.30009证书认证。

第二层由三部分组成:查询缓存、解析器、优化器。解析器用来解析SQL搞笑的话,优化器会对解析彩神8官网下载官方但是 的搞笑的话进行优化。在解析查询前,服务器会先检查查询缓存,原应能在其中找到对应的查询结果,则不需要再进行查询解析、优化等过程,直接返回查询结果。存储过程、触发器、视图等一定会 你是什么层实现。

第三层是存储引擎,存储引擎负责在MySQL中存储数据、提取数据、开启有有一3个 事务等等。存储引擎通过API与上层进行通信,哪几种API屏蔽了不同存储引擎之间的差异,使得哪几种差异对上层查询过程透明。存储引擎不需要去解析SQL。

Mysql最常用的存储引擎是InnoDB

Mysql的并发控制

原应多个守护进程一齐彩神8官网下载官方操作数据,一定会 原应引发并发控制的大问题。本文接下来将介绍MySQL是如可控制并发读写的。

读写锁

原应多个守护进程都许多 读数据,并非 能不能 一齐读,不需要互相影响,你是什么但是 应该使用“读锁”,也称为共享锁。获取读锁的守护进程之间互相不需要阻塞,能不能 一齐读取有有一3个 资源。

原应有有有一3个 守护进程不到写数据,则应该使用“写锁”,也成为排它锁。写锁会阻塞其它的写锁和读锁,直至写操作完成。

锁粒度

首先明确有有一3个 概念:在给定的资源上,不到加锁的数据越少,系统不需要 承载的并发量就越高。但加锁也是不到消耗资源的,原应系统花费大量的时间来管理锁,而一定会 存取数据,没人 系统的性能原应会为什么在么在让受影响。

许多有有一3个 好的“锁策略”许多 要在锁的开销和数据的安全性之间寻求平衡,Mysql支持多个存储引擎的架构,部分存储引擎都能不能 实现买车人的锁策略和锁粒度。

表锁和行锁

表锁顾名思义许多 锁住整张表。表锁开销比较小。对表加写锁后,其它用户对这张表的所有读写操作一定会被阻塞。在MySQL中,尽管存储引擎能不能 提供买车人的锁,但MySQL有但是 也会使用表锁,比如 ALTER TABLE 累似 的搞笑的话。

写锁比读锁有更高的优先级,为什么在么在让有有一3个 写锁请求原应会被插入到读锁队列的前面。

行级锁即锁住整行,能不能 最大程度地支持并发外理,但加解锁的开销也会比较大。行级锁只在储存引擎层实现,所有的存储引擎都以买车人的最好的依据实现了行级锁。

MVCC

MVCC即“多版本并发控制”,能不能 认为MVCC是行级锁的有有一3个 变种,为什么在么在让它在许多情況下外理了加锁操作,为什么在么在让开销更低。

主流的关系型数据库都实现了MVCC,但实现机制各有不同。实际上MVCC也没人 有有一3个 统一的标准。但大都实现了非阻塞的读操作,写操作也许多 锁定必要的行。

MVCC保证的是每个事务上端在执行期间看过的数据一定会 一致的。但不同的事务原应开始英语 英语 的时间不同,许多原应对同一张表,同一时刻看过的数据是不一样的。

在MySQL的InnoDB引擎,是通过给每行记录上端保存有有一3个 隐藏的列来实现的。有有一3个 是保存行的创建时间,原来保存了行的过期时间(或删除时间)。

实际上存储的并一定会 实际的有有一3个 时间戳,许多 “系统版本号”。

每次开启有有一3个 事务,系统版本号一定会递增。事务开始英语 英语 时,系统版本号会作为事务的版本号,用来和查询到的行的版本号进行比较。下面分别介绍常见的CRUD操作中版本号是为什么在么在会么会工作的:

INSERT

保存当前系统版本号作为行版本号

DELETE

保存当前的系统版本号到这行数据的“删除版本”。

UPDATE

插入一行新纪录,保存当前系统版本号作为行版本号,一齐保存当前系统版本号到原来的行的“删除版本”。

SELECT

  • 只查找版本早于当前事务版本的行。原来能不能 保证事务读取都的行,要么但是 就居于,要么是你是什么事务并有无生活买车人插入原应修改的。
  • 行的“删除版本”要么未定义,要么大于当前事务版本号。原来能不能 确保事务读取到的行,在事务但是 没人 被删除。

MVCC只在REPEATABLE READ和READ COMMITTED有有一3个 隔离级别下工作,其它有有一3个 隔离级别不到工作。原应READ UNCOMMITTED时不时读取最新的数据防,而一定会 符合当前事务版本的数据行。而SERIALIZABLE则会对所有读取的行都加锁。

【编辑推荐】

【责任编辑:

张燕妮

TEL:(010)684763006】



点赞 0