首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

通過日志文件查看 MySQL 正在執行的 SQL 語句

     編輯:MySQL 資料庫相關知識

兩種查看執行 SQL 的方式

  1. show processlist:實時查看線程狀態,適合排查當前慢查詢、鎖等待
  2. 通用查詢日志:記錄所有歷史 SQL,適合審計、回溯分析

開啟通用查詢日志

  1. 創建日志文件:touch /var/lib/mysql/data/log.txt(按實際 datadir 調整)
  2. 編輯 my.ini/my.cnf,在 [mysqld] 區段添加:
    log=/var/lib/mysql/data/log.txt
  3. 重啟 MySQL:service mysqld restart

之後所有 SQL(含 SELECT)將追加寫入該文件,tail -f log.txt 可實時監控。

show processlist 深度解析

輸出字段含義

列含義
Id線程 ID,KILL id 終止
User發起用戶,非 root 僅見自己線程
Host客戶端 IP:端口,可追蹤來源
db當前庫
CommandSleep/Query/Connect 等
Time當前狀態持續秒數
StateSQL 執行細粒度狀態(關鍵)
InfoSQL 文本(截斷顯示)

常見 State 狀態與排查提示

  • Locked:被鎖,檢查長事務、未提交、表鎖
  • Sending data:正常發送結果集
  • Copying to tmp table on disk:臨時表超內存落盤,調大 tmp_table_size
  • Sorting for order/group:排序耗時,檢查索引、調大 sort_buffer_size
  • Waiting for tables:表結構變更等待,DDL 操作影響
  • Sleep:連接空閒等待請求,連接池配置問題
  • System lock:外部系統鎖,可 --skip-external-locking

經驗則:某線程保持同一 State 超過數秒,通常意味著問題,需結合 Info 的 SQL 進一步 EXPLAIN 分析。

進階:mysqladmin processlist

cd /usr/local/mysql/bin
mysqladmin -uroot -p processlist

無需登錄交互模式,腳本調用更方便。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved