SHOW PROCESSLIST แสดง Thread/Connection ที่กำลังทำงานอยู่ใน MySQL Server ช่วย Debug Slow Query, Lock, Connection Leak
Syntax
SHOW PROCESSLIST;
-- หรือ แบบละเอียด
SHOW FULL PROCESSLIST;
-- หรือ แบบ Vertical (\G)
SHOW FULL PROCESSLIST\G
Output Columns ความหมาย
| Column | ความหมาย |
|---|---|
| Id | Connection/Thread ID (ใช้ KILL id) |
| User | MySQL User ที่เชื่อมต่อ |
| Host | Client Host:Port |
| db | Database ปัจจุบัน (NULL = ไม่ได้เลือก) |
| Command | ประเภทคำสั่ง: Sleep, Query, Connect, Binlog Dump, Daemon, v.v. |
| Time | เวลาที่อยู่ในสถานะปัจจุบัน (วินาที) |
| State | สถานะรายละเอียด: Starting, Checking permissions, Sending data, Locked, v.v. |
| Info | SQL Statement ที่กำลังรัน (Truncated ถ้าไม่ใช่ FULL) |
ตัวอย่าง Output
+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 968 | Waiting on empty queue | NULL |
| 9 | root | localhost:50255 | business | Query | 0 | starting | show processlist |
+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+
Command Types ที่พบบ่อย
- Sleep - Connection Idle (รอคำสั่ง) - มากเกินไประบบแรง
- Query - กำลัง Execute Query
- Locked - รอ Lock (Table/Row)
- Sending data - กำลังส่งผลลัพธ์ / Processing
- Daemon - Background Thread (Event Scheduler, Purge, v.v.)
- Binlog Dump - Replication Slave อ่าน Binlog
การใช้งานจริง
1. หา Long-running Queries
SHOW FULL PROCESSLIST WHERE Time > 60 AND Command = 'Query';
2. Kill Query ที่ค้าง
KILL 12345; -- Kill Thread ID 12345
KILL QUERY 12345; -- Kill Query แต่วง Connection
3. ดู User ที่เชื่อมต่อเยอะ
SELECT User, COUNT(*) as connections
FROM INFORMATION_SCHEMA.PROCESSLIST
GROUP BY User
ORDER BY connections DESC;
สิทธิ์ที่ต้องการ
- User ปกติ: ดูเฉพาะ Thread ของตัวเอง
PROCESSPrivilege: ดู Thread ทุก UserSUPER/CONNECTION_ADMIN: Kill Thread ได้
Performance Schema (Modern Alternative)
SELECT * FROM performance_schema.threads WHERE TYPE = 'FOREGROUND';
SELECT * FROM performance_schema.events_statements_current;