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 的慢查询,找到性能瓶颈并进行针对性的优化。

相关推荐
画扇落汗9 分钟前
Python 几种将数据插入到数据库的方法(单行插入、批量插入,SQL Server、MySQL,insert into)
数据库·python·sql·mysql
银河系的一束光11 分钟前
mysql的下载和安装2025.4.8
数据库·mysql
Full Stack Developme18 分钟前
SQL 查询中使用 IN 导致性能问题的解决方法
数据库·sql
神经星星1 小时前
【vLLM 学习】API 客户端
数据库·人工智能·机器学习
小光学长2 小时前
基于flask+vue框架的助贫公益募捐管理系统1i6pi(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
XiaoLeisj2 小时前
【图书管理系统】深入解析基于 MyBatis 数据持久化操作:全栈开发图书管理系统:查询图书属性接口(注解实现)、修改图书属性接口(XML 实现)
xml·java·数据库·spring boot·sql·java-ee·mybatis
Alt.92 小时前
SpringMVC基础一(SpringMVC运行原理)
数据库·spring·mvc
薛晓刚3 小时前
OceanBase单机版保姆级安装
数据库
亚林瓜子4 小时前
Clickhouse试用单机版部署
数据库·clickhouse·aws·ec2
Gauss松鼠会4 小时前
GaussDB回调机制深度实践:从事件驱动到系统集成
开发语言·javascript·数据库·sql·gaussdb