关于MySQL内核,一定要知道的!

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 近一个多月,写了一些MySQL内核的文字,稍作总结,希望对大家有帮助。1.《InnoDB,为何并发如此之高?》 文章介绍了: (1)什么是并发控制; (2)并发控制的常见方法:锁,数据多版本; (3)redo,undo,回滚段的实践; (4)InnoDB如何利用回滚段实现MVCC,实现快照读。

近一个多月,写了一些MySQL内核的文字,稍作总结,希望对大家有帮助。
1.InnoDB,为何并发如此之高?
文章介绍了:
(1)什么是并发控制;
(2)并发控制的常见方法:锁,数据多版本;

(3)redo,undo,回滚段的实践;

(4)InnoDB如何利用回滚段实现MVCC,实现快照读。

结论是,快照读(Snapshot Read),这种不加锁的读,是InnoDB高并发的核心原因之一。

番外篇:《快照读,在RR和RC下的差异

快照读,在可重复读读提交两种事务隔离级别下,有微小的差异,文章通过案例做了简单叙述。
2.InnoDB的七种锁

先从一个有意思的案例,引出了锁的话题。

假设有数据表:

t(id int PK, name);

目前的记录是:

10, shenjian

20, zhangsan

30, lisi

事务A先执行,并且处于未提交状态:

delete from t where id=40;

事务A想要删除一条不存在的记录

事务B后执行:

insert into t values(40, ‘c’);

事务B想要插入一条主键不冲突的记录

问题1事务B是否阻塞

问题2:如果事务B阻塞,锁如何加在一条不存在的记录上呢?

问题3:事务的隔离级别,索引类型,是否对问题1和问题2有影响呢?

接下来的几篇文章详细的介绍了InnoDB内核中的七种锁。

InnoDB插入自增列,是表锁吗?

这一篇,介绍了InnoDB内核的第一种锁,自增锁(Auto-inc Locks)

InnoDB并发插入,会不会互斥?

这一篇,介绍了InnoDB内核的三种锁:

 ●  共享/排他锁 Shared and Exclusive Locks)
 ●  意向锁 Intention Locks)
 ●  插入意向锁 Insert Intention Locks)

InnoDB,select为何会阻塞insert?

这一篇,介绍了InnoDB内核最有意思的三种锁:

 ●  记录锁 (Record Locks)
 ●  间隙锁 (Gap Locks)
 ●  临键锁 (Next-Key Locks)

这几篇文章,有大量的案例,相信大家会有收获。

3.索引到底是怎么实现的?

这两篇文章很重要,讲解MySQL索引底层实现,也是阅读量最高的几篇之一。

数据库索引,到底是什么做的?

这一篇,介绍了哈希索引树索引数据预读/局部性原理B+树的优化思路

MyISAM与InnoDB的索引差异究竟是啥?

在上一篇基础之上,用图例讲述了MyISAM与InnoDB的索引差异与实践。

4. InnoDB如何巧妙实现,事务的4种隔离级别?
聊MySQL,聊锁,聊事务,一定逃不开事务的隔离级别,本文简述了
读未提交读提交可重复读串行化的巧妙实现。

5.别废话,各种SQL到底加了什么锁?
这是一篇直接给结论的文章:

 ●  普通select
 ●  加锁select
 ●  update与delete
 ●  insert

各类SQL语句分别加了什么锁?

6.超赞,InnoDB调试死锁的方法!
死锁的复现和调试都是很困难的,本文通过几个案例,分享了复现与调试并发事务+死锁的方法,大家一定要动起手来,这样印象才会更加深刻。

7.MySQL不为人知的主键与唯一索引

本文分享了MySQL中最常见的两类约束:主键与唯一索引约束,并细聊了这两类约束在InnoDB与MyISAM上的差异,有个MyISAM大坑,一定要注意绕过。

8.其他
InnoDB的五项最佳实践,知其所以然
这是一篇聊InnoDB实践的文章:关于count(*),关于全文索引,关于事务,关于外键,关于行锁与表锁,不仅会使用,还要知其所以然。

MySQL5.6,InnoDB的一些新特性

MySQL5.6,介绍了InnoDB的一些新特性,例如:居然能够支持memcached插件了,居然能把InnoDB表放在DVD或者CD里,是不是有点意思?
这个数据库内核系列,写了约1个多月,查阅了
大量官网英文资料,也自己动手实践了很多案例,以确保知识的体系性与准确性,希望大家有收获。

最近,回顾了一下18年的文章,下面这一篇是最有希望破10W+的

