Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL SHOW PROCESSLIST 명령어 완벽 가이드: 실행 중인 스레드 확인 방법

MySQL SHOW PROCESSLIST 명령어란?

MySQL에서 SHOW PROCESSLIST 명령어는 현재 서버에서 실행 중인 스레드 목록을 조회하는 데 사용됩니다. 기본적으로 자신의 MySQL 계정과 관련된 스레드만 표시되지만, PROCESS 권한이 있다면 거의 모든 실행 중인 스레드를 확인할 수 있습니다. 이 명령은 어떤 쿼리가 실행 중인지, 어떤 작업이 대기 상태에 있는지 파악할 때 매우 유용합니다.

기본 사용법

다음과 같이 간단하게 실행할 수 있습니다.

mysql> SHOW PROCESSLIST;

실행 결과 예시

+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| Id | User            | Host            | db   | Command | Time | State                  | Info             |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
|  4 | event_scheduler | localhost       | NULL | Daemon  |  968 | Waiting on empty queue | NULL             |
|  9 | root            | localhost:50255 | NULL | Query   |    0 | starting               | show processlist |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)

출력 컬럼 의미 살펴보기

  • Id: 연결(스레드)의 고유 식별자입니다. 특정 세션을 종료할 때 KILL 명령과 함께 사용됩니다.
  • User: 해당 스레드를 실행한 MySQL 사용자 계정입니다.
  • Host: 클라이언트가 접속한 호스트와 포트 정보입니다.
  • db: 현재 선택된 데이터베이스 이름입니다. 선택된 데이터베이스가 없으면 NULL로 표시됩니다.
  • Command: 스레드가 수행 중인 작업 유형입니다. Query, Sleep, Daemon, Connect 등이 있습니다.
  • Time: 현재 상태로 유지된 시간(초)입니다.
  • State: 스레드의 현재 동작 상태를 나타내는 문자열입니다.
  • Info: 실행 중인 SQL 문입니다. 실행 중인 쿼리가 없으면 NULL로 표시됩니다.

데이터베이스 변경 후 출력 비교

USE 명령으로 다른 데이터베이스를 선택하면 출력 결과가 달라집니다. 아래 예시에서는 business 데이터베이스를 선택한 후 다시 조회해 보겠습니다.

mysql> SHOW PROCESSLIST;
+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+
| Id | User            | Host            | db       | Command | Time | State                  | Info             |
+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+
|  4 | event_scheduler | localhost       | NULL     | Daemon  | 1148 | Waiting on empty queue | NULL             |
|  9 | root            | localhost:50255 | business | Query   |    0 | starting               | show processlist |
+----+-----------------+-----------------+----------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)

데이터베이스를 변경하면 db 컬럼의 값이 달라지지만, event_schedulerroot 두 사용자는 항상 목록에 표시됩니다. event_scheduler는 MySQL의 이벤트 스케줄러가 백그라운드에서 항상 실행되고 있기 때문입니다.

알아두면 좋은 팁

SHOW FULL PROCESSLIST를 사용하면 Info 컬럼이 잘리지 않고 전체 쿼리 내용을 확인할 수 있습니다. 또한 장시간 실행되는 쿼리나 잠금(lock)으로 인해 멈춘 세션을 찾아 KILL <Id> 명령으로 종료하는 데도 활용할 수 있으므로, 데이터베이스 성능 문제를 진단할 때 필수적인 명령어입니다.