您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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;
修改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
慢查询日志通常包含以下关键信息:
# 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';
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
更强大的第三方分析工具:
pt-query-digest /var/log/mysql/mysql-slow.log
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 SELECT * FROM orders WHERE customer_id = 1000;
重点关注: - type列:ALL表示全表扫描 - key列:是否使用了索引 - rows列:预估扫描行数 - Extra列:Using filesort/Using temporary需要特别关注
ALTER TABLE orders ADD INDEX idx_customer_id (customer_id);
-- 优化前
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;
-- 优化前
SELECT * FROM products WHERE price > 100;
-- 优化后(指定具体列)
SELECT product_id, product_name FROM products WHERE price > 100;
慢查询阈值设置:
日志轮转配置:
# 防止日志文件过大
slow_query_log_file = /var/log/mysql/mysql-slow.log
log_rotate = 1
log_rotate_size = 100M
通过系统化的慢查询监控和优化,可以显著提升MySQL数据库的整体性能。建议将慢查询分析纳入日常数据库维护流程,持续优化SQL性能。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。