Tutorial _ MySQL

Source: Internet
Author: User
This article mainly introduces how MySQL uses profile to query the performance, not only the performance of SQL statements, but also the CPU and memory usage of the system, for more information about MYSQL profiling, see Mysql 5.0.37 or above.

Check whether the profile is enabled

mysql> show variables like '%profil%';

+ Preserve + ------- + | Variable_name | Value | + ------------------------ + ------- + | profiling | OFF | -- enable SQL statement profiling | profiling_history_size | 15 | -- set the number of profiling retained, the default value is 15. the value range is 0 to 100. if the value is 0, profiling + -------------------- + ------- + 2 rows in set (0.00 sec) is disabled)


Enable based on session level

Mysql> set profiling = 1; -- set profiling = off

Query OK, 0 rows affected (0.00 sec)


mysql> select distinct d.account,a.server_id from tab_appserver_user a  -> inner join tab_department_parent b on a.key_id = b.parent_id  -> inner join tab_department_member c on b.department_id = c.department_id and c.state=1  -> and c.isdefault=1 inner join tab_user_info d on c.user_id = d.user_id and d.state=1  -> where a.type=1   -> union            -> select distinct b.account,a.server_id from tab_appserver_user a  -> inner join tab_user_info b on a.key_id = b.user_id and b.state=1  -> where a.type=0;


Check whether the settings take effect:

select @@profiling;

The default value is 0 and the value is 1.


Run the SQL statement:

mysql> select * FROM hx_line WHERE id = '1455023';

View profiles

mysql> show profiles;

+----------+------------+---------------------------------------------+| Query_ID | Duration  | Query                    |+----------+------------+---------------------------------------------+|    1 | 0.00036150 | select * FROM hx_line WHERE id = '1455023' |+----------+------------+---------------------------------------------+

View a specific profile

mysql> show profile FOR QUERY 1;

+--------------------------------+----------+| Status             | Duration |+--------------------------------+----------+| starting            | 0.000013 || Waiting for query cache lock  | 0.000014 || checking query cache for query | 0.000038 || checking permissions      | 0.000006 || Opening tables         | 0.000013 || System lock          | 0.000009 || Waiting for query cache lock  | 0.000024 || init              | 0.000060 || optimizing           | 0.000014 || statistics           | 0.000046 || preparing           | 0.000017 || executing           | 0.000004 || Sending data          | 0.000081 || end              | 0.000005 || query end           | 0.000004 || closing tables         | 0.000008 || freeing items         | 0.000009 || Waiting for query cache lock  | 0.000003 || freeing items         | 0.000013 || Waiting for query cache lock  | 0.000003 || freeing items         | 0.000003 || storing result in query cache | 0.000005 || logging slow query       | 0.000003 || cleaning up          | 0.000004 |+--------------------------------+----------+24 rows

We saw a simple query, and MYSQL performed 24 operations internally.
In addition, I saw a bunch of query cache operations. I tried to disable query_cache_size = 0 and test again:


mysql> show profile FOR QUERY 1;

+----------------------+----------+| Status        | Duration |+----------------------+----------+| starting       | 0.000040 || checking permissions | 0.000007 || Opening tables    | 0.000015 || System lock     | 0.000010 || init         | 0.000061 || optimizing      | 0.000013 || statistics      | 0.000059 || preparing      | 0.000018 || executing      | 0.000004 || Sending data     | 0.000092 || end         | 0.000006 || query end      | 0.000004 || closing tables    | 0.000008 || freeing items    | 0.000020 || logging slow query  | 0.000003 || cleaning up     | 0.000004 |+----------------------+----------+16 rows in set (0.00 sec)

When query_cache is enabled, you need to perform six more operations. In this example, 0.000087 s is added.

Query the CPU usage of this statement:

mysql> show profile cpu FOR QUERY 1;

+----------------------+----------+----------+------------+| Status        | Duration | CPU_user | CPU_system |+----------------------+----------+----------+------------+| starting       | 0.000037 | 0.000000 |  0.000000 || checking permissions | 0.000009 | 0.000000 |  0.000000 || Opening tables    | 0.000014 | 0.000000 |  0.000000 || System lock     | 0.000009 | 0.000000 |  0.000000 || init         | 0.000059 | 0.000000 |  0.000000 || optimizing      | 0.000009 | 0.000000 |  0.000000 || statistics      | 0.000044 | 0.000000 |  0.000000 || preparing      | 0.000015 | 0.000000 |  0.000000 || executing      | 0.000004 | 0.000000 |  0.000000 || Sending data     | 0.000081 | 0.000000 |  0.000000 || end         | 0.000006 | 0.000000 |  0.000000 || query end      | 0.000004 | 0.000000 |  0.000000 || closing tables    | 0.000008 | 0.000000 |  0.000000 || freeing items    | 0.000021 | 0.000000 |  0.000000 || logging slow query  | 0.000004 | 0.000000 |  0.000000 || cleaning up     | 0.000004 | 0.000000 |  0.000000 |+----------------------+----------+----------+------------+




View io and cpu consumption

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

