分析SQL执行带来的开销是优化SQL的重要手段。在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析。该参数可以在全局和session级别来设置。对于全局级别则作用于整个MySQL实例,而session级别紧影响当前session。该参数开启后,后续执行的SQL语句都将记录其资源开销,诸如IO,上下文切换,CPU,Memory等等。根据这些开销进一步分析当前SQL瓶颈从而进行优化与调整。
注意:MySQL5.0.37版本以上支持PROFILING调试功能,但是因为它需要调用系统的getrusage函数(用于获取进程资源使用量),所以只是在Linux/Unix类平台上才能使用,并且PROFILING是针对处理进程(process)而不是线程(thread)的;服务器上的其他应用,比如说服务器负载不同,MySQL的响应速度、IO效率等可能不同,从而导致PROFILING结果不同(即便是对同一条SQL语句),因此,这个工具适合开发过程中的调试,如果要在生产环境中调试使用,则要注意它的局限性。
1、获取你的MySQL服务器版本
2、查看profiling系统变量
3、来查看是否已经启用profile
mysql> select @@PROFILING;
+————-+
| @@PROFILING |
+————-+
| 0 |
+————-+
1 row in set (0.03 sec)
如果profiling值为0,可以通过
SET profiling = 1;
来启用。启用profiling之后,我们执行一条查询语句,比如:
mysql> SELECT * FROM mysql.user;
然后show profiles查看如下:
mysql> show profiles;
+———-+————+——————————–+
| Query_ID | Duration | Query |
+———-+————+——————————–+
| 1 | 0.00015400 | select @@PROFILING |
| 2 | 0.00 | SELECT * FROM mysql.user |
+———-+————+——————————–+
2 rows in set (0.00 sec)
其中ID为2的语句是刚执行的查询语句,profiles文件只会记录当前session并且profile打开之后的SQL语句。
5、利用profile获取SQL语句的开销信息
注意:
(1)show profile之类的语句不会被profiling,即自身不会产生Profiling
(2)变量profiling是用户变量,每次都得重新启用(session退出之后,profiling会被自动关闭 )。
下面是profile的常用功能:
mysql> SHOW TABLES;
+———————-+
| Tables_in_test |
+———————-+
| account |
| branch |
+———————-+
2 rows in set (0.00 sec)
mysql> SELECT COUNT() FROM account;
+———-+
| COUNT() |
+———-+
| 24 |
+———-+
1 row in set (0.00 sec)
mysql> SHOW PROFILES;
+———-+————+——————————+
| Query_ID | Duration | Query |
+———-+————+——————————+
| 1 | 0.00 | SHOW TABLES |
| 2 | 0.00021700 | SELECT COUNT(*) FROM account |
+———-+————+——————————+
2 rows in set (0.00 sec)
结果如下:
现在我也只是具体用了这么点,在具体生产环境里,怎么利用它来优化MySQL(SQL执行)、找出具体的SQL优化方案,有待进一步学习。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/194456.html