mysql 执行流程

mysql 执行流程

咱们能够人为的把mysql 的主要功能分为以下模块.mysql

 

1.初始化模块

  mysql启动的时候执行初始化工做,如读取配置文件,分配一些全局变量(sql_model,catch buffer),载入控制表, 内存分配之类的,这个模块执行完以后, 初始化模块执行完以后就把控制器交给sql

连接管理器缓存

 

2.执行流程

一个用户链接进来以后 先会跟链接管理模块打交道, 而后链接管理模块会通知线程管理模块分配一条线程进入 用户模块 对这个用户进行验证, 当 用户模块 执行完以后,服务端就能够接受从客户端发来的命令了, 用户发来的命令会传给 命令分发器 ,  服务器

  在命令分发器中, 加入是查询语句的话他会先到 查询缓存模块 看看有没有被缓存过得(固然前提是咱们把这个查询缓存给打开), 命令分发器 他还会通知日志模块将咱们的命令给保存下来,放到 general_log 里面,并且仍是没等命令执行完就开始记录,完完整整获得记录下来,post

  下面呢,命令分发器 会将命令传给 命令解析器, 经过 命令解析器 的解析将命令发往不一样的 模块 如 查询优化器(DML), 表变动模块(DDL), 表维护模块(检查,压缩) ,复制模块,状态模块(状态变量,服务器信息)优化

  而后他们会根据本身的须要 调用 访问控制模块 访问控制模块会传来一个 表的列表 ,它会检测用户有没有权限对表或列的权限 他执行完以后 会把控制器交给 表管理模块 表管理模块会根据.frm 文件进行一些读取,或者取锁 ,当它执行完以后会调用 存储引擎接口 来实现.  线程