持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
SHOW PROFILE
SHOW PROFILE 是谷歌高级架构师 Jeremy Cole 贡献给 MySQL 社区的,可以查看 SQL 语句执行的时候使用的资源,比如 CPU、IO 的消耗情况。 在 MySQL 中输入 help profile 可以得到详细的帮助信息。
查看是否开启
select @@profiling;
set @@profiling=1;
查看 profile 统计
(命令最后带一个 s)
show profiles;
查看最后一个 SQL 的执行详细信息,从中找出耗时较多的环节(没有 s)。
show profile;
6.2E-5,小数点左移 5 位,代表 0.000062 秒。
也可以根据 ID 查看执行详细信息,在后面带上 for query + ID。
show profile for query 1;
其他系统命令
- 分析 Server 层的运行信息,可以用 show status。
show status 服务器运行状态
详细参数:dev.mysql.com/doc/refman/…
SHOW STATUS 用于查看 MySQL 服务器运行状态(重启后会清空)。
SHOW GLOBAL STATUS ;
- 可以用 like 带通配符过滤,例如查看 select 语句的执行次数。
SHOW GLOBAL STATUS LIKE 'com_select'; -- 查看 select 次数
- show processlist 运行线程
如果要分析服务层的连接信息,可以用 show processlist:
show processlist;
这是很重要的一个命令,用于显示用户运行线程。
如果说其中的某个线程有问题,可以根据 id 号 kill 线程。
也可以查表,效果一样:
select * from information_schema.processlist;
| 列 | 含义 |
|---|---|
| Id | 线程的唯一标志,可以根据它 kill 线程 |
| User | 启动这个线程的用户,普通用户只能看到自己的线程 |
| Host | 哪个 IP 端口发起的连接 |
| db | 操作的数据库 |
| Command | 线程的命令 dev.mysql.com/doc/refman/… |
| Time | 操作持续时间,单位秒 |
| State | 线程状态,比如查询可能有 copying to tmp table,Sorting result,Sending data dev.mysql.com/doc/refman/… |
| Info | SQL 语句的前 100 个字符,如果要查看完整的 SQL 语句,用 SHOW FULL PROCESSLIST |
- show engine 存储引擎运行信息
show engine 用来显示存储引擎的当前运行信息,包括事务持有的表锁、行锁信息;事务的锁等待情况;线程信号量等待;文件 IO 请求;buffer pool 统计信息。
例如查看 InnoDB:
show engine innodb status;
现在我们已经知道哪些 SQL 慢了,为什么慢呢?慢在哪里?
MySQL 提供了一个执行计划的工具(在架构中我们有讲到,优化器最终生成的就是一个执行计划),其他数据库,例如 Oracle 也有类似的功能。
通过 EXPLAIN 我们可以模拟优化器执行 SQL 查询语句的过程,来知道 MySQL 是怎么处理一条 SQL语句的。通过这种方式我们可以分析语句或者表的性能瓶颈。