千家信息网

怎么获取有性能问题的sql

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要介绍"怎么获取有性能问题的sql",在日常操作中,相信很多人在怎么获取有性能问题的sql问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么获取有性能问题的s
千家信息网最后更新 2024年09月22日怎么获取有性能问题的sql

这篇文章主要介绍"怎么获取有性能问题的sql",在日常操作中,相信很多人在怎么获取有性能问题的sql问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么获取有性能问题的sql"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

  • 用户反馈:获取存在性能问题的sql

  • 慢查询日志:获取存在性能问题的sql

  • 实时获取存在性能的sql

使用慢查询日志获取有性能问题的sql

  • slow_query_log 启动停止记录慢查询日志

  • slow_query_log_file 指定慢查询日志的存储路径以及文件

  • long_query_time 指定记录慢查询日志sql执行时间的阈值

  • log_queries_not_using_indexes 是否记录未使用的索引的sql

  • 1:用户信息以及线程id

  • 2:执行查询时间

  • 3:锁的时间

  • 4、返回数据行数

  • 5、扫描数据的行数

  • 6、执行sql时间

  • 7、执行的sql

常用慢查询日志分析工具 mysqldumpslow

常用慢查询分析工具 pt-query-digest

pt-query-digest \

--explain h=127.0.0.1, u=root,p=p@ssW0rd \ slow-mysql.log

实时查询

查询处理各个阶段所消耗的时间

使用profile

1、set profiling = 1 ;

执行查询

  • 启动profile

  • 这是一个session级的配置

2、show profiles;

查看每一个查询所消耗的总时间的信息

mysql> show profiles;
+----------+------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| 1 | 0.00012525 | sel

select count(*) from temp_shop_user |
| 2 | 0.09744925 | select count(*) from temp_shop_user

3、show profiles for query N;

查询的每个阶段所消耗的时间

mysql> show profile for query 1 ;
+--------------------+----------+
| Status | Duration |
+--------------------+----------+
| starting | 2.5E-5 |
| freeing items | 9.6E-5 |
| logging slow query | 3E-6 |
| cleaning up | 2E-6 |
+--------------------+----------+
4 rows in set

4、查询cpu信息

mysql> show profile cpu for query 3;
+----------------------+----------+----------+------------+
| Status | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| starting | 3.5E-5 | 0 | 0 |
| checking permissions | 6E-6 | 0 | 0 |
| Opening tables | 1.3E-5 | 0 | 0 |
| System lock | 6E-6 | 0 | 0 |
| init | 8E-6 | 0 | 0 |
| optimizing | 3E-6 | 0 | 0 |
| statistics | 7E-6 | 0 | 0 |
| preparing | 4E-6 | 0 | 0 |
| executing | 2E-6 | 0 | 0 |
| Sending data | 0.0296 | 0.03125 | 0 |
| end | 1E-5 | 0 | 0 |
| query end | 3E-6 | 0 | 0 |
| closing tables | 8E-6 | 0 | 0 |
| freeing items | 0.000125 | 0 | 0 |
| logging slow query | 2E-6 | 0 | 0 |
| cleaning up | 3E-6 | 0 | 0 |
+----------------------+----------+----------+------------+
16 rows in set

5、performance_schema

5.6之后版本,建议启用

1>进入performance_schema 库
mysql> use performance_schema ;
Database changed
2>mysql> update setup_instruments set enabled ='YES' where name like 'stage%';
Query OK, 0 rows affected
Rows matched: 0 Changed: 0 Warnings: 0

3>启动历史记录表

mysql> update setup_consumers set enabled ='YES' where name like 'events%';
Query OK, 0 rows affected
Rows matched: 6 Changed: 0 Warnings: 0

到此,关于"怎么获取有性能问题的sql"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0