关于MySQL内核,一定要知道的!
近一个多月,写了一些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沈剑
本文来自云栖社区合作伙伴“架构师之路”,了解相关信息可以关注“架构师之路”。
关于MySQL内核,一定要知道的!相关推荐
- 举个栗子看如何做MySQL 内核深度优化
2019独角兽企业重金招聘Python工程师标准>>> 本文由云+社区发表 作者介绍:简怀兵,腾讯云数据库高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson R ...
- MySQL内核源码解读-SQL解析之解析器浅析
MYSQL服务器接收SQL格式的查询,首先要对sql进行解析,内部将文本格式转换为二进制结构,这个转换就是解析器,解析的目的是为了让优化器更好的处理指令,以便以最优的路径,最少的耗时返回我们想要的结果 ...
- MySQL内核:InnoDB存储引擎 卷1
MySQL内核:InnoDB存储引擎卷1(MySQL领域Oracle ACE专家力作,众多MySQL Oracle ACE力捧,深入MySQL数据库内核源码分析,InnoDB内核开发与优化必备宝典) ...
- mysql内核架构_热血江湖mysql内核技术之门派数据库表结构说明
小编之前已经多次和大家说过了一个概念,不管你打算架设的是什么游戏什么版本都必须熟悉它的数据库整体结构.今天小编要说的是热血江湖私服游戏中最难的MYSQL内核技术,对于玩家来说MYSQL技术无疑是最难的 ...
- 查看mysql 内核_如何查看和更新数据库内核小版本
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 云图说|云数据库MySQL内核小版本升级全攻略
华为云有新的内核小版本发布时,您可以在"实例管理"页面看到内核小版本升级提示,具体操作方法及注意事项"云图说"来为您详解: 点击"了解更多" ...
- 华为云数据库 MySQL 内核新特性上线,首家彻底解决用户上云需改造应用的问题
最新消息,搭载 HWSQL 内核的华为云数据库 MySQL,近期上线了几大关键特性.其中通过深入改造.去除社区版 GTID 约束限制的特性,更是首家彻底解决了用户上云需要对应用进行改造的问题. GTI ...
- MySQL内核月报 2015.01-MySQL · 捉虫动态· InnoDB自增列重复值问题
问题重现 先从问题入手,重现下这个bug 这里我们关闭mysql,再启动mysql,然后再插入一条数据 我们看到插入了(2,2),而如果我没有重启,插入同样数据我们得到的应该是(4,2). 上面的测试 ...
- MySQL内核月报 2014.11-MySQL· 5.7特性·在线Truncate undo log 表空间
背景 Innodb使用undo log来实现MVCC,这意味着如果一个很老的事务长时间不提交,那么新产生的undo log都无法被及时清理掉.在MySQL 5.5及之前版本中,undo log是存储在 ...
最新文章
- 【视频点播最佳实践】视频点播播放异常排查
- NSAssert的使用
- 机器学习入门书籍导读-高等数学上
- Ubuntu20.04更换为国内源
- Java:选择正确的集合
- 计算机原理中的cps,信息物理融合系统(CPS)原理
- package和import
- CommonLibrary——框架通用工具库
- IE8 SVG Viewer下一些对象属性和方法
- C4D模型工具—恢复平滑着色(Phong)
- 计算机c盘用户名中文改英文,Win10电脑将中文登录用户名更改为英文名的方法
- molar mass
- 双语美文|治愈系英文段子,你对人生过敏吗
- Java多线程-任务拒绝策略
- 【机器学习】深度学习框架是什么?有哪些?如何选择?
- 2018 11.2 PION模拟赛
- c语言社团管理系统实验报告,C语言课程设计大学社团管理系统
- minio 的python客户端工具
- CDH 6.3.2 安装(二)
- 如何在html网页中利用css实现动画效果