MySQL慢查询工具的使用小结

 更新时间:2025年08月10日 09:33:03   作者:Victor356  
使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下

使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询。以下是详细深入的步骤和代码示例,帮助你使用MySQL的慢查询工具来进行查询分析和优化。

一、启用慢查询日志

首先,你需要确保MySQL的慢查询日志功能是启用的。慢查询日志记录了所有执行时间超过指定阈值的SQL查询。

1.1 编辑MySQL配置文件

编辑my.cnf(Linux)或my.ini(Windows)配置文件,添加或修改以下配置:

[mysqld]
slow_query_log = 1  # 启用慢查询日志
slow_query_log_file = /var/log/mysql/mysql-slow.log  # 指定慢查询日志文件的位置
long_query_time = 1  # 设置慢查询的阈值,单位是秒
log_queries_not_using_indexes = 1  # 记录未使用索引的查询(可选)

1.2 重启MySQL服务

应用配置更改后,重启MySQL服务:

sudo systemctl restart mysql  # 对于systemd系统
# 或者
sudo service mysql restart  # 对于init.d系统

二、配置动态参数(可选)

如果无法修改配置文件或者不想重启MySQL服务,也可以动态设置这些参数:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = 1;

三、分析慢查询日志

启用慢查询日志后,MySQL会记录执行时间超过long_query_time阈值的查询。你可以使用mysqldumpslow工具或pt-query-digest工具来分析这些日志。

3.1 使用mysqldumpslow工具

mysqldumpslow是MySQL自带的工具,用于分析慢查询日志。

mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log

命令说明:

  • -s:排序方式(t:按照查询时间排序,c:按照次数排序,l:按照锁时间排序,r:按照返回记录数排序)。
  • -t:显示前N条记录。
  • /var/log/mysql/mysql-slow.log:慢查询日志文件的位置。

示例输出:

Reading mysql slow query log from /var/log/mysql/mysql-slow.log
Count: 3  Time=5.00s (15s)  Lock=0.00s (0s)  Rows=10.0 (30), root[root]@localhost
  SELECT * FROM orders WHERE customer_id = '12345'

Count: 2  Time=2.50s (5s)  Lock=0.00s (0s)  Rows=100 (200), root[root]@localhost
  SELECT * FROM products WHERE price > 1000

3.2 使用pt-query-digest工具

pt-query-digest是Percona Toolkit中提供的强大工具,用于分析慢查询日志。

pt-query-digest /var/log/mysql/mysql-slow.log > slow_query_report.txt

示例输出(部分):

# Overall: 80 total, 10 unique, 0.01 QPS, 0.01x concurrency _______________
# Time range: 2021-10-01 10:00:00 to 2021-10-01 11:00:00
# Attribute    total   min     max     avg     95%  stddev  median
# ============ ======= ======= ======= ======= ======= ======= =======
# Count          80
# Exec time     30s     50ms    2s      375ms   1s    450ms   300ms
# Lock time     1s      0ms     50ms    12ms    25ms  10ms    15ms
# Rows sent     800     1       100     10      50    20      5
# Rows examine  8000    10      500     100     400   150     75

四、优化建议

根据慢查询日志的分析结果,可以采取以下优化措施:

4.1 创建或优化索引

根据分析结果中显示的频繁查询和慢查询,创建或优化索引。

-- 创建索引
CREATE INDEX idx_customer_id ON orders(customer_id);

-- 优化查询语句
SELECT * FROM orders WHERE customer_id = '12345';

4.2 优化查询语句

重写具有高执行时间和高锁等待时间的查询,优化查询逻辑。

优化前:

SELECT * FROM products WHERE price > 1000;

优化后(假设创建了索引):

ALTER TABLE products ADD INDEX (price);
SELECT * FROM products WHERE price > 1000;

4.3 使用EXPLAIN分析执行计划

使用EXPLAIN命令进一步分析查询的执行计划,找出优化的具体措施。

EXPLAIN SELECT * FROM orders WHERE customer_id = '12345';

示例输出:

+----+-------------+--------+------------+------+---------------+---------------+---------+-------+------+----------+-------------+
| id | select_type | table  | partitions | type | possible_keys | key           | key_len | ref   | rows | filtered | Extra       |
+----+-------------+--------+------------+------+---------------+---------------+---------+-------+------+----------+-------------+
|  1 | SIMPLE      | orders | NULL       | ref  | idx_customer_id | idx_customer_id | 4       | const |    1 |   100.00 | Using index |
+----+-------------+--------+------------+------+---------------+---------------+---------+-------+------+----------+-------------+

4.4 分区和分表

对于大表,考虑使用分区或分表策略,以提高查询效率。

