溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL怎么查看慢查詢語句

發布時間:2021-08-09 11:51:44 來源:億速云 閱讀:710 作者:chen 欄目:大數據
# 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性能。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女