前言
应用 mysql 很多年了,但也没怎么深入研究过,筹备最近理解下 mysql 的相干知识点。看看这款程序界里的神器是怎么运行的。
mysql 的架构模式
mysql 采纳的是 C/S 架构,也就是咱们平时所说的客户端 - 服务器模型。像咱们平时所用的 workbench、nacivat 就是客户端,当然,还有命令行工具。
它们会依据指定的 ip、prot 连到服务器,通过肯定的协定来进行 SQL 的执行。这些协定包含最宽泛应用的 TCP 协定,也包含了实用于本地通信的套接字、共享内存、命名管道等。
mysql 的每一次连贯在服务端都有一个专门的线程来治理,并且采纳的网络 IO 模型是 select/poll,并非 epoll。
次要是因为 select/poll 可移植性好,很多零碎都反对。而且 mysql 的瓶颈不在于网络连接上,对于连接数少,并且连贯都很沉闷的 mysql 而言,select/poll 是更好的抉择。
(注:select、poll、epoll 是 IO 多路复用模型,能同时监听多个 I/O 事件的状态,占用资源少,性能高。)
mysql 的 2 个阶段
当服务器接管到客户端的申请连贯后,将会进入 连贯阶段 和命令阶段。
连贯阶段次要执行了以下工作:
- 确定客户端和服务器以后的版本性能;
- 确定是否须要进行 SSL 通信;
- 服务端进行客户端的身份认证;
当下面的连贯阶段 ok 后,将会进入命令阶段,咱们平时所见的 SQL 操作就是在这个阶段执行的,如
COM_QUERY
:用于向服务器发送一个立刻执行的 SQL 查问COM_CREATE_DB
:用于创立数据库的命令
mysql 的 3 层架构
下面的 2 个阶段是从 mysql 的连贯生命周期来划分的,理论从逻辑架构上,mysql 能够划分为 3 层:
连贯层
:次要负责连接池、通信协议、认证受权等;SQL 层
:这一层是 mysql 的大脑,通过一系列组件失去数据操作的最优解。存储层
:负责数据的存储、检索。
SQL 层
后面曾经大体介绍过连贯层了,咱们来看看 SQL 层,当接管到命令后,mysql 并不会傻乎乎的间接去拿数据,而是会剖析以后 sql 语句的各种执行效率,进而取得一个最优的执行打算。
在 SQL 层次要分为了上面几个性能:
Query cache
:缓存查问后果集,并且下次的查问命中了缓存,那么会跳过前面的执行,间接返回缓存后果。Parser
:解析器,依据 SQL 语句构建外部应用的解析树,用于不便获取 SQL 信息,如 SQL 的语义和语法信息。Optimizer
:优化器,通过剖析存储引擎的操作老本以及表的统计信息,输入高效的执行打算。比方在查问剖析中,表扫描或索引扫描哪个执行效率高,则抉择哪个。
除了下面性能外,mysql 的内置函数、存储过程、触发器、视图也是在这一层实现的。
存储层
后面提到过优化器会输入执行打算,而具体的施行则是在存储层这一块。存储层在 mysql 这里设计成了 可插播 的插件,也就是说只有合乎了标准化接口(API),那么就能够实现属于本人的一个存储引擎。
存储引擎是用来存储、检索数据的,不同的存储引擎有不同的个性,像 InnoDB 反对事务、外键,而 MyISAM 就不反对。
个别咱们不须要关怀 SQL 语句会波及到哪些存储引擎,就像后面提到过的,曾经通过标准化接口形象进去了。只是优化器这一层可能须要依据不同的存储引擎做出不同的抉择。
总结
mysql 的总体架构就如上所述了,实际上,mysql 还有很多的重要知识点须要把握,像 锁的机制
,MVCC 版本控制
, 查问优化
等,把握了这些,才算对 mysql 有一个总体意识,前面会持续钻研,分享给大伙!
感兴趣的敌人能够搜一搜公众号「阅新技术」,关注更多的推送文章。
能够的话,就顺便点个赞、留个言、分享下,感激各位反对!
阅新技术,浏览更多的新常识。