mysql执行过程

启动

初始化模块读取系统参数和命令行参数,初始化整个系统,例如分配buffer、初始化全局变量,同时,启动各存储引擎

启动完成后,交给连接管理模块接手,连接管理模块启动端口监听程序,准备好接收客户端请求

接收请求

连接管理模块接收到客户端请求后,按照交互协议进行沟通,然后把连接请求交给线程管理模块,去请求一个线程

线程管理模块接到请求后,先进行授权检查,授权通过后,先检查连接线程池中是否有被缓存的空闲连接线程,如果有,取出一个和客户端请求连接上,如果没有,建立一个新的连接线程

处理请求

客户端请求和连接线程对接后,开始处理请求

如果客户端请求是query类型,交给query解析器,解析器首先分析是否为select类型,如果是,调用缓存查询模块,如果已经被缓存,直接将cache中的数据返回给连接线程模块,然后传输给客户端,否则,解析器会通过分发器交由不同模块处理

如果是没被缓存的select,交给优化器模块,如果是表内容或结构更改,交给表变更管理模块,如果是一些更新统计信息、检测、修复、整理之类的,交给表维护模块,如果是复制相关的,交给复制模块,请求状态的就交给状态收集报告模块

各模块收到请求后,先检查用户是否有目标表的权限,如果有,查看此表是否在table cache中,没在cache中就先打开表,取到表后获取对应的锁

表变更管理模块打开表后,会根据表的meta信息,判断表的存储引擎类型和其他相关信息,调用相应存储引擎接口处理

完成请求

连接线程模块将处理结果返回给客户端,然后进行相应的清理工作,开始等待后面的请求

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-09-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

Git入门及上传项目到github中

最近需要将课设代码上传到Github上,之前只是用来fork别人的代码。 这篇文章写得是windows下的使用方法。 第一步:创建Github新账户 第二步:新...

491100
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(二十一) ——Redis服务器定时函数serverCron详解

《Redis设计与实现》读书笔记(二十一) ——Redis服务器定时函数serverCron详解 (原创内容,转载请注明来源,谢谢) 一、概述 redis...

35840
来自专栏静下来

discuz论坛修改注册页面增加提示的教程方法

其实discuz关于在注册页面增加相关提示,在后台也能设置一点点。 但是太局限性了,可能就不太适合有的站长。 那我们就可以通过修改注册页面的文件代码来实现了。 ...

43270
来自专栏Youngxj

网站打包成app 博客打包成手机软件教程

39140
来自专栏Java技术分享

Dubbo无法访问远程Zookeeper已注册服务的问题

使用Dubbo的时候发现当Zookeeper、Dubbo-admin、生产者和消费者都在 内网中的时候,生产者的生产和消费是没有问题的,但是当它Zookeep...

1.6K80
来自专栏IT可乐

Linux系列教程(十一)——Linux软件包管理之RPM命令

  前面我们介绍了Linux系统的常用命令介绍和文本编辑器vim命令的介绍。那么从这篇博客开始,我们会正式的讲解Linux的系统管理,首先要讲的是Linux的软...

26060
来自专栏Ryan Miao

为springboot项目添加springboot-admin监控

我们知道spring-boot-actuator暴露了大量统计和监控信息的端点,spring-boot-admin 就是为此提供的监控项目。

8510
来自专栏企鹅号快讯

最实用的Linux命令总结

1.linux安装中文环境(可选) 联网之后执行:sudo yum groupinstall chinese-support,安装完语言包之后修改/etc/sy...

32580
来自专栏北京马哥教育

Linux有问必答:怎么用CheckInstall从源码创建一个RPM或DEB包

如果你已经从它的源码运行“make install”安装了linux程序。想完整移除它将变得真的很麻烦,除非程序的开发者在Makefile里提供了uninsta...

38540
来自专栏余生开发

electron-vue———环境升级

https://gitee.com/yu_sheng/electron-vue   个人修改升级

57520

扫码关注云+社区

领取腾讯云代金券