Home >Database >Mysql Tutorial >使用MySQL的PROFILING调试功能

使用MySQL的PROFILING调试功能

WBOY
WBOYOriginal
2016-06-07 17:21:151403browse

MySQL5.0.37版本以上支持PROFILING调试功能,让您可以了解SQL语句消耗资源的详细信息。因为它需要调用系统的getrusage()函数,所

MySQL5.0.37版本以上支持PROFILING调试功能,让您可以了解SQL语句消耗资源的详细信息。因为它需要调用系统的getrusage()函数,所以只是在Linux/Unix类平台上才能使用,而不能在Windows平台上使用。而且,PROFILING是针对处理进程(process)而不是线程(thread)的,服务器上的其他应用,可能会影响您的调试结果,因此,这个工具适合开发过程中的调试,如果要在生产环境中调试使用,则要注意它的局限性。

参考资料:

PROFILING以及PROFILE和PROFILES的格式如下:

mysql> ? SHOW PROFILES;
--------------------------------------------------------------------------------
SHOW PROFILE [type [, type] … ]
    [FOR QUERY n]
    [LIMIT row_count [OFFSET offset]]

type:
    ALL
  | BLOCK IO
  | CONTEXT SWITCHES
  | CPU
  | IPC
  | MEMORY
  | PAGE FAULTS
  | SOURCE
  | SWAPS
--------------------------------------------------------------------------------

默认情况下,这个调试功能是关闭的,您可以查看MySQL数据库的变量参数:

mysql> SELECT @@PROFILING;
+-------------+
| @@PROFILING |
+-------------+
|          0 |
+-------------+

mysql> show variables like '%profil%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| have_profiling        | YES  |
| profiling              | OFF  |
| profiling_history_size | 15    |
+------------------------+-------+

需要使用时,,可以通过SQL命令打开调试功能:

mysql> SET PROFILING=1;

 

然后,开始执行需要测试的SQL语句,MySQL数据库将会记录想关的调试信息,例如:

mysql> SELECT * FROM mysql.user;
mysql> SHOW PROFILE;
+--------------------------------+----------+
| Status                        | Duration |
+--------------------------------+----------+
| starting                      | 0.000041 |
| Waiting for query cache lock  | 0.000007 |
| checking query cache for query | 0.000044 |
| checking permissions          | 0.000011 |
| Opening tables                | 0.000024 |
| System lock                    | 0.000015 |
| init                          | 0.000038 |
| optimizing                    | 0.000009 |
| statistics                    | 0.000014 |
| preparing                      | 0.000012 |
| executing                      | 0.000006 |
| Sending data                  | 0.000087 |
| end                            | 0.000008 |
| query end                      | 0.000006 |
| closing tables                | 0.000010 |
| freeing items                  | 0.000017 |
| logging slow query            | 0.000007 |
| cleaning up                    | 0.000007 |
+--------------------------------+----------+
18 rows in set (0.00 sec)

也可以显示当前所有已经记录的PROFILES,例如:

mysql> SHOW PROFILES;
+----------+------------+--------------------+
| Query_ID | Duration  | Query              |
+----------+------------+--------------------+
|        1 | 0.07194300 | SHOW DATABASES    |
|        2 | 0.01126250 | SELECT DATABASE()  |
|        3 | 0.00059125 | SHOW TABLES        |
|        4 | 0.96143900 | SELECT * FROM  |
+----------+------------+--------------------+
4 rows in set (0.00 sec)

注意:这个List的长度由MySQL的数据库变量参数profiling_history_size决定,预设为15。
(命令查询数据库变量参数:mysql> show variables like 'profiling_history_size';)

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn