MySQL怎么查看慢查询语句

发布时间:2021-08-09 11:51:44 作者:chen
来源:亿速云 阅读:708
# MySQL怎么查看慢查询语句

## 慢查询的概念与重要性

慢查询是指执行时间超过指定阈值的SQL语句。在数据库运维和性能优化中,识别并优化慢查询是提升系统性能的关键步骤。当查询执行时间过长时,会导致:
- 数据库连接堆积
- 系统资源消耗加剧
- 用户体验下降

MySQL提供了完善的慢查询日志功能,可以帮助开发者和DBA快速定位性能瓶颈。

## 一、开启慢查询日志

### 1. 临时开启(重启失效)
```sql
-- 查看当前慢查询状态
SHOW VARIABLES LIKE '%slow_query%';

-- 开启慢查询日志(1表示开启)
SET GLOBAL slow_query_log = 1;

-- 设置慢查询阈值(单位:秒)
SET GLOBAL long_query_time = 1;

-- 记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes = 1;

2. 永久配置

修改MySQL配置文件(my.cnf或my.ini):

[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. 直接查看日志文件

慢查询日志通常包含以下关键信息:

# Time: 2023-10-20T08:12:34.123456Z
# User@Host: root[root] @ localhost []
# Query_time: 3.141592  Lock_time: 0.000100 Rows_sent: 10  Rows_examined: 100000
SET timestamp=1600000000;
SELECT * FROM large_table WHERE unindexed_column = 'value';

2. 使用mysqldumpslow工具

MySQL自带的分析工具:

# 查看执行时间最长的10条查询
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log

# 查看访问次数最多的查询
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log

# 组合排序(按平均查询时间)
mysqldumpslow -s at -t 10 /var/log/mysql/mysql-slow.log

3. 使用pt-query-digest(Percona Toolkit)

更强大的第三方分析工具:

pt-query-digest /var/log/mysql/mysql-slow.log

三、通过性能库(Performance Schema)监控

MySQL 5.6+版本支持:

-- 开启events_statements_history_long
UPDATE performance_schema.setup_consumers 
SET ENABLED = 'YES' 
WHERE NAME = 'events_statements_history_long';

-- 查询执行时间超过1秒的语句
SELECT * FROM performance_schema.events_statements_history_long
WHERE SQL_TEXT IS NOT NULL AND TIMER_WT > 1000000000;

四、EXPLN分析慢查询

定位到慢查询后,使用EXPLN分析执行计划:

EXPLN SELECT * FROM orders WHERE customer_id = 1000;

重点关注: - type列:ALL表示全表扫描 - key列:是否使用了索引 - rows列:预估扫描行数 - Extra列:Using filesort/Using temporary需要特别关注

五、优化慢查询的常见方法

  1. 添加合适索引
ALTER TABLE orders ADD INDEX idx_customer_id (customer_id);
  1. 重写复杂查询
-- 优化前
SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';

-- 优化后(添加日期范围限制)
SELECT * FROM orders 
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
LIMIT 1000;
  1. 避免全表扫描
-- 优化前
SELECT * FROM products WHERE price > 100;

-- 优化后(指定具体列)
SELECT product_id, product_name FROM products WHERE price > 100;

六、生产环境建议

  1. 慢查询阈值设置:

    • OLTP系统:0.5-1秒
    • 报表系统:2-5秒
  2. 日志轮转配置:

# 防止日志文件过大
slow_query_log_file = /var/log/mysql/mysql-slow.log
log_rotate = 1
log_rotate_size = 100M
  1. 定期分析机制:
    • 每天检查慢查询日志
    • 建立慢查询优化跟踪表
    • 对高频慢查询建立监控告警

通过系统化的慢查询监控和优化,可以显著提升MySQL数据库的整体性能。建议将慢查询分析纳入日常数据库维护流程,持续优化SQL性能。 “`

推荐阅读:
  1. MYSQL性能查看(命中率,慢查询)
  2. MySQL中应该如何优化SQL语句慢查询

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:Linux环境下mysql的root密码忘记了怎么办

下一篇:Mysql怎么避免SQL注入风险

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》