第三部分:MySQL体系结构
一、mysqld构成
(1).连接层
说明:
》提供通信协议
TCP/IP ---所有系统通用
socket ---linux特有
》提供链接线程;随着客户端请求派生出专门的响应线程;作用是和客户端进行交互
查看当前数据库的连接线程数:show full processlist
过程:》接收客户端发来的SQL》得到查询结果之后返回给客户端结果》向下层(SQL层)传输接收到的SQL》后端处理完成的结果负责接收,转给客户端。
(2)SQL层
》SQL线程接收上层线程发送过来的SQL语句
》检查语法是否正确,有误抛出错误提示,还有授权检测
》检查语义,语句的类型(DDL、DCL、DML、DQL)
》会将语句交给不同解析进行解析
》解析器开始解析,生成执行计划
》优化器,判断所有生成的执行计划,找到成本最低的执行计划,转给执行器
》执行器,执行这个执行计划,得出去哪个盘找哪个文件的哪页哪行数据
》有专门的线程将结果发送给下层(存储引擎层)继续处理
》下层传过来的数据结构化成表的形式,转给上层连接层专门线程
》将上层执行过的SQL语句进行hash,生成一个hash结果(SQL_ID)和获取数据结果缓存下来(QUERY_CACHE)。
补充:
》企业里现在主流解决方案关闭QUERY_CACHE,用redis或memcache代替
(3)存储引擎层
》接收上层传过来的数据位置,找到相应的页上的行
》找到行之后,发送给SQL层
二、页,区,段定义
(1)页(默认16k):mysql的最小物理存储分配单元。
用来存放数据库中表中的行
(2)区:mysql认为对于一行数据来讲,如果需要多个页情况,我们尽量给他连续的才更高效,所有有了区的概念。
(3)多个区构成,我们认为,连续的区组成段
原文地址:http://blog.51cto.com/13520774/2094451