mysql 分析慢查询

要分析 MySQL 中的慢查询,可以使用以下方法和工具:

  1. 启用慢查询日志:

    • 步骤 :
      1. 打开 MySQL 配置文件(my.cnfmy.ini)。

      2. 添加或修改以下参数:

        复制代码
        slow_query_log = 1
        slow_query_log_file = /path/to/your/mysql-slow.log
        long_query_time = 2

        这里的 long_query_time 设置为 2 秒,即查询超过 2 秒的将被记录到慢查询日志中。 3. 重启 MySQL 服务以应用配置。 4. 确认设置生效:

        复制代码
        SHOW VARIABLES LIKE 'slow_query_log';
        SHOW VARIABLES LIKE 'slow_query_log_file';
        SHOW VARIABLES LIKE 'long_query_time';

2.分析慢查询日志:

  • 使用 mysqldumpslow : mysqldumpslow 是一个用于分析慢查询日志的命令行工具。

    • 基本用法:

      mysqldumpslow -s t /path/to/your/mysql-slow.log

  • 这里的 -s t 表示按时间排序。

  • 常用选项:

    • -s : 排序方式(c - 计数, l - 锁时间, r - 返回记录, t - 查询时间, al - 平均锁时间, ar - 平均返回记录, at - 平均查询时间)
    • -t : 返回前 N 条查询
    • -g : 使用正则表达式匹配特定查询

3.使用 EXPLAIN 分析查询:

  • EXPLAIN 可以显示查询的执行计划,帮助了解查询执行的具体步骤。

  • 使用方法:

    EXPLAIN SELECT * FROM your_table WHERE your_conditions;

  • 输出解释:

    • id:查询中select的序列号。
    • select_type:查询的类型(SIMPLE、PRIMARY、UNION、SUBQUERY等)。
    • table:表名。
    • type:连接类型(ALL、index、range、ref、eq_ref、const、system、NULL)。
    • possible_keys:查询中可能使用的索引。
    • key:实际使用的索引。
    • key_len:使用的索引长度。
    • ref:索引的列。
    • rows:预计读取的行数。
    • Extra:额外信息(如Using index, Using where, Using temporary, Using filesort)。

4.使用性能模式(Performance Schema):

  • MySQL 的性能模式是一个用于监控服务器性能的工具。

  • 启用和配置性能模式:

    UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME = 'events_statements_history';
    UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME = 'events_statements_current';

查询慢查询信息:

复制代码
SELECT * FROM performance_schema.events_statements_history WHERE TIMER_WAIT > 2000000000;  -- 2秒

5.使用第三方工具:

  • pt-query-digest : pt-query-digest 是 Percona Toolkit 中的一个工具,用于分析慢查询日志和其他日志文件。
    • 使用方法,它会生成详细的分析报告,包含最慢的查询、频率、时间分布等信息。

      复制代码
      pt-query-digest /path/to/your/mysql-slow.log

​​​​​MySQL Workbench: MySQL Workbench 提供了一个图形界面工具,可以分析慢查询日志并生成报告。

通过上述方法,可以有效分析和优化 MySQL 的慢查询,找到性能瓶颈并进行针对性的优化。

相关推荐
AI绘画小3315 分钟前
渗透测试数据库判断卡壳?分类 + 方法 + SQL/NoSQL 脚本速用
服务器·数据库·sql·mysql·web安全·nosql
启明真纳1 小时前
Logstash 从 MySQL 同步数据到 Kafka
mysql·kafka·linq
无敌最俊朗@1 小时前
01-总结
java·jvm·数据库
think2cat1 小时前
图书馆的"备份书库"与"时光机":MongoDB副本集深度揭秘
数据库·mongodb
清风6666661 小时前
基于单片机的多模式智能洗衣机设计
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
武子康2 小时前
Java-167 Neo4j CQL 实战:CREATE/MATCH 与关系建模速通 案例实测
java·开发语言·数据库·python·sql·nosql·neo4j
Fency咖啡2 小时前
redis进阶 - 底层数据结构
数据结构·数据库·redis
Java水解2 小时前
MySQL 正则表达式:REGEXP 和 RLIKE 操作符详解
后端·mysql
The Sheep 20232 小时前
MicroService(Redis)
数据库·redis·c#