最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL使用慢查詢?nèi)罩維low Log定位低效SQL的全過程

 更新時間:2026年02月13日 09:29:17   作者:·云揚·  
在 MySQL 數(shù)據(jù)庫運維中,SQL 語句的執(zhí)行效率直接影響系統(tǒng)響應速度,當網(wǎng)站出現(xiàn)卡頓、接口超時等問題時,慢查詢?nèi)罩荆⊿low Log) 往往是定位低效SQL的第一手證據(jù),本文給大家介紹了MySQL使用慢查詢?nèi)罩維low Log定位低效SQL的全過程,需要的朋友可以參考下

在 MySQL 數(shù)據(jù)庫運維中,SQL 語句的執(zhí)行效率直接影響系統(tǒng)響應速度。當網(wǎng)站出現(xiàn)卡頓、接口超時等問題時,慢查詢?nèi)罩荆⊿low Log) 往往是定位低效 SQL 的 “第一手證據(jù)”。它能記錄所有執(zhí)行時間超過閾值的 SQL 語句,幫助我們精準鎖定性能瓶頸 —— 無論是全表掃描、索引缺失,還是 JOIN 邏輯不合理,都能通過慢查詢?nèi)罩疽惶骄烤埂?/p>

一、慢查詢?nèi)罩净A配置

1. 查看當前慢查詢狀態(tài)

首先通過 MySQL 命令行查看默認配置,確認慢查詢?nèi)罩臼欠駟⒂茫?/p>

-- 查看慢查詢?nèi)罩締⒂脿顟B(tài)(ON/OFF)
show variables like 'slow_query_log';
-- 查看慢查詢閾值(單位:秒,默認10秒)
show variables like 'long_query_time';
-- 查看慢查詢?nèi)罩敬鎯β窂?
show variables like 'slow_query_log_file';

2. 臨時啟用慢查詢?nèi)罩荆ㄖ貑⑹В?/h3>

適合臨時排查問題,無需重啟 MySQL 服務:

-- 啟用慢查詢?nèi)罩?
set global slow_query_log = 'ON';

-- 設置日志存儲路徑
set global slow_query_log_file = '/data/mysql/log/mysql-slow.log';

-- 設置閾值為 1 秒(執(zhí)行時間≥1秒的SQL會被記錄)
set global long_query_time = 1;

-- 記錄未使用索引的SQL(可選,謹慎啟用,可能產(chǎn)生大量日志)
set global log_queries_not_using_indexes = 'ON';

3. 永久啟用慢查詢?nèi)罩荆ㄍ扑])

修改 MySQL 配置文件(my.cnf 或 my.ini),重啟后生效:

# 1. 編輯配置文件
vim /data/mysql/conf/my.cnf

# 2. 添加配置
[mysqld]
# 啟用慢查詢?nèi)罩?
slow_query_log = 1
# 日志文件路徑(建議放在非系統(tǒng)盤,避免占用系統(tǒng)空間)
slow_query_log_file = /data/mysql/log/mysql-slow.log
# 慢查詢閾值(建議生產(chǎn)環(huán)境設為 1-3 秒)
long_query_time = 1
# 記錄未使用索引的SQL(按需啟用)
log_queries_not_using_indexes = 1
# 記錄管理語句(如 ALTER TABLE,可選)
log_slow_admin_statements = 1

# 3. 重啟 MySQL 服務
/etc/init.d/mysql.server restart

二、慢查詢?nèi)罩痉治龇椒?/h2>

1. 直接查看日志文件

慢查詢?nèi)罩緸槲谋靖袷?,可通過 cattail 等命令直接查看:

# 查看最新10條慢查詢
tail -n 10 /data/mysql/log/mysql-slow.log
# 搜索包含特定表的慢查詢
grep 'user_info' /data/mysql/log/mysql-slow.log

日志格式解析(關鍵字段):

# Time: 2026-02-04T02:37:11.367549Z    # 執(zhí)行時間
# User@Host: root[root] @ localhost []  Id:    11   # 執(zhí)行用戶與主機
# Query_time: 2.011508  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1  # 耗時、鎖時間、返回行數(shù)、檢查行數(shù)
SET timestamp=1770172629;  # 時間戳
select sleep(2);  # 具體 SQL

Query_time:SQL 執(zhí)行時間(秒)

Lock_time:鎖等待時間(秒)

Rows_sent:返回結果行數(shù)

Rows_examined:掃描的行數(shù)(數(shù)值越大越可能存在優(yōu)化空間)

2. 使用 mysqldumpslow 工具分析

MySQL 自帶的日志分析工具,可統(tǒng)計慢查詢的頻率、平均執(zhí)行時間等:

# 統(tǒng)計執(zhí)行次數(shù)最多的前10條慢查詢

mysqldumpslow -s c -t 10 /data/mysql/log/mysql-slow.log

# 統(tǒng)計平均執(zhí)行時間最長的前10條慢查詢

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

