MySQL 体系结构
1 connectors /连接者、连接器
帮助不同计算机语言的代码程序和mysql服务器进行交互的部分。
可以帮助mysql兼容不同计算机语言的连接。
2 连接池/Connection Pool
MySQL 采用的是 Select 和阻塞IO的模式应对mysql客户端的连接。
首先当select检测到有mysql连接到服务端
,给这条连接分配一个clientid,然后为这条连接分配一个线程池的线程,如果线程池的线程没有了,此时这个连接陷入阻塞,直到线程池中有线程。所以一般mysql服务器最多支持151个mysql客户端的连接。
mysq 连接池的作用
1 通常使用连接池使用的是阻塞的IO,我们需要等待mysql返回才能够进行另外的操作,通常如果等待时间过长,会影响程序运行效率。
2 与mysql连接是一条短链接,如果长时间不与mysql通信,mysql会主动踢掉这条连接。使用连接池会减少用户名用户密码,权限等验证时间。
3 可以利用连接池池进行并发的处理命令。
但是mysql的线程池只能够支持152或者151条连接,连接过多影响mysql的执行效率。
3 SQL interface
将sql语句解析成 DML DDL 存储过程,视图,触发器等对象。
如果有查询结果返回,例如select from ,此时mysql会通过这个工具返回给用户。
4 Parser(查询解析器)
过滤。将sql对象 进行权限验证过滤。并生成执行计划.
在 SQL 命令传递到解析器的时候会被解析器验证和解析,以便 MySQL 优化器可以识别的数据结构或返回 SQL 语句的错误。
5 Optimizer 优化器
分析sql语句执行路径,以及统计分析,根据缓存数据,索引数据具体现有数据,采用什么样的执行方式。制定执行计划。
SQL 语句在查询之前会使用查询优化器对查询进行优化,同时验证用户是否有权限进行查询,缓存中是否有可用的最新数据。它使用“选取-投影-连接”策略进行查询。
例如 SELECT id, name FROM student WHERE gender = “女”;语句中,SELECT 查询先根据 WHERE 语句进行选取,而不是将表全部查询出来以后再进行 gender 过滤。SELECT 查询先根据 id 和 name 进行属性投影,而不是将属性全部取出以后再进行过滤,将这两个查询条件连接起来生成最终查询结果。
6 Caches&buffer
主要操作缓存的是mysql 引擎。引擎需要把经常访问的数据缓存到buffer中,便于下一次查询数据就可以之间在内存中查询,不用访问磁盘。如果内存中没有数据才会访问磁盘。
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的,比如表缓存、记录缓存、key 缓存、权限缓存等。
7 工具管理组件
工具管理组件 :数据备份 恢复 安全 主从复制 集群 分区 实例的管理
information_schma:存储mysql内部数据
8 引擎
引擎是表级别的引擎,针对某一个表来识别某个引擎。
MyISAM 采用表锁 InnoDB 采用行锁
引擎:具体的语句到达,执行计划已经有了的前提下,如何区协调磁盘的数据和缓存的数据怎么存储
怎么缓存的一些策略,如何加锁,事务如何执行等
9 文件系统
redolog undolog 都是和事务相关的。
binary 主要用来存储replication(主从复制)
当数据库为了防止单点故障,创建了从数据库,数据是采用二进制日志传输到从数据库上。
将DML语句造成数据库变更的语句通过二进制日志传送到从数据库上
Data 数据文件
index 索引文件
error 错误文件
Query and slow 慢日志查询