Welcome 微信登录

首页 / 数据库 / MySQL / 使用MySQL的PROFILING调试功能

MySQL5.0.37版本以上支持PROFILING调试功能,让您可以了解SQL语句消耗资源的详细信息。因为它需要调用系统的getrusage()函数,所以只是在Linux/Unix类平台上才能使用,而不能在Windows平台上使用。而且,PROFILING是针对处理进程(process)而不是线程(thread)的,服务器上的其他应用,可能会影响您的调试结果,因此,这个工具适合开发过程中的调试,如果要在生产环境中调试使用,则要注意它的局限性。参考资料:http://dev.mysql.com/doc/refman/5.6/en/show-profile.htmlPROFILING以及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";)
  • 1
  • 2
  • 下一页
为MySQL数据库的InnoDB引擎配置裸设备(Raw Device)MySQL内部临时表(Internal Temporary Table)相关资讯      MySQL教程  MySQL数据库教程  PROFILING 
  • 30分钟带你快速入门MySQL教程  (02月03日)
  • MySQL教程:关于I/O内存方面的一些  (01月24日)
  • MySQL 处理非法数据  (04/09/2013 08:06:28)
  • MySQL教程:关于checkpoint机制  (01月24日)
  • MySQL::Sandbox  (04/14/2013 08:03:38)
  • CentOS上开启MySQL远程访问权限  (01/29/2013 10:58:40)
本文评论 查看全部评论 (0)
表情: 姓名: 字数