MySQL学习之路(七):MySQL中子系统之间的联系
来源:互联网 发布:sentinel redis java 编辑:程序博客网 时间:2024/06/05 16:31
正如MySQL学习之路(六):MySQL数据库的基础架构 中写道的那样,MySQL有以下几大子系统组成:
1. 网络连接和网络通信协议子系统
2. 线程,进程和内存分配子系统
3. 查询解析和查询优化子系统
4. 存储引擎接口子系统
5. 各类存储引擎子系统
6. 安全管理子系统
7. 日志子系统
8. 其他系统——如复制功能,错误功能
这里,我们再仔细研究一下各个系统之间是如何协同工作的,依然以上图中的框架图(图一)和流程图(图二)进行分析
、
图一,mysql框架图
图二,mysql流程图
1. 当一个客户端通过网络连接MySQL数据库服务器时,网络连接子系统执行一系列的与网络协议有关底层任务,然后网络连接子系统将控制权交给线程子系统,然后线程系统提供一个线程来处理这个连接。这个线程称为连接线程。连接线程有可能来自线程缓存(Thread Cache),也可能是新创建的。
2. 连接线程得到控制权,它首先调用安全管理子系统来验证用户访问的合法性,其中包括检查用户是否有权访问数据库服务器,用户密码是否正确等
3. 连接线程将获得的数据传给控制系统。其中一些请求在内核代码被称作命令,这些命令中的一部分可以由这个控制系统直接完成(若本次查询和上次查询一模一样,直接从Query Cache中取值),而另外一些则不可以
4. 对于不可以直接从直接由分发系统完成的查询,分发系统将调用解析子系统对SQL语句进行解析。同时,如果在配置MySQL系统时,我们采用了日志功能,那么分发系统还会调用日志系统区记录此次的信息(SQL语句,执行时间,执行的用户等)
5. 解析子系统将解析结果传给调用优化系统以优化SQL语句。同样的,现在涉及到一个安全问题,即用户是否有权访问特定的表,因此,在这里安全认证系统将再一次被调用。
6. 现在可以对表进行操作了,并将一系列请求发往存储引擎接口子系统,发往存储引擎子系统的请求可以是插入或者更新一个记录,基于Where条件读取一段记录等操作
7. 存储引擎接口子系统将上诉调用自动转化为某个具体的存储子系统方法(Storage Engine Method)。所谓自动,其实就是面向对象编程中的多态。简单来说,调用者似乎感觉在和接口子系统交互,但实际上处理的却是摸个具体存储子系统
8. 如果一切进行顺利的话,相应的模块将SQL执行结果发往客户端。如果不顺利的话,客户端收到的将是报错
9. 最后服务器端将控制权交给连接线程。连接线程完成某些清理工作,并再次等待客户端的链接或者查询,直到客户端输入Quit命令为止,到次本次会话结束。
ps:MySQL日常90%的工作就是如同描述的过程在运行。但也有例外,比如如果此时服务器还扮演复制功能的主服务器角色,它的复制子系统还将不停地读取二进制日志文件,如果服务器扮演的是从服务器角色,从服务器将启动两个线程,分别是SQL线程和IO线程。它们共同接受主服务器传过来的语句并更新从服务器。
- MySQL学习之路(七):MySQL中子系统之间的联系
- MySQL中子查询的应用
- Mysql学习(七)
- MySQL学习(七)
- MySQL学习(七)
- mongodb学习整理三,mongodb与MYSQL之间的联系。query与projection
- Mysql数据库学习 (七) Mysql 查询
- 浅谈mysql的锁和索引之间莫大的联系
- MySQL学习笔记(七)
- MYSQL学习笔记(七)
- MYSQL中子句LIMIT的使用
- mysql中子查询和连接的使用
- Mysql中子查询的常用语句
- 简单理解Apache,Mysql,PHP之间的联系
- Mysql 主外键与索引之间的区别和联系
- MySQL学习笔记(七)扩展性设计之Search
- mysql学习笔记之七(数据操作语言DML)
- 浅谈mysql中子查询
- 5种最常用的开源协议
- 雕刻家
- 防止网页被图片撑开
- 绩效面谈,让员工内心不再抗拒
- Boost编译方法
- MySQL学习之路(七):MySQL中子系统之间的联系
- VBA开发Office 2007 Ribbon的方法
- jstl 应用
- 关于端口以及如何查看端口
- UML学习笔记
- 天天觉得迷茫,常常没事忧伤。你迷茫个鬼,忧伤个死啊!
- 安卓手机现在处于非常复杂时期 建议不要购买 ,更多信息请阅读 官网 Satsun 工作室
- 使用异步 I/O 大大提高应用程序的性能
- c#:silverlight &javascript交互