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、连接进/线程模块’进行后续的清理工作,并继续等待请求或断开与客户端的连接;
这里我们只讨论mysql:
第一、连接阶段:
1、用户发起SQL进程,监听客户端的‘连接管理模块’在3306端口接收客户的SQL请求;
2、将请求转发到‘连接进/线程模块’;
3、调用‘用户模块’来进行授权检查;
4、通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求;
第二、执行阶段:
1、先查询缓存,检查Query语句是否完全匹配,接着再检查是否具有权限,都成功则直接取数据返回;
2、上一步有失败则转交给‘命令解析器’,经过词法分析,对象权限检查、语法分析后生成解析树;
3、接下来是预处理阶段,处理解析器无法解决的语义,检查权限等,生成新的解析树;
4、再转交给对应的模块处理;
5、如果是SELECT查询还会经由‘查询优化器’做大量的优化,生成执行计划;
6、检查数据是否在内存里,如果是直接从内存里读取、修改,如果否,获取表的存储引擎类型等信息,通过接口调用对应的存储引擎处理;
7、上述过程中产生数据变化的时候,若打开日志功能,则会记录到相应二进制日志文件中;
第三、返回阶段:
1、Query请求完成后,将结果集返回给‘连接进/线程模块’;返回的也可以是相应的状态标识,如成功或失败等;
2、连接进/线程模块’进行后续的清理工作,并继续等待请求或断开与客户端的连接;
相关文章推荐
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
- [置顶] 【MySql】Sql优化(一)——Sql执行流程
- MySQL架构总览->查询执行流程->SQL解析顺序
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
- MySQL架构总览->查询执行流程->SQL解析顺序
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
- MYSQL优化(一):【架构解析、sql语句执行详细流程】
- 查看MYSQL已经执行过的sql语句
- mysql存储过程执行动态sql语句并返回值
- mysql sql语句的执行过程
- MySQL 执行10G sql文件
- mysql之SQL执行计划分析EXPLAIN
- mysql用户管理、常用sql语句、mysql数据库备份
- Navicat for MySQL 执行sql文件过程分析(导入数据)
- 如何定位mysql中执行很慢的sql 语句
- MySQL(用户管理,常用sql语句,数据库备份恢复,MySQL调优,恢复误操作数据)
- 在 MySQL 数据库中使用 C 执行 SQL 语句