笔记_1

本次读了两章,MySQL的架构组成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


SQL Layer

所有模块的功能已经列出,幸好书中提供了一张更为直接的图,表示了个模块之间的调用关系


SQL Layer层的调用关系

初始化模块,初始化引擎,初始化数据结构,buffer,cache等等,初始化内存管理。

当外来请求进入的时候,会先连接到连接管理模块,这个模块其实就是监听客户端的连接的,然后对连接进行一个转发。

期间是基于Client&Server之间的协议实现的,所以会依赖于协议。

连接管理之后会对进来的连接进行转发,通信和返回结果集,所以这个时候的模块是连接线程模块。

转发连接后,要对传来的连接进行用户身份验证,所以会有用户模块,只有通过校验才会和负责连接的线程连接上。

接着会对命令进行分发!判断命令的种类,如果是Query类型,那么会对命令进行解析,所以下来是命令解析器。如果种类不符合的,会重新传回解析器,在分发器中进行分发。

这部分会涉及到Cache和优化,如果是Select类型的命令,会去Cache中看有没有,如果没有就传入Query优化模块。如果是DDL或者DML语句的话,会到表变更管理模块

接下来是访问控制,一个是判读是否有读写字段或者行的权限,另一方面是加锁,所以会涉及到表管理模块

表变更模块打开表之后,会获得表的元数据(Meta)信息,判断表的存储引擎类型等信息,然后调用引擎接口,实现底层操作。

对于表变更模块来说,底层存储引擎模块的具体实现四透明的。

还有一部分数据库常用工具存储引擎相关还没读到。

下一篇,写MySQL的事务,锁。

你可能感兴趣的:(笔记_1)