《MySQL实战45讲》学习小结(基础篇)

最近学习丁奇老师的《MySQL实战45讲》,明白了以前一知半解的概念,对MySQL的运行机制有了比较系统的理解。

 

课程内容组织得非常好,留言里面也有很多精彩的见解,学到了很多东西,过程很享受。

在此先感谢下丁奇老师。

这里把学到的内容组织一下,把知识点串成线,织成网。

写下来的只是个提纲,以及一些要点。

接下来还要学以致用,在实际工作中带着这些知识去练习。

把学到的内容归纳为三部分:

一、基础概念

二、运维管理

三、合理使用MySQL

第一篇:基础概念

1. 事务

第3讲,8讲,20讲

事务是关系数据库(RDB)区别于非关系数据库的关键特性。

关键在于理解并发时可能出现的问题,以及避免这些问题出现的机制。

从问题入手:

- 脏读:读到其他事务未提交的修改

- 不可重复度:同一行,两次读到的数据不同

- 幻读:两次执行同一个sql,得到的结果集不同

理解“问题”的关键:两次读,是限定在一个事务的上下文内的。

很简单,可我之前就是没领会到,汗 ~ ~ ~

隔离级别(InnoDB):

- 读提交(RC),解决脏读问题

- 可重复读(RR),解决不可重复读问题,以及大部分幻读问题

- 串行化,同时只能有一个事务运行,完全解决幻读问题

隔离级别越高,解决的问题越多,并行能力越低。

InnoDB的缺省隔离级别为:可重复度。

2. 锁

第6讲,7讲,19讲,20讲,21讲,30讲,39讲,40讲

锁是数据库用以实现事务隔离的工具。

按照被锁定的对象,有:全局锁、表锁、MDL、行锁、gap lock、自增锁等。

按并行能力,可分共享锁(读锁)和互斥锁(写锁)

两阶段锁:锁在需要时加上,在事务结束时释放。

行锁、gap lock:这两个锁要重点学习。它们都在索引上执行。被访问到的记录才需要加锁。如果查询的是非主键索引,除了在非主键索引上的 next-key lock,还要在主键索引上对符合条件的记录加行锁。

MDL(meta-data lock)

为避免表结构被其他线程修改,自动加锁。

5.6版本实现online DDL,通过 MDL降级使得DDL期间仍可读写该表,提升并行能力。

原理:DDL语句先申请DML写锁,拿到MDL写锁之后,创建临时表,把源表数据拷过去,变更临时表数据结构,然后再用临时表替换源表,并把期间对源表的变动应用到新的表。在拷贝数据、变更临时表数据结构期间,MDL写锁降级为读锁,其他事务可以对原表进行读写。最后临时表和源表切换的时候,再从MDL读锁升为写锁。

死锁检测

死锁检测,时间复杂度为O(n^2)

高并发的情况下,如果出现大量锁等待,会因为死锁检测,消耗大量的CPU,导致性能急剧下降。

<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值