您的位置:首页 > 数据库 > MySQL

mysql用户SQL执行流程

2017-08-07 11:26 211 查看
对于DBA来说,知道数据库内部对用户进程的处理流程是非常重要的,MYSQL跟ORACLE都属于关系型数据库,在处理用户的进程方面有着相似之处:

这里我们只讨论mysql:

第一、连接阶段:

   1、用户发起SQL进程,监听客户端的‘连接管理模块’在3306端口接收客户的SQL请求;

 2、将请求转发到‘连接进/线程模块’;

 3、调用‘用户模块’来进行授权检查;

 4、通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求;

第二、执行阶段:

 1、先查询缓存,检查Query语句是否完全匹配,接着再检查是否具有权限,都成功则直接取数据返回;

 2、上一步有失败则转交给‘命令解析器’,经过词法分析,对象权限检查、语法分析后生成解析树;

 3、接下来是预处理阶段,处理解析器无法解决的语义,检查权限等,生成新的解析树;

 4、再转交给对应的模块处理;

 5、如果是SELECT查询还会经由‘查询优化器’做大量的优化,生成执行计划;

 6、检查数据是否在内存里,如果是直接从内存里读取、修改,如果否,获取表的存储引擎类型等信息,通过接口调用对应的存储引擎处理;

 7、上述过程中产生数据变化的时候,若打开日志功能,则会记录到相应二进制日志文件中;

第三、返回阶段:

 1、Query请求完成后,将结果集返回给‘连接进/线程模块’;返回的也可以是相应的状态标识,如成功或失败等;

 2、连接进/线程模块’进行后续的清理工作,并继续等待请求或断开与客户端的连接;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: