MySQL에서 현재 실행 중인 쿼리나 연결 상태를 확인하려면 SHOW PROCESSLIST 명령어를 사용하면 됩니다. 이 명령어는 현재 서버에 접속한 모든 스레드의 정보를 보여주므로, 느린 쿼리를 추적하거나 잠금(lock) 문제를 진단할 때 매우 유용합니다.
SHOW PROCESSLIST 기본 사용법
실행 중인 쿼리 목록을 확인하려면 아래와 같이 show processlist 명령어를 입력합니다.
mysql> SHOW processlist;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+----+-----------------+-----------------+----------+---------+-------+------------------------+------------------+| Id | User | Host | db | Command | Time | State | Info |+----+-----------------+-----------------+----------+---------+-------+------------------------+------------------+| 4 | event_scheduler | localhost | NULL | Daemon | 13785 | Waiting on empty queue | NULL || 9 | root | localhost:63587 | business | Query | 0 | starting | show processlist |+----+-----------------+-----------------+----------+---------+-------+------------------------+------------------+2 rows in set (0.00 sec)
결과 컬럼 의미
- Id : 해당 연결(스레드)의 고유 식별자입니다.
- User : 연결을 맺은 사용자 계정입니다.
- Host : 클라이언트가 접속한 호스트 주소와 포트입니다.
- db : 현재 선택된 데이터베이스 이름입니다.
- Command : 스레드가 수행 중인 작업 유형(Query, Sleep, Daemon 등)입니다.
- Time : 현재 상태로 유지된 시간(초)입니다.
- State : 스레드의 현재 실행 상태를 나타냅니다.
- Info : 실행 중인 실제 SQL 문장이 표시됩니다.
세로 형태로 결과 출력하기 (SHOW FULL PROCESSLIST)
컬럼이 많아 가로로 출력된 결과를 읽기 어렵다면 \G 옵션을 사용하여 세로(수직) 형태로 깔끔하게 확인할 수 있습니다. 또한 FULL 키워드를 추가하면 Info 컬럼의 전체 쿼리 문자열이 잘리지 않고 표시됩니다.
mysql> SHOW FULL PROCESSLIST\G;
위 쿼리의 실행 결과는 다음과 같습니다.
*************************** 1. row *************************** Id: 4 User: event_scheduler Host: localhost db: NULLCommand: Daemon Time: 17385 State: Waiting on empty queue Info: NULL*************************** 2. row *************************** Id: 9 User: root Host: localhost:63587 db: businessCommand: Query Time: 0 State: starting Info: SHOW FULL PROCESSLIST2 rows in set (0.00 sec)
참고 사항
일반 사용자는 자신의 계정으로 실행된 스레드만 볼 수 있으며, PROCESS 권한이 있는 사용자(예: root)는 서버의 모든 스레드를 조회할 수 있습니다. 또한 MySQL Workbench나 phpMyAdmin 같은 GUI 도구의 'Server Connections' 메뉴에서도 동일한 정보를 손쉽게 확인할 수 있습니다. 장시간 실행되는 쿼리를 발견하면 KILL [thread_id]; 명령어로 해당 프로세스를 종료할 수도 있습니다.