-- 创建分区表
CREATE TABLE orders (
    order_id INT NOT NULL,
    order_date DATE NOT NULL,
    customer_id INT NOT NULL,
    amount DECIMAL(10, 2) NOT NULL
)
PARTITION BY RANGE (YEAR(order_date)) (
    PARTITION p0 VALUES LESS THAN (2020),
    PARTITION p1 VALUES LESS THAN (2021),
    PARTITION p2 VALUES LESS THAN (2022),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

五、监控和调整

  1. 监控工具:使用监控工具,如Prometheus、Grafana、Percona Monitoring and Management (PMM)等,实时监控MySQL性能。
  2. 定期检查:定期检查慢查询日志、错误日志和性能指标,及时发现问题并优化。
  3. 自动化调优:使用自动化调优工具,如MySQL Tuner、Percona Toolkit等,定期进行自动化调优。

5.1 使用MySQL Tuner

下载并运行MySQL Tuner:

wget http://mysqltuner.pl/ -O mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl

根据MySQL Tuner的建议调整配置:

[mysqld]
innodb_buffer_pool_size = 8G  # 根据建议调整缓冲池大小
query_cache_size = 512M  # 根据建议调整查询缓存大小

六、总结

通过启用和分析慢查询日志,可以深入了解MySQL查询性能的瓶颈。结合mysqldumpslowpt-query-digest工具的分析结果,可以采取针对性的优化措施,包括创建索引、优化查询语句、调整配置参数等,从而显著提升MySQL数据库的性能和稳定性。通过定期监控和调整,可以确保数据库在高负载和大数据量情况下持续高效运行。

到此这篇关于MySQL慢查询工具的使用小结的文章就介绍到这了,更多相关MySQL 慢查询工具内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql通过ibd文件恢复数据的详细步骤

    Mysql通过ibd文件恢复数据的详细步骤

    mysql在使用的过程中,难免遇到数据库表误操作,下面这篇文章主要给大家介绍了关于Mysql通过ibd文件恢复数据的详细步骤,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • mysql实现查询结果导出csv文件及导入csv文件到数据库操作

    mysql实现查询结果导出csv文件及导入csv文件到数据库操作

    这篇文章主要介绍了mysql实现查询结果导出csv文件及导入csv文件到数据库操作,结合实例形式分析了mysql相关数据库导出、导入语句使用方法及操作注意事项,需要的朋友可以参考下
    2018-07-07
  • MySQL 数据类型及最优选取规则

    MySQL 数据类型及最优选取规则

    这篇文章主要介绍了MySQL 数据类型及最优选取规则,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-08-08
  • MySQL磁盘坏块处理的全流程

    MySQL磁盘坏块处理的全流程

    当 MySQL 所在磁盘出现坏块(Bad Sector),可能导致数据库实例异常重启、表损坏、数据无法读取或写入等严重问题,此类问题不仅涉及 MySQL 层处理,还需配合操作系统和硬件层面进行综合判断与修复,所以本文给大家介绍了MySQL磁盘坏块处理的全流程
    2025-07-07
  • mysql索引原理与用法实例分析

    mysql索引原理与用法实例分析

    这篇文章主要介绍了mysql索引原理与用法,结合实例形式分析了mysql索引的基本概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • mysql中 datatime与timestamp的区别说明

    mysql中 datatime与timestamp的区别说明

    这篇文章主要介绍了mysql中 datatime与timestamp的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • MySQL多列日期同步更新的五种实现方法

    MySQL多列日期同步更新的五种实现方法

    当遇到会员有效期、服务周期、数据版本等需要批量更新日期字段时,如何精准控制日期部分而保留原始时间?所以本文给大家介绍了MySQL多列日期同步更新的五种实现方法,需要的朋友可以参考下
    2025-05-05
  • 查询优化之EXPLAIN的使用分析

    查询优化之EXPLAIN的使用分析

    本篇文章是对EXPLAIN的使用进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Windows系统中完全卸载MySQL数据库实现重装mysql

    Windows系统中完全卸载MySQL数据库实现重装mysql

    这篇文章主要介绍了Windows系统中完全卸载MySQL数据库实现重装mysql数据库的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • mysql根据拼音字母查询(简单易懂的字段拼音查询)

    mysql根据拼音字母查询(简单易懂的字段拼音查询)

    MySQL在开发中,我们经常需要根据字段拼音查询数据库中的数据,它支持多种查询方式,包括根据拼音字母查询,使用 Collation 可以方便地进行简单的拼音查询,而使用拼音索引可以大幅提高查询性能,根据具体的需求和情况,我们可以选择合适的方法来实现拼音查询
    2023-10-10

最新评论