MySQL性能分析常用指令

目录

查看INSERT、UPDATE、DELETE、SELECT的执行频率

慢查询日志

show profiles 查看SQL各执行阶段

开启、关闭profiles支持

使用profiles分析SQL


之前详细记录了explain的使用方式,感兴趣的可以点此查看,MySQL 执行计划explain各参数含义及示例 ,今天补充一下其它查看sql性能常用的命令,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

查看INSERT、UPDATE、DELETE、SELECT的执行频率

我们可以在MySQL提供的客户端或者自己的连接工具上使用  show [session|global] status  命令查看服务器状态信息,比如,我们可以通过如下命令,查看当前数据库INSERT、UPDATE、DELETE、SELECT的访问频次。

show global status like 'Com_______';

执行结果如下:

MySQL性能分析常用指令_第1张图片

 如上,从名字上我们也很容易知道其含义,Com_insert: 插入次数,Com_select: 查询次数等。

通过这个命令,我们可以知道当前数据库是以查询居多还是增删改居多,为数据库优化提供基本的参考依据。

慢查询日志

什么是慢查询呢?简单说就是将运行时间超过某个时间阈值的 SQL 语句记录到文件,默认文件名是:机器名-slow.log。

先看下mysql的部分配置文件截图:

MySQL性能分析常用指令_第2张图片

 如上,其中慢查询相关的有如下几个配置:

slow-query-log:开启慢查询,0表示不记录慢查询,1表示记录慢查询。

long_query_time:时间阈值,默认10秒钟,即:sql语句的执行时间超过10秒的将进行记录。

slow_query_log_file:慢查询记录到的文件,默认记录到机文件 器名-slow.log 中。

修改完这些配置后,记得重启下MySQL服务才会生效。

慢查询日志大体的样子如下:

show profiles 查看SQL各执行阶段

开启、关闭profiles支持

使用show profiles前首先确保我们的MySQL服务支持profile,可以使用如下命令查看是否支持:

SELECT @@have_profiling;

执行结果:

如上,如果为YES表示您的MySQL服务支持profile。

然后,通过如下命令查看是否开启了profile支持:

select @@profiling;

执行结果:

 如上,如果为1表示开启了profile支持。

如果想关闭,可以通过 set session/global 来开启或者关闭profile支持,如:

set profiling = 1;

使用profiles分析SQL

我们使用set profiling = 1 开启后,然后执行如下两条sql语句:

SELECT * FROM tbl_msg_send;
SELECT * FROM tbl_msg_send WHERE seqid = 11507;

此时,我们就可以通过profile查看每个SQL的执行过程及资源占用等信息。

首先执行如下命令查看每一条SQL耗时的基本情况:

show profiles; 

 然后可以根据 query_id 查看每一条SQL详细的执行过程:

SHOW PROFILE FOR QUERY 1; 

MySQL性能分析常用指令_第3张图片

解释下上面status列中几个重要参数的含义:

System lock:确认是由于哪个锁引起的,通常是因为MySQL或InnoDB内核级
的锁引起的建议:如果耗时较大再关注即可。
Sending data:从server端发送数据到客户端的时间。Sending Data不是网络发送,是从硬盘读取,一般需要通过索引或加上LIMIT,减少需要给客户端的数据量。
Sorting result:正在对结果进行排序,类似Creating sort index,不过是正常表,
而不是在内存表中进行排序,建议:创建适当的索引。
Table lock:表级锁。
create sort index:当前的SELECT中需要用到临时表在进行ORDER BY排序。

我们还可以查看CPU的占用情况:

show profile cpu for query 1;

MySQL性能分析常用指令_第4张图片

除了能查看cup的占用情况之外,profiles还可显示内存开销、io相关开销等信息,具体支持的参数如下:

参数 描述
all 显示多有的开销信息
memory 内存相关开销
cup cup相关开销
block io io相关开销
context switches 上下文切换相关开销
ipc 发送和接收相关开销
page faults 页面错误相关开销
source source_function source_file source_line相关开销

你可能感兴趣的:(mysql,mysql)