Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 下快速定位連接 MySQL 的進程並分析性能瓶頸

編輯:Linux 系統常見問題解答

步驟 1:MySQL 端查看當前連接

mysql> SHOW FULL PROCESSLIST\G;*************************** 5. row ***************************Id: 197343User: rootHost: 127.0.0.1:41354db: xxxCommand: QueryTime: 0State: SleepInfo: show process list

關鍵信息:Host 欄顯示客戶端 IP:端口 (127.0.0.1:41354),Command 為 Sleep 通常意味著連接池空閒連接。

步驟 2:系統端反查進程

netstat -anp | grep 41354tcp  0  0 127.0.0.1:41354  127.0.0.1:3307  ESTABLISHED  1167/php test.php

得到 PID 1167,命令 php test.php。

步驟 3:定位腳本路徑與代碼

lsof -p 1167COMMAND  PID USER  FD  TYPE DEVICE SIZE/OFF NODE NAMEphp    1167 user  cwd  DIR  253,0   4096  2 /home/user/projectphp    1167 user  txt  REG  253,0  5.2M  12 /usr/bin/php7.4php    1167 user  mem  REG  253,0  1.1M  34 /lib/x86_64-linux-gnu/libc-2.31.so...php    1167 user  4u   REG  253,0   2048  56 /home/user/project/test.php

直接定位到 /home/user/project/test.php,進一步審查 SQL 慢查詢、死循環、連接未釋放等問題。

批量分析腳本

#!/bin/bash# 找出所有連接 MySQL 的進程及執行腳本mysql -e "SHOW PROCESSLIST" | awk '/^[0-9]+/ {print $3}' | cut -d: -f2 | sort -u | while read port; do    pid=$(netstat -tnp 2>/dev/null | grep ":$port " | awk '{print $7}' | cut -d/ -f1)    if [ -n "$pid" ]; then        echo "Port $port -> PID $pid -> $(ps -p $pid -o cmd=)";        lsof -p $pid 2>/dev/null | grep -E '\.php$|\.py$|\.pl$|\.java$' | head -1;    fi;done

進階:performance_schema / sys schema

MySQL 5.6+ 啟用 performance_schema,配合 sys schema 視圖:

SELECT * FROM sys.processlist WHERE db = 'my_db' ORDER BY time DESC;SELECT * FROM sys.schema_table_lock_waits;SELECT * FROM sys.user_summary_by_statement_latency;

可直接在 SQL 層面關聯會話、鎖等待、語句延遲,無需跳轉系統層。

Copyright © Windows教程網 All Rights Reserved