关键词不能为空

位置:古风网 > 古风文库 > 高性能MySQL笔记-第一章-孤月行

高性能MySQL笔记-第一章-孤月行

作者:古风网
日期:2020-04-08 12:59:39
阅读:
高性能MySQL笔记-第一章

以前我用mysql,无非就是增删改查几个操作,深入点就是写个存储过程。对mysql一直没有整体的认识。直到项目中出现了问题,才意识到自己需要去深入了解mysql的设计和原理。通过google和知乎一些大牛的技术推荐,都提到一本书《高性能MySQL》。所以我打算接下来的几个星期好好看这本书。同时将自己对每一章的理解写入到笔记中,请大家多多指点。

  • mysql逻辑架构
高性能MySQL笔记-第一章

mysql的逻辑架构有三层,这三层可以让我们知道mysql的工作流程。

第一层:是基于网络的客户端/服务器工具,就是mysql的连接客户端,主要是连接处理,授权认证和安全等。这个地方说一下,mysql的服务端也是有一个类似连接池的缓存的,但客户端(也就是我们操作的mysql命令行界面)连接上mysql的服务之后,mysql服务端会创建一个进程。

第二层:是核心,mysql解析器,这一层主要对sql语句进行识别和优化,像 explain 命令,就是告诉我们解析器的解释过程。通过对sql语句的解析,可以调用第三层的api进行存储引擎的访问。

(存储过程和触发器,视图等都是在这一层实现的)

第三层:存储引擎,各种各样的存储引擎都可以介入。因为第二层和第三层之间有一个抽象的api进行通信,而且存储引擎不会解析sql,只会单纯的响应上层服务。

  • 隔离级别

在说隔离级别之前,先说说脏读,可重复读,幻读定义吧。

这几个定义都是在不同的事务之间发生的。事务A有sessionA,事务B有sessionB。

-- 脏读:事务A对sessionA的修改还未提交,但是在sessionB就已经可以读取到修改的数据了。这就是脏读。

-- 可重复读 & 幻读(可google一下间隙锁) :这两个定义其实很相似。都是说在一个事务里面,用同样的sql获取到的数据不一致问题。

例如:

高性能MySQL笔记-第一章

可以看到session获取的数据不一样了。对于修改数据而言就是可重复读。

如果sessionB是插入,删除记录的话,就是幻读。这么说是不是就比较清楚了呢!

知道了这几个定义,在看看隔离级别,就比较容易看懂了。

高性能MySQL笔记-第一章

高性能MySQL笔记-第一章

设置隔离级别的sql SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

注意事项:避免在同一个事务中操作不同的存储引擎。这就需求在建表的时候明确每一张表的功能。

如果同一个事务中使用两张表,一张使用InnoDB, 一张使用MyISAM。那么在事务正常提交是没问题的,

但是回滚就出现问题了,MyISAM是一个非事务存储引擎,数据的修改是无法回滚的。

  • MVCC 多版本并发控制

这是一个行级锁的变种,面试题会出现这个概念,了解乐观锁的会知道原理其实差不多。

InnoDB的MVCC是通过增加两个额外的列,【行创建时间】【行过期时间】来控制版本的。

其实存储的不是真正的时间戳,个人理解应该是通过时间戳计算出来的系统版本号。

每一次操作系统版本号都会递增。

高性能MySQL笔记-第一章

第一章的内容并不多,主要都是大方向的认知。

总结:看完书之后,静下心来总结,收获还是挺多的。因为是要发表出去的,所以有些点会一看再看,深怕自己弄错误导别人,如果有写得不好的,请多多指教。

相关推荐

  • 高性能MySQL笔记-第一章-孤月行

    孤月行,以前我用mysql,无非就是增删改查几个操作,深入点就是写个存储过程。直到项目中出现了问题,才意识到自己需要去深入了解mysql的设计和原理。

    古风文库