数据库优化 学习笔记
一、Show Profile 进行 SQL 分析
是 MySQL 提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于 SQL 的调优的测量。默认情况下,参数处于关闭状态,并保存最近 15 次的运行结果。
1.1、Show Profile 分析步骤
-
是否支持,看看当前 MySQL 版本是否支持(大于 5.5 的基本上都支持)。
-
开启功能,默认是关闭,使用前需要开启。
-- 查看是否开启, 默认关闭 OFF
show variables like 'profiling';
-- 开启
set profiling=on;
-- 开启有什么用? 可保存最近 15 次的运行结果
'(随便写几条语句测试一下)'
-- 查看每条语句使用的时间
show profiles;
-- 查看语句具体执行了哪些步骤及其时间
show profile cpu,block io for query 1;
1.2、查看的参数
all
显示所有的开销信息block io
显示块IO相关开销cpu
显示CPU相关开销信息ipc
显示发送和接收相关开销信息memory
显示内存相关开销信息page faults
显示页面错误相关开销信息
主要关注下面几个:
-
converting HEAP to MyISAM
查询结果太大,内存都不够用了往磁盘上搬 -
Creating tmp table
创建临时表(这个很耗时) -
Copying to tmp table on disk
把内存中临时表复制到磁盘(这个很危险) -
locked
锁(这也是个很危险的东西)
二、全局查询日志
在生产过程中不要开启,因为它会把每一条语句(有可能用户点击一次就是一条)都会被记录在一个表里。
那么什么时候开呢? 不是慢查询导致的问题,需要复现的时候开启,查看执行了那些语句。
- 开启
set global general_log = 1;
- 将SQL语句写到表中
set global log_output = 'TABLE';
- 所编写的 SQL 语句,会记录到 MySQL 库里的 genral_log 表
select * from mysql.general_log;