MySQL SHOW PROCESSLIST를 사용자 정의하는 방법
MySQL에서 SHOW PROCESSLIST 명령은 현재 서버에 연결된 스레드와 실행 중인 쿼리의 상태를 확인할 때 유용하게 사용됩니다. 하지만 이 명령은 출력 형식이 고정되어 있어 원하는 컬럼만 선택하거나 정렬하기 어렵다는 단점이 있습니다.
이러한 한계를 극복하려면 information_schema 데이터베이스의 PROCESSLIST 테이블을 활용하면 됩니다. 이 테이블은 MySQL 5.1.7 버전부터 제공되었으며, 일반 테이블처럼 SELECT, WHERE, ORDER BY 등의 SQL 구문을 자유롭게 사용할 수 있습니다.
1단계: MySQL 버전 확인
먼저 사용 중인 MySQL 버전을 확인합니다. 다음 쿼리를 실행하세요.
mysql> SELECT VERSION();
실행 결과는 다음과 같습니다.
+-----------+
| version() |
+-----------+
| 8.0.12 |
+-----------+
1 row in set (0.00 sec)
2단계: information_schema.PROCESSLIST 조회
이제 사용자 정의된 형태로 프로세스 목록을 조회할 수 있습니다. 기본적인 조회 쿼리는 다음과 같습니다.
mysql> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;
실행 결과는 다음과 같습니다.
+----+-----------------+-----------------+----------+---------+-------+------------------------+----------------------------------------------+
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |
+----+-----------------+-----------------+----------+---------+-------+------------------------+----------------------------------------------+
| 8 | root | localhost:50599 | business | Query | 0 | executing | SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST |
| 9 | root | localhost:53404 | NULL | Sleep | 132 | | NULL |
| 4 | event_scheduler | localhost | NULL | Daemon | 71998 | Waiting on empty queue | NULL |
+----+-----------------+-----------------+----------+---------+-------+------------------------+----------------------------------------------+
3 rows in set (0.06 sec)
3단계: 조건 필터링과 정렬 활용하기
INFORMATION_SCHEMA.PROCESSLIST는 일반 테이블과 동일하게 다룰 수 있으므로, 필요에 따라 다양한 방식으로 응용할 수 있습니다.
예를 들어, 실행 시간이 긴 순서대로 정렬하여 오래 걸리는 쿼리를 우선적으로 확인할 수 있습니다.
mysql> SELECT ID, USER, DB, COMMAND, TIME, STATE
-> FROM INFORMATION_SCHEMA.PROCESSLIST
-> ORDER BY TIME DESC;
또는 특정 사용자나 특정 데이터베이스의 연결만 필터링할 수도 있습니다.
mysql> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST
-> WHERE DB = 'business';
마무리
이처럼 information_schema.PROCESSLIST 테이블을 사용하면 SHOW PROCESSLIST보다 훨씬 유연하게 현재 실행 중인 프로세스를 분석할 수 있습니다. 장시간 실행되는 쿼리를 추적하거나, 불필요한 대기 연결을 찾아 성능 문제를 진단할 때 특히 유용합니다.