mysql的sql语句优化都使用explain,但是这个没有办法知道详细的Memory/CPU等使用量
MySQL Query Profiler, 可以查询到此 SQL 语句会执行多少, 并看出 CPU/Memory 使用
量, 执行过程 System lock, Table lock 花多少时间等等.
mysql> show variables like 'profiling%';
+------------------------+-------+
| Variable_name |
Value |
+------------------------+-------+
| profiling |
OFF |
| profiling_history_size | 15 |
+------------------------+-------+
开启此功能
mysql>set profiling=1;
mysql> show variables like 'profiling%';
# 此命令会让mysql在 information_schema 的 database 建立一個 PROFILING 的
table 来记录.
+------------------------+-------+
| Variable_name |
Value |
+------------------------+-------+
| profiling |
ON |
| profiling_history_size | 15 |
+------------------------+-------+
profiling_history_size记录多少次查询
mysql> show profiles;
+----------+------------+------------------------------------+
| Query_ID | Duration |
Query |
+----------+------------+------------------------------------+
| 1
| 0.00018100 | show variables like 'profiling%' |
| 2
| 0.00020400 | show variables like 'profiling%' |
| 3
| 0.00007800 | set profiling=1 |
| 4
| 0.00011000 | show variables like 'profiling%' |
| 5
| 0.00002400 | select count(1) from `mrhao_stats` |
| 6
| 1.52181400 | select count(*) from `mrhao_stats` |
| 7
| 0.00026900 | show variables like 'profiling%' |
mysql> show profile for query 6;
+--------------------------------+----------+
| Status |
Duration |
+--------------------------------+----------+
| (initialization) |
0.000003 |
| checking query cache for query | 0.000042 |
| Opening tables |
0.00001 |
| System lock |
0.000004 |
| Table lock |
0.000025 |
| init |
0.000009 |
| optimizing |
0.000003 |
| statistics |
0.000007 |
| preparing |
0.000007 |
| executing |
0.000004 |
| Sending data |
1.521676 |
| end |
0.000007 |
| query end |
0.000003 |
| storing result in query cache | 0.000002 |
| freeing items |
0.000006 |
| closing tables |
0.000004 |
| logging slow query |
0.000002 |
+--------------------------------+----------+
17 rows in set (0.00 sec)
mysql> show profile cpu for query 6;
+--------------------------------+----------+----------+------------+
| Status |
Duration | CPU_user | CPU_system |
+--------------------------------+----------+----------+------------+
| (initialization) |
0.000003 | 0 |
0 |
| checking query cache for query | 0.000042 | 0.001 |
0 |
| Opening tables |
0.00001 | 0 |
0 |
| System lock |
0.000004 | 0 |
0 |
| Table lock |
0.000025 | 0 |
0 |
| init |
0.000009 | 0 |
0 |
| optimizing |
0.000003 | 0 |
0 |
| statistics |
0.000007 | 0 |
0 |
| preparing |
0.000007 | 0 |
0 |
| executing |
0.000004 | 0 |
0 |
| Sending data |
1.521676 | 1.631752 | 0.036995 |
| end |
0.000007 | 0 |
0 |
| query end |
0.000003 | 0 |
0 |
| storing result in query cache | 0.000002 | 0 |
0 |
| freeing items |
0.000006 | 0 |
0 |
| closing tables |
0.000004 | 0 |
0 |
| logging slow query |
0.000002 | 0 |
0 |
+--------------------------------+----------+----------+------------+
17 rows in set (0.00 sec)
*
ALL - displays all information
*
BLOCK IO - displays counts for block input and output operations
*
CONTEXT SWITCHES - displays counts for voluntary and involuntary
context switches
*
IPC - displays counts for messages sent and received
*
MEMORY - is not currently implemented
*
PAGE FAULTS - displays counts for major and minor page faults
*
SOURCE - displays the names of functions from the source code, together
with the name and line number of the file in which the function occurs
*
SWAPS - displays swap counts
查询时间跟cpu的使用
mysql> select min(seq) seq,state,count(*) numb_ops,
round(sum(duration),5)
sum_dur, round(avg(duration),5) avg_dur,
round(sum(cpu_user),5)
sum_cpu, round(avg(cpu_user),5) avg_cpu
from
information_schema.profiling
where
query_id = 7
group
by state
order
by seq;
关闭此功能
mysql> set profiling=0;
mysql> show variables like 'profiling%';
+------------------------+-------+
| Variable_name |
Value |
+------------------------+-------+
| profiling |
OFF |
| profiling_history_size | 15 |
+------------------------+-------+
MySQL Query Profiler, 可以查询到此 SQL 语句会执行多少, 并看出 CPU/Memory 使用
量, 执行过程 System lock, Table lock 花多少时间等等.
mysql> show variables like 'profiling%';
+------------------------+-------+
| Variable_name
+------------------------+-------+
| profiling
| profiling_history_size | 15
+------------------------+-------+
开启此功能
mysql>set profiling=1;
mysql> show variables like 'profiling%';
# 此命令会让mysql在 information_schema 的 database 建立一個 PROFILING 的
table 来记录.
+------------------------+-------+
| Variable_name
+------------------------+-------+
| profiling
| profiling_history_size | 15
+------------------------+-------+
profiling_history_size记录多少次查询
mysql> show profiles;
+----------+------------+------------------------------------+
| Query_ID | Duration
+----------+------------+------------------------------------+
|
|
|
|
|
|
|
mysql> show profile for query 6;
+--------------------------------+----------+
| Status
+--------------------------------+----------+
| (initialization)
| checking query cache for query | 0.000042 |
| Opening tables
| System lock
| Table lock
| init
| optimizing
| statistics
| preparing
| executing
| Sending data
| end
| query end
| storing result in query cache | 0.000002 |
| freeing items
| closing tables
| logging slow query
+--------------------------------+----------+
17 rows in set (0.00 sec)
mysql> show profile cpu for query 6;
+--------------------------------+----------+----------+------------+
| Status
+--------------------------------+----------+----------+------------+
| (initialization)
| checking query cache for query | 0.000042 | 0.001
| Opening tables
| System lock
| Table lock
| init
| optimizing
| statistics
| preparing
| executing
| Sending data
| end
| query end
| storing result in query cache | 0.000002 | 0
| freeing items
| closing tables
| logging slow query
+--------------------------------+----------+----------+------------+
17 rows in set (0.00 sec)
context switches
with the name and line number of the file in which the function occurs
查询时间跟cpu的使用
mysql> select min(seq) seq,state,count(*) numb_ops,
关闭此功能
mysql> set profiling=0;
mysql> show variables like 'profiling%';
+------------------------+-------+
| Variable_name
+------------------------+-------+
| profiling
| profiling_history_size | 15
+------------------------+-------+