美文网首页
mysql内核简介

mysql内核简介

作者: 美雨知春 | 来源:发表于2020-12-08 21:25 被阅读0次

    近一个多月,写了一些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+的人”。

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

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

    知其然,知其所以然。

    思路比结论重要。

    相关文章

      网友评论

          本文标题:mysql内核简介

          本文链接:https://www.haomeiwen.com/subject/lynqgktx.html