+--------------------------------+----------+----------+------------+--------------+---------------+| Status             | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |+--------------------------------+----------+----------+------------+--------------+---------------+| starting            | 0.000018 |   NULL |    NULL |     NULL |     NULL || checking query cache for query | 0.000099 |   NULL |    NULL |     NULL |     NULL || Opening tables         | 0.000963 |   NULL |    NULL |     NULL |     NULL || System lock          | 0.000015 |   NULL |    NULL |     NULL |     NULL || Table lock           | 0.000169 |   NULL |    NULL |     NULL |     NULL || optimizing           | 0.000020 |   NULL |    NULL |     NULL |     NULL || statistics           | 0.000027 |   NULL |    NULL |     NULL |     NULL || preparing           | 0.000018 |   NULL |    NULL |     NULL |     NULL || Creating tmp table       | 0.000055 |   NULL |    NULL |     NULL |     NULL || executing           | 0.000003 |   NULL |    NULL |     NULL |     NULL || Copying to tmp table      | 0.704845 |   NULL |    NULL |     NULL |     NULL || Sending data          | 0.130039 |   NULL |    NULL |     NULL |     NULL || optimizing           | 0.000029 |   NULL |    NULL |     NULL |     NULL || statistics           | 0.000029 |   NULL |    NULL |     NULL |     NULL || preparing           | 0.000020 |   NULL |    NULL |     NULL |     NULL || Creating tmp table       | 0.000142 |   NULL |    NULL |     NULL |     NULL || executing           | 0.000003 |   NULL |    NULL |     NULL |     NULL || Copying to tmp table      | 0.000086 |   NULL |    NULL |     NULL |     NULL || Sending data          | 0.000067 |   NULL |    NULL |     NULL |     NULL || optimizing           | 0.000004 |   NULL |    NULL |     NULL |     NULL || statistics           | 0.000005 |   NULL |    NULL |     NULL |     NULL || preparing           | 0.000005 |   NULL |    NULL |     NULL |     NULL || executing           | 0.000002 |   NULL |    NULL |     NULL |     NULL || Sending data          | 0.023963 |   NULL |    NULL |     NULL |     NULL || removing tmp table       | 0.003420 |   NULL |    NULL |     NULL |     NULL || Sending data          | 0.000005 |   NULL |    NULL |     NULL |     NULL || removing tmp table       | 0.003308 |   NULL |    NULL |     NULL |     NULL || Sending data          | 0.000006 |   NULL |    NULL |     NULL |     NULL || removing tmp table       | 0.000007 |   NULL |    NULL |     NULL |     NULL || Sending data          | 0.000009 |   NULL |    NULL |     NULL |     NULL || query end           | 0.000003 |   NULL |    NULL |     NULL |     NULL || freeing items         | 0.000144 |   NULL |    NULL |     NULL |     NULL || storing result in query cache | 0.000011 |   NULL |    NULL |     NULL |     NULL || logging slow query       | 0.000003 |   NULL |    NULL |     NULL |     NULL || cleaning up          | 0.000006 |   NULL |    NULL |     NULL |     NULL |+--------------------------------+----------+----------+------------+--------------+---------------+35 rows in set (0.00 sec)


Sort consumption by query statement

mysql> SELECT STATE, SUM(DURATION) AS Total_R,ROUND( 100 * SUM(DURATION) / (SECT SUM(DURATION)  -> FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 1), 2) AS Pct_R, COT(*) AS Calls,SUM(DURATION) / COUNT(*) AS "R/Call"  -> FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 1 GROUP BY STATE OER BY Total_R DESC;

+--------------------------------+----------+-------+-------+--------------+| STATE             | Total_R | Pct_R | Calls | R/Call    |+--------------------------------+----------+-------+-------+--------------+| Copying to tmp table      | 0.704931 | 81.26 |   2 | 0.3524655000 || Sending data          | 0.154089 | 17.76 |   6 | 0.0256815000 || removing tmp table       | 0.006735 | 0.78 |   3 | 0.0022450000 || Opening tables         | 0.000963 | 0.11 |   1 | 0.0009630000 || Creating tmp table       | 0.000197 | 0.02 |   2 | 0.0000985000 || Table lock           | 0.000169 | 0.02 |   1 | 0.0001690000 || freeing items         | 0.000144 | 0.02 |   1 | 0.0001440000 || checking query cache for query | 0.000099 | 0.01 |   1 | 0.0000990000 || statistics           | 0.000061 | 0.01 |   3 | 0.0000203333 || optimizing           | 0.000053 | 0.01 |   3 | 0.0000176667 || preparing           | 0.000043 | 0.00 |   3 | 0.0000143333 || starting            | 0.000018 | 0.00 |   1 | 0.0000180000 || System lock          | 0.000015 | 0.00 |   1 | 0.0000150000 || storing result in query cache | 0.000011 | 0.00 |   1 | 0.0000110000 || executing           | 0.000008 | 0.00 |   3 | 0.0000026667 || cleaning up          | 0.000006 | 0.00 |   1 | 0.0000060000 || logging slow query       | 0.000003 | 0.00 |   1 | 0.0000030000 || query end           | 0.000003 | 0.00 |   1 | 0.0000030000 |+--------------------------------+----------+-------+-------+--------------+18 rows in set (0.01 sec)

Additional commands for show profile:
* 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 ED
* 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

Note: profile is a very quantified sub-Mark. we can compare the consumption of various resources based on these quantitative indicators, which is conducive to our overall control over this statement!

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.