MySQL命令执行过程源码相关模块


参照  http://rrdba.cn/?p=35   画了如下的图,对MySQL sql命令的执行进行解读。

初步了解,肯定有很多错误。



1.用户在发出sql命令之后,mysql的线程管理器会建立或者重用一个线程,建立client到mysql服务器的连接。mysql会根据用户名和用户IP(或主机名),在mysql.user表中查看是否有记录,是否允许连接。

2.用户认证完成之后,会进入commander dispatcher模块(命令分发),同时会调用Logging Module记录常规日志(所以常规日志中记录的是mysql执行的所有命令,包括一些用户输入错误或者执行失败的命令,谨慎打开,在业务忙时,会增长迅速,可用于出现故障时进行故障复现时使用。)

3.在解析命令之前,会调用query cache module,根据SQL 的hash值,检查查询缓存中是否有该sql的结果集缓存。

根据SQL的hash值查找(跟oracle类似,都是用hash值)。MySQL的结果集缓存并不只能,在表中数据被修改时,无法判断与该表有关的结果集缓存是否失效,所以MySQL对于结果集缓存的处理比较粗暴,只要表中的数据被修改了,则该表在结果集中的缓存全部失效。

4.MySQL将SQL解析之后,根据SQL类型不同,调用不同的模块进行处理,如查询优化,修改,复制,统计,表的维护等模块。

5.解析并处理SQL之后,验证用户权限,是否有足够的权限执行该操作。(为什么不在用户认证阶段就进行权限验证呢?不明白)

6.最后根据提供的接口,调用不同表对应的不同存储引擎的具体实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值