码迷,mamicode.com
首页 > 数据库 > 详细

MySQL处理请求的整体结构

时间:2015-07-22 11:00:52      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:数据库


1:连接管理器:监听在TCP 3306端口上,接收请求

一般连接MySQL的四种类型:

  • DBA数据库管理员:通过管理工具如:phpadmin等

  • 应用程序:如php脚本等通过connector如:php-mysql

  • 程序员:通过API接口

  • 用户:通过MySQL语句

2:线程管理器:建立线程处理请求(mysql使用单进程多线程模型)

     mysql进程对每个请求产生不同线程响应,采用线程复用(Thread Reuse)处理完请求后回收线程,用于处理后续请求

3:用户管理:用户层面的连接权限,用户是否有连接使用mysql的权限

4:命令分发模块:接收到命令后的预处理

  • 缓存模块:查看命令请求内容是否有缓存

  • 日志模块:记录命令日志

  • 解析器:缓存无相应内容后,传给解析器

5:解析器:解析命令类型,生成解析树,根据类型交付给相应管理模块

  • 优化器:针对select语句进行优化(对命令的执行方式进行优化,得出最佳执行方式)

  • 表修改模块:和表修改相关:如表创建、删除、更新、插入等操作

  • 表维护模块:表修复相关:检查、备份、恢复、优化(碎片整理)解析

  • 复制模块:主从复制相关

  • 状态报告模块:状态信息记录

  • 访问控制模块:对于上面的模块,用户是否有操作权限控制

6:表管理器:用户有相应操作权限后,对表的具体管理

  • 负责创建、读取、修改表结构定义文件

     表结构也是数据,表结构定义文件专门存储表的结构(表大小,有哪些字段等等)和表数据是不同的文件

  • 维护表描述符高速缓冲

     对表进行操作时需先知道库中有没有这张表, 需要将表的名称和定义缓存到内存中,查询时先看看有没有这个文件,再具体的通过存储引擎处理

  • 管理表锁

7:存储引擎:最后处理表和文件间的逻辑关系


用户查询请求过程:

    当用户请求进来,连接管理通过连接管理器接收用户请求,为请求分配线程予以响应,线程通过线程管理器管理,使用线程重用,产生空闲线程,用户经过认证之后,建立安全连接;用户查询时,MySQL服务器在内部开始分析请求,在MySQL进程内部,创建解析树,并进行优化,选出最优执行路径(解析器和优化器作用),最后对一些特定结果做缓存。

优化器一些缺陷

优化器是程序自我智能判定的,可能某些环境下做出的优化并不是最佳的,所以可以手动指定

MySQL是插件式存储引擎,优化器不会考虑存储引擎不同,所以要给优化器提示的原因



本文出自 “Call me Boxin” 博客,请务必保留此出处http://boxinknown.blog.51cto.com/10435935/1676975

MySQL处理请求的整体结构

标签:数据库

原文地址:http://boxinknown.blog.51cto.com/10435935/1676975

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!