Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

คำสั่ง SHOW PROCESSLIST ใน MySQL ทำอะไร และอ่าน Output ยังไง

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ความหมาย
IdConnection/Thread ID (ใช้ KILL id)
UserMySQL User ที่เชื่อมต่อ
HostClient Host:Port
dbDatabase ปัจจุบัน (NULL = ไม่ได้เลือก)
Commandประเภทคำสั่ง: Sleep, Query, Connect, Binlog Dump, Daemon, v.v.
Timeเวลาที่อยู่ในสถานะปัจจุบัน (วินาที)
Stateสถานะรายละเอียด: Starting, Checking permissions, Sending data, Locked, v.v.
InfoSQL 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 ของตัวเอง
  • PROCESS Privilege: ดู Thread ทุก User
  • SUPER / CONNECTION_ADMIN: Kill Thread ได้

Performance Schema (Modern Alternative)

SELECT * FROM performance_schema.threads WHERE TYPE = 'FOREGROUND';
SELECT * FROM performance_schema.events_statements_current;