MySQL调优(一)性能监控

文章目录

  • 前言
  • 1 SHOW PROFILE & SHOW PROFILES
  • 2 Performance Schema
  • 3 SHOW PROCESSLIST

前言

  无监控,不调优。无论是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,数据库)