MySQL调优性能监控
Posted EileenChang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL调优性能监控相关的知识,希望对你有一定的参考价值。
前言
无监控,不调优。无论是mysql调优,或者是JVM调优,或者是其他调优,都是从监控开始的。
1 SHOW PROFILE & SHOW PROFILES
MySQL提供了SHOW PROFILE Statement和SHOW PROFILES Statement两个工具,用于查看当前会话SQL语句执行时的资源使用情况。此工具默认是禁用状态,可以通过将变量profiling设置为1或ON开启:
mysql> SET profiling =1;
Query OK, 0 rows affected, 1 warning (0.04 sec)
SHOW PROFILES显示发送到服务器的最新语句列表:
mysql> show profiles;
+----------+------------+----------------------------------+
| Query_ID | Duration | Query |
+----------+------------+----------------------------------+
| 1 | 0.00103750 | show databases |
| 2 | 0.00016900 | SELECT DATABASE() |
| 3 | 0.00394775 | show tables |
| 4 | 0.31151200 | select * from employees limit 10 |
| 5 | 1.97315000 | select count(*) from titles |
| 6 | 7.55538075 | select max(1) from salaries |
| 7 | 0.00248975 | select * from salaries limit 1 |
| 8 | 1.50824900 | select max(salary) from salaries |
+----------+------------+----------------------------------+
8 rows in set, 1 warning (0.00 sec)
SHOW PROFILE显示单条SQL语句的详细信息,其语法如下:
SHOW PROFILE [type [, type] ... ]
[FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
type: {
ALL: 显示所有性能信息
| BLOCK IO: 显示I/O操作的次数
| CONTEXT SWITCHES: 显示上下文切换次数
| CPU: 显示用户CPU时间、系统CPU时间
| IPC: 显示发送和接收的消息数量
| MEMORY
| PAGE FAULTS: 显示页错误数量
| SOURCE: 显示源码中的函数名称与位置
| SWAPS: 显示swap的次数
}
例如查询第8条SQL的I/O操作次数以及CPU使用时间:
mysql> show profile BLOCK IO, CPU for query 8;
+----------------------+----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+----------------------+----------+----------+------------+--------------+---------------+
| starting | 0.000068 | 0.000000 | 0.000000 | NULL | NULL |
| checking permissions | 0.000009 | 0.000000 | 0.000000 | NULL | NULL |
| Opening tables | 0.000022 | 0.000000 | 0.000000 | NULL | NULL |
| init | 0.000039 | 0.000000 | 0.000000 | NULL | NULL |
| System lock | 0.000010 | 0.000000 | 0.000000 | NULL | NULL |
| optimizing | 0.000013 | 0.000000 | 0.000000 | NULL | NULL |
| statistics | 0.000029 | 0.000000 | 0.000000 | NULL | NULL |
| preparing | 0.000018 | 0.000000 | 0.000000 | NULL | NULL |
| executing | 0.000003 | 0.000000 | 0.000000 | NULL | NULL |
| Sending data | 1.507877 | 1.484375 | 0.000000 | NULL | NULL |
| end | 0.000013 | 0.000000 | 0.000000 | NULL | NULL |
| query end | 0.000013 | 0.000000 | 0.000000 | NULL | NULL |
| closing tables | 0.000013 | 0.000000 | 0.000000 | NULL | NULL |
| freeing items | 0.000092 | 0.000000 | 0.000000 | NULL | NULL |
| cleaning up | 0.000031 | 0.000000 | 0.000000 | NULL | NULL |
+----------------------+----------+----------+------------+--------------+---------------+
15 rows in set, 1 warning (0.00 sec)
2 Performance Schema
通过MySQL的官方文档可知,SHOW PROFILE和SHOW PROFILES已经弃用,并且将在后续版本中移除,我们可以使用Performance Schema代替。MySQL的PERFORMANCE SCHEMA用于监控MySQL Server在一个较低级别的运行过程中的资源消耗、资源等待等情况。
3 SHOW PROCESSLIST
使用SHOW PROCESSLIST查看连接的线程个数,来观察是否有大量线程处于不正常的状态或者其他不正常的特征。
mysql> show processlist;
+----+------+-----------------+--------------------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------------+--------------------+---------+------+----------+------------------+
| 9 | root | localhost:55938 | performance_schema | Query | 0 | starting | show processlist |
| 10 | root | localhost:60287 | NULL | Sleep | 5 | | NULL |
+----+------+-----------------+--------------------+---------+------+----------+------------------+
2 rows in set (0.00 sec)
- Info:表示正在执行的SQL。
- Command:表示当前状态,状态有以下几种:
- Sleep:线程正在等待客户端发送新的请求。
- Query:线程正在执行查询或正在将结果发送给客户端。
- Locked:在mysql的服务层,该线程正在等待表锁。
- Sorting result:线程正在对结果集进行排序。
- Sending data:线程可能在多个状态之间传送数据,或者在生成结果集或者向客户端返回数据。
- State:表示命令执行状态
以上是关于MySQL调优性能监控的主要内容,如果未能解决你的问题,请参考以下文章
MySQL管理之道:性能调优高可用与监控 PDF扫描版[61MB] 完整版下载