MySQL优化工具之profiling
使用慢查询日志分析出慢查询语句后,用profiling分析该语句的优化后执行效果。
查看慢查询设置
mysql> show variables like "%slow%";
+---------------------+---------------------------------+
| Variable_name | Value |
+---------------------+---------------------------------+
| log_slow_queries | ON |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/slow-queries.log |
+---------------------+---------------------------------+
4 rows in set (0.00 sec)
更改慢查询日志的文件位置:
mkdir /data/slow
chown -R mysql:mysql /data/slow
mysql> set global slow_query_log_file = "/data/slow/slow.log";
mysql> show variables like "%long_query_time%";
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
设置慢查询记录,单位为秒
mysql> set long_query_time = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%long_query_time%";
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
mysql> show variables like "%pro%";
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| have_profiling | YES |
| profiling | OFF |
| profiling_history_size | 15 |
| protocol_version | 10 |
| proxy_user | |
| slave_compressed_protocol | OFF |
| stored_program_cache | 256 |
+---------------------------+-------+
7 rows in set (0.00 sec)
开启profiling
mysql> set profiling = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like "%pro%";
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| have_profiling | YES |
| profiling | ON |
| profiling_history_size | 15 |
| protocol_version | 10 |
| proxy_user | |
| slave_compressed_protocol | OFF |
| stored_program_cache | 256 |
+---------------------------+-------+
7 rows in set (0.00 sec)
查看sql语句执行情况
mysql> show profiles;
+----------+------------+--------------------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+--------------------------------------------------------------------+
| 10 | 0.00034150 | show variables like "%slow%" |
| 11 | 0.00009450 | set global slow_query_log_file = /data/slow.log |
| 12 | 0.00008825 | set global slow_query_log_file = "/data/slow.log" |
| 13 | 0.00016525 | set global slow_query_log_file = "/data/slow/slow.log" |
| 14 | 0.00004975 | set global slow_query_log_file = /data/slow/slow.log |
| 15 | 0.00031400 | show variables like "%slow%" |
| 16 | 0.00005325 | set global slow_query_log_file = /var/lib/mysql/slow-queries.log |
| 17 | 0.00009750 | set global slow_query_log_file = "/var/lib/mysql/slow-queries.log" |
| 18 | 0.00029575 | show variables like "%slow%" |
| 19 | 0.00028575 | show variables like "%pro%" |
| 20 | 0.00032200 | show variables like "%pro%" |
| 21 | 0.00028725 | show variables like "%pro%" |
| 22 | 0.00003675 | show profile for qurey 21 |
| 23 | 0.00004700 | show profile for qurey 1 |
| 24 | 0.00003450 | reset query cache |
+----------+------------+--------------------------------------------------------------------+
15 rows in set (0.00 sec)
查看单个sql语句的详细信息
mysql> show profile for query 15;
+--------------------+----------+
| Status | Duration |
+--------------------+----------+
| starting | 0.000049 |
| Opening tables | 0.000029 |
| System lock | 0.000006 |
| init | 0.000006 |
| optimizing | 0.000003 |
| statistics | 0.000006 |
| preparing | 0.000006 |
| executing | 0.000174 |
| Sending data | 0.000012 |
| end | 0.000003 |
| query end | 0.000002 |
| closing tables | 0.000002 |
| removing tmp table | 0.000004 |
| closing tables | 0.000002 |
| freeing items | 0.000008 |
| logging slow query | 0.000002 |
| cleaning up | 0.000002 |
+--------------------+----------+
17 rows in set (0.00 sec)
清除sql缓存
mysql> reset query cache;
Query OK, 0 rows affected (0.00 sec)