# 篩選包含 JOIN 的慢查詢

mysqldumpslow -g 'JOIN' /data/mysql/log/mysql-slow.log

參數(shù)說明:

  • -s:排序方式(c = 執(zhí)行次數(shù),t = 執(zhí)行時間,l = 鎖定時間,r = 返回行數(shù))
  • -t:顯示條數(shù)
  • -g:正則匹配篩選

3. 第三方工具推薦(進階)

  • pt-query-digest(Percona Toolkit):功能強大,支持按 SQL 模板分組、統(tǒng)計百分比,生成詳細分析報告
pt-query-digest /data/mysql/log/mysql-slow.log > slow_analysis.report
  • MySQL Workbench:可視化工具,可通過 “Performance” 模塊導入慢查詢?nèi)罩?,生成圖表化分析結果

三、慢查詢優(yōu)化實操案例

案例 1:未使用索引導致全表掃描

慢查詢?nèi)罩局邪l(fā)現(xiàn):

Query_time: 4.5  Rows_examined: 50000  Rows_sent: 10
SELECT * FROM order_info WHERE create_time >= '2024-01-01';

優(yōu)化方案:為 create_time 字段添加索引

ALTER TABLE order_info ADD INDEX idx_create_time (create_time);

優(yōu)化后效果:Query_time 降至 0.01 秒,Rows_examined 變?yōu)?10。

案例 2:JOIN 語句缺少關聯(lián)索引

慢查詢?nèi)罩局邪l(fā)現(xiàn):

Query_time: 6.8  Rows_examined: 100000
SELECT u.name, o.order_no FROM user u JOIN order o ON u.id = o.user_id WHERE o.status = 1;

優(yōu)化方案:為關聯(lián)字段 o.user_id 添加索引

ALTER TABLE order ADD INDEX idx_user_id (user_id);

案例 3:SELECT * 導致無用字段掃描

慢查詢?nèi)罩局邪l(fā)現(xiàn):

Query_time: 3.1  Rows_examined: 8000
SELECT * FROM product WHERE category_id = 10;

優(yōu)化方案:只查詢需要的字段,避免全字段掃描

SELECT id, name, price FROM product WHERE category_id = 10;

四、慢查詢?nèi)罩臼褂米⒁馐马?/h2>

控制日志大小

  • 避免將 long_query_time 設置過?。ㄈ?),否則會產(chǎn)生大量日志,占用磁盤空間并影響性能
  • 定期輪轉日志(可通過 logrotate 工具或 MySQL 自帶的 FLUSH LOGS 命令)

生產(chǎn)環(huán)境謹慎啟用 “未使用索引日志”

  • log_queries_not_using_indexes = 1 會記錄所有未使用索引的 SQL,即使執(zhí)行時間很短,可能導致日志膨脹
  • 建議僅在排查特定問題時臨時啟用

結合 EXPLAIN 分析 SQL

對于慢查詢?nèi)罩局械?SQL,使用 EXPLAIN 查看執(zhí)行計劃,明確優(yōu)化方向:

EXPLAIN SELECT * FROM user_info WHERE age > 30;

重點關注 type(訪問類型,如 ALL = 全表掃描、ref = 索引查找)、key(使用的索引)、rows(預計掃描行數(shù))字段。

總結

慢查詢?nèi)罩臼?MySQL 性能優(yōu)化的 “利器”,通過合理配置和高效分析,能快速定位低效 SQL 并進行優(yōu)化。核心步驟可概括為:

  1. 啟用慢查詢?nèi)罩荆O置合理閾值
  2. 利用工具分析日志,鎖定高頻 / 耗時 SQL
  3. 通過添加索引、優(yōu)化 SQL 語句等方式解決瓶頸
  4. 持續(xù)監(jiān)控日志,預防性能問題復發(fā)

掌握慢查詢?nèi)罩镜氖褂?,能讓?shù)據(jù)庫運維從 “被動排查” 轉向 “主動優(yōu)化”,為系統(tǒng)穩(wěn)定性保駕護航。

以上就是MySQL使用慢查詢?nèi)罩維low Log定位低效SQL的全過程的詳細內(nèi)容,更多關于MySQL慢查詢?nèi)罩径ㄎ坏托QL的資料請關注腳本之家其它相關文章!

相關文章

最新評論

彭阳县| 呼图壁县| 青州市| 孝感市| 河东区| 兴安县| 定边县| 德惠市| 巴林左旗| 白城市| 宁河县| 进贤县| 尼木县| 新乡市| 侯马市| 格尔木市| 东光县| 衡阳县| 南投县| 阳泉市| 新田县| 沽源县| 兴义市| 沾益县| 平泉县| 金山区| 广宁县| 朝阳区| 即墨市| 武义县| 尉犁县| 博野县| 嘉鱼县| 金坛市| 香港 | 南投县| 陇西县| 泗水县| 出国| 彩票| 手游|