[转]使用mysql profiles 来查看sql 语句执行计划

From : http://blog.csdn.net/radkitty/article/details/4632289

要使用该功能,mysql的版本必须在5.0.37版本以上。否则只能使用explain 的方式来检查。

profiling 功能可以了解到cpu io 等更详细的信息。

show profile 的格式如下:

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>select @@profiling;

+-------------+

| @@profiling |

+-------------+

| 0 |

+-------------+

1 row in set (0.00 sec)

打开功能

mysql>set profiling=1;

+-------------+

| @@profiling |

+-------------+

| 1 |

+-------------+

1 row in set (0.00 sec)

输入需要执行的sql 语句:

mysql>select count(*) from sysuser;

mysql>select count(*) from sysuser;

mysql> show profiles/G;

*************************** 1. row ***************************

Query_ID: 1

Duration: 0.00007550

Query: select count(*) from sysuser

1 row in set (0.00 sec)

通过指定的Query_ID 来查询指定的sql语句的执行信息:

mysql> show profile for query 1;

+--------------------------------+----------+

| Status | Duration |

+--------------------------------+----------+

| starting | 0.000028 |

| checking query cache for query | 0.000008 |

| checking privileges on cached | 0.000009 |

| sending cached result to clien | 0.000023 |

| logging slow query | 0.000004 |

| cleaning up | 0.000003 |

+--------------------------------+----------+

6 rows in set (0.00 sec)

mysql> show profile cpu,block io for query 1;

+--------------------------------+----------+----------+------------+--------------+---------------+

| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |

+--------------------------------+----------+----------+------------+--------------+---------------+

| starting | 0.000028 | NULL | NULL | NULL | NULL |

| checking query cache for query | 0.000008 | NULL | NULL | NULL | NULL |

| checking privileges on cached | 0.000009 | NULL | NULL | NULL | NULL |

| sending cached result to clien | 0.000023 | NULL | NULL | NULL | NULL |

| logging slow query | 0.000004 | NULL | NULL | NULL | NULL |

| cleaning up | 0.000003 | NULL | NULL | NULL | NULL |

+--------------------------------+----------+----------+------------+--------------+---------------+

6 rows in set (0.00 sec)

如果不带for 参数则指列出最后一条语句的profile 信息:

mysql> show profile cpu,block io for query 1;

+--------------------------------+----------+----------+------------+--------------+---------------+

| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |

+--------------------------------+----------+----------+------------+--------------+---------------+

| starting | 0.000028 | NULL | NULL | NULL | NULL |

| checking query cache for query | 0.000008 | NULL | NULL | NULL | NULL |

| checking privileges on cached | 0.000009 | NULL | NULL | NULL | NULL |

| sending cached result to clien | 0.000023 | NULL | NULL | NULL | NULL |

| logging slow query | 0.000004 | NULL | NULL | NULL | NULL |

| cleaning up | 0.000003 | NULL | NULL | NULL | NULL |

+--------------------------------+----------+----------+------------+--------------+---------------+

6 rows in set (0.00 sec)

关闭参数:

mysql> set profiling=0

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| profiling | OFF |

+---------------+-------+

1 row in set (0.00 sec)