本次读了两章,MySQL的架构组成 和 MySQL的锁定机制。
所有信息摘录自于《MySQL性能调优与架构设计》,可能是图书资源的问题,错别字较多,以后入手方向会转向为MySQL文档。
先说第一部分 MySQL的架构组成

上图几乎可以吧MySQL的物理文件组成说个七七八八,以下是需要在这纸上进行补充的一点零碎:
二进制日志文件中,--binlog-ignore-db=db_name和--binlog-do-db=db_name,可以来设置Query日志生成所针对的数据库,参数中的db_name不是指Query更新语句所在的数据库,而是执行Query的时候当前所处的数据库。MySQL仅仅会比较当前连接所在的数据库名字和参数设置的数据库。
不同的MySQL引擎有各自不同的数据库文件,存放位置也有区别,关于数据库引擎在后面会提到。
第二部分来说逻辑模块
MySQL可以看做二层架构 ,如上图。
SQL Layer是系统处理底层数据之前的所有工作在这里完成:权限判断,SQL解析,执行计划优化,Query Cache处理。
存储引擎 是底层数据存取操作的实现部分,有多重存储引擎共同组成。
先说SQL Layer

所有模块的功能已经列出,幸好书中提供了一张更为直接的图,表示了个模块之间的调用关系。
初始化模块,初始化引擎,初始化数据结构,buffer,cache等等,初始化内存管理。
当外来请求进入的时候,会先连接到连接管理模块,这个模块其实就是监听客户端的连接的,然后对连接进行一个转发。
期间是基于Client&Server之间的协议实现的,所以会依赖于协议。
连接管理之后会对进来的连接进行转发,通信和返回结果集,所以这个时候的模块是连接线程模块。
转发连接后,要对传来的连接进行用户身份验证,所以会有用户模块,只有通过校验才会和负责连接的线程连接上。
接着会对命令进行分发!判断命令的种类,如果是Query类型,那么会对命令进行解析,所以下来是命令解析器。如果种类不符合的,会重新传回解析器,在分发器中进行分发。
这部分会涉及到Cache和优化,如果是Select类型的命令,会去Cache中看有没有,如果没有就传入Query优化模块。如果是DDL或者DML语句的话,会到表变更管理模块。
接下来是访问控制,一个是判读是否有读写字段或者行的权限,另一方面是加锁,所以会涉及到表管理模块。
表变更模块打开表之后,会获得表的元数据(Meta)信息,判断表的存储引擎类型等信息,然后调用引擎接口,实现底层操作。
对于表变更模块来说,底层存储引擎模块的具体实现四透明的。
还有一部分数据库常用工具,存储引擎相关还没读到。
网友评论