1.前言
这里主要介绍一下Mysqld的体系结构
2.Mysql之体系结构
这里看到是从网上找到的,很多人都说这幅图是Mysql官网手册上面的,可惜我没有找到。。。
2.1 Connectors
指的是不同语言中与MySQL的连接交互层,这个可以在Mysql官网下面查到关于不同语言的API
2.2 Management Serveices & Utilities
系统管理和控制工具,例如备份恢复、MySQL复制、集群等
2.3 Connection Pool
连接池,管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的信息;
MySQL服务器对每一个连接产生一个线程,而这个线程独自为该连接服务。因此,MySQL服务器中的并行是指并行执行许多个查询而非一次查询内的并行。也由此原因致使MySQL对多核支持不够好,MySQL服务器是一组线程的集合。
2.4 SQL Interface
SQL接口,接受用户的SQL命令,并且返回用户需要查询的结果。比如DML就是调用SQL Interface
2.5 Parser
解析器,SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本;
主要功能:
-
- 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的;
- 如果在分解构成中遇到错误,那么就说明这个SQL语句是不合理的 ;
- Lex:Lexical Analyzer是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序;
- acc:Yet Another Compiler Compiler是一种工具,将任何一种编程语言的所有语法翻译成针对此种语言的 Yacc 语法解析器;
2.6 Optimizer
查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化。它使用的是“选取-投影-联接”策略进行查询;
优化 select uid,name from user where gender = 1; SQL语句执行的过程如下:
-
- 这个select 查询先根据where 语句进行记录选取,而不是先将表全部记录查询出来以后再进行gender过滤;
- 这个select查询先根据uid和name进行属性投影(字段选择),而不是将属性全部取出以后再进行过滤;
- 将这两个查询条件联接起来生成最终查询结果;
2.7 Cache&Buffer
高速缓存区,查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。通过LRU算法将数据的冷端溢出,未来得及刷新到磁盘的数据页,叫脏页。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等;
2.8 Engine
存储引擎,存储引擎是MySQL与文件打交道的子系统。也是MySQL最具有特色的一个地方。MySQL的存储引擎是插件式的,它根据MySQL AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)现在有很多种存储引擎,各个存储引擎的优势各不一样。MySQL也支持自定义制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。