标签:数据库
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
标签:数据库
原文地址:http://boxinknown.blog.51cto.com/10435935/1676975