我爱编程

MySQL架构学习

2018-04-11  本文已影响171人  Vechace

前言:最近在准备面试,复习到MySQL相关的知识,于是做了个总结,希望能对小伙伴们有所帮助,同时也是对自己学习的一个反思总结。

1.MySQL的逻辑结构:

image.png

1.第一层:对客户端的连接处理、安全认证、授权等,每个客户端连接都会在服务端拥有一个线程,每个连接发起的查询都会在对应的单独线程中执行。

2.第二层:MySQL的核心服务功能层,包括查询解析、分析、查询缓存、内置函数、存储过程、触发器、视图等,select操作会先检查是否命中查询缓存,命中则直接返回缓存数据,否则解析查询并创建对应的解析树。

3.第三层:存储引擎,负责数据的存储和提取,MySQL服务器通过API与存储引擎通信,屏蔽了各种引擎之间的差异,常见的存储引擎有:InnoDB、MyISAM,两者的详细介绍以后会继续深入分析。

2.MySQL中的锁:

MySQL在处理并发读写的时候,分别使用共享锁(写锁)和排它锁(读锁)对共享资源高并发操作,在加锁的时候,最好能锁定所需数据,控制锁的粒度、提高并发能力,MySQL提供了两种重要的锁策略:

3.MySQL的事务:

脏读:事务未提交的数据能被其他事务读到
不可重复读:一个事务前后两次读取某数据中间时刻,有事务修改了数据,导致两次读取的数据不一致
幻读:事务在读取某范围内数据,其他事务在范围内插入了新记录,导致事务内两次读取的数据会不一致

4.MySQL中的死锁:

指多个事务在同一资源上相互占用,并请求锁定对方所占用的资源,从而导致的恶性循环条件,数据库系统为解决这个问题实现了死锁检测和死锁超时机制,在MySQL的InnoDB存储引擎中,解决死锁的方法是将持有最少行级排它锁的事务进行回滚。

5.多版本并发控制MVCC:

基于对并发性能的考虑,MySQL的大多数事务型存储引擎都实现了多版本并发控制,可以简单的认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,降低了开销。

InnoDB的MVCC是通过在每行记录后添加两个隐藏列来实现的,一个列用于保存行的创建时间,一个列用于保存行的过期时间,这两个时间在实际存储的时候,存储的是系统版本号。每开始一个新事务,系统版本号都将递增。需要注意的是MVCC只能在Read Committed和Repeatable Read隔离级别下正常工作。

6.MySQL存储引擎:

MySQL自身和第三方提供了多种存储引擎,每种存储引擎优势各不相同,可以根据实际业务需要来选择对应的存储引擎。

感谢阅读~

上一篇下一篇

猜你喜欢

热点阅读