结构
- 客户端 : 发送连接请求,SQL请求
- MySQL-server:
- 连接器: 提供连接服务,权限认证
- 分析器: 把SQL语句切分,语法分析,词法分析,转换成AST(抽象语法树)
- 优化器: 优化SQL语句,规定执行流程
两种优化方式,RBO(基于规则的优化)和CBO(基于成本的优化),更多的使用CBO
可以查看SQL语句的执行计划,采用对应的优化点,加快查询 - 执行器: SQL语句的实际执行组件,和存储引擎挂钩,查询数据
- MySQL8之前还有一层缓存,8之后去掉了;因为数据经常变化,命中率不高
- 存储引擎(有不同的存放位置和文件格式)
InnoDB 磁盘
MyISAM 磁盘
memory 内存
性能监控
show profile
官网SQL Statement下面
https://dev.mysql.com/doc/refman/5.7/en/
https://dev.mysql.com/doc/refman/5.7/en/show-profile.html
可以帮助我们分析SQL的执行情况
进入MySQL客户端后,输入命令: set profiling=1; 开启
然后执行SQL后,就可以通过show profiles; 查看了
- show profiles; 简单的查看一个列表,会带着QueryId
- show profile; 查看最近一条SQL的各个步骤的详情
- show profile [type] for query queryId; 查看某条SQL的各个步骤的详情,可以指定type
The SHOW PROFILE and SHOW PROFILES statements are deprecated and will be removed in a future MySQL release. Use the Performance Schema instead; see Section 25.19.1, “Query Profiling Using Performance Schema”.
现在版本还能继续用,将来版本很可能会被删除的;用Performance Schema替代
Performance Schema
https://dev.mysql.com/doc/refman/5.7/en/performance-schema.html
默认开启,通过show databases; 就可以看到performance_schema库,数据不会持久化
它比show profiles功能强大很多,但使用起来也复杂很多;一般我们作为开发人员,show profiles就够了…
performance_schema 数据库中的表使用performance_schema存储引擎
两个基本概念:
- instruments: 生产者,用于采集mysql中各种各样的操作产生的事件信息,对应配置表中的配置项我们可以称为监控采集配置项。
- consumers:消费者,对应的消费者表用于存储来自instruments采集的数据,对应配置表中的配置项我们可以称为消费存储配置项。
简单配置与使用
数据库刚刚初始化并启动时,并非所有instruments(事件采集项,在采集项的配置表中每一项都有一个开关字段,或为YES,或为NO)和consumers(与采集项类似,也有一个对应的事件类型保存表配置项,为YES就表示对应的表保存性能数据,为NO就表示对应的表不保存性能数据)都启用了,所以默认不会收集所有的事件,可能你需要检测的事件并没有打开,需要进行设置,可以使用如下两个语句打开对应的instruments和consumers(行计数可能会因MySQL版本而异)。
select * from setup_instruments; 可以看到很多NO
--打开等待事件的采集器配置项开关,需要修改setup_instruments配置表中对应的采集器配置项
UPDATE setup_instruments SET ENABLED = 'YES', TIMED = 'YES'where name like 'wait%';
--打开等待事件的保存表配置开关,修改setup_consumers配置表中对应的配置项
UPDATE setup_consumers SET ENABLED = 'YES'where name like '%wait%';
--当配置完成之后可以查看当前server正在做什么,可以通过查询eve