架构师之路17年精选80篇

烦请大伙帮忙转发一下这篇,未来楼主能够自豪说“俺也是写过10W+的人”。

最近微信改版,很多朋友反馈看不到最新的文章,有个办法是,置顶,哇咔咔。

画外音:有位网友的留言让我很感动,“这是浮躁的自媒体圈,原创与干货多,且值得置顶的一股清流”。

知其然,知其所以然。

思路比结论重要。


原文发布时间为:2018-10-9

本文作者: 58沈剑

本文来自云栖社区合作伙伴“架构师之路”,了解相关信息可以关注“架构师之路”。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 存储 关系型数据库
Mysql内核查询成本计算
Mysql内核查询成本计算
|
8月前
|
SQL 存储 关系型数据库
【MySQL进阶-06】深入理解mysql的内核查询成本计算
【MySQL进阶-06】深入理解mysql的内核查询成本计算
114 0
|
11月前
|
SQL Cloud Native Oracle
|
存储 SQL 关系型数据库
MySQL内核是干什么的?底层原理是什么?
MySQL内核是干什么的?底层原理是什么?
538 0
|
存储 SQL 安全
PolarDB-X内核新版本:将MySQL进行到底
在PolarDB-X最新的内核版本5.4.15中,提供诸多新功能:存储过程,读写分离优化,表级分区管理,密码、审计优化等。
355 0
PolarDB-X内核新版本:将MySQL进行到底
|
Cloud Native 关系型数据库 MySQL
直播预告 | PostgreSQL 内核解读系列第六讲:PostgreSQL 索引介绍(下)
本系列课程将面向DBA、高校学生、内核爱好者,分15个章节,系统化介绍PG核心技术原理、用法和代码实现。希望通过课程学习,让没有内核经验的同学和DBA,也可以进行简单的特性开发,更深入理解PG配置和运行原理。本节课将讲述 PostgreSQL 索引基本介绍,涵盖Hash索引、Bitmap索引、GiST索引、GIN索引、brin索引、其他索引等内容。
直播预告 | PostgreSQL 内核解读系列第六讲:PostgreSQL 索引介绍(下)
|
Cloud Native 关系型数据库 MySQL
直播预告 | PostgreSQL 内核解读系列第五讲:PostgreSQL 索引介绍
本系列课程将面向DBA、高校学生、内核爱好者,分15个章节,系统化介绍PG核心技术原理、用法和代码实现。希望通过课程学习,让没有内核经验的同学和DBA,也可以进行简单的特性开发,更深入理解PG配置和运行原理。本节课将讲述 PostgreSQL 索引基本介绍、B-Tree 索引、Hash 索引、GiS T索引、GIN 索引、TSearch2 全文搜索等内容。
直播预告 | PostgreSQL 内核解读系列第五讲:PostgreSQL 索引介绍
|
SQL 存储 安全
TDSQL中修复的mysql内核bug
在TDSQL这两年多的开发工作中,我感觉很自豪的一件事是我修复了不少mysql-5.7.17和mariadb-10.1.9的内核bug,这些bug大多已经报告给了MySQL/MariaDB官方开发团队,在每个bug描述中我会贴出来bug报告的连接。本文将大略介绍这些bug的概况,我在将来会写更多文章详细介绍每个bug的具体问题分析以及解决思路。本文列出的所有bug都已经修复,经过验证可以正确工作并解决相关问题。 这里先说一下为什么我要提交代码给mysql/mariadb官方开发团队,主要有一下几个好处: 1. 官方开发者可以review我提交的patch,帮助完善patch,发现和解决之前
338 0
|
存储 SQL 机器学习/深度学习
MySQL · 内核特性 · 统计信息的现状和发展
简介我们知道查询优化问题其实是一个搜索问题。基于代价的优化器 ( CBO ) 由三个模块构成:计划空间、搜索算法和代价估计 [1] ,分别负责“看到”最优执行计划和“看准”最优执行计划。如果不能“看准”最优执行计划,那么优化器基本上就是瞎忙活,甚至会产生严重的影响,出现运算量特别大的 SQL ,造成在线业务的抖动甚至崩溃。在上图中,代价估计用一个多项式表示,其系数 c 反应了硬件环境和算子特性,而
257 0
MySQL · 内核特性 · 统计信息的现状和发展
|
SQL 存储 缓存
从研发角度深入了解RDS AliSQL内核2020新特性
内容简要: 一、关于内核 二、内核特性详解 一、 关于内核 (一)回归内核
从研发角度深入了解RDS AliSQL内核2020新特性