[MySQL] SHOW PROCESSLIST로 현재 실행중인 스레드 목록 확인하기
[MySQL] SHOW PROCESSLIST로 현재 실행중인 스레드 목록 확인하기
l Version : MySQL
MySQL에서 현재 실행중인 스레드 목록을 확인하기 위해서는 SHOW PROCESSLIST 명령어를 사용할 수 있다. PROCESS 권한이 있으면 다른 사용자에게 속한 스레드까지 포함하여 모든 스레드를 볼 수 있다. 그렇지 않으면 익명이 아닌 사용자는 자신의 스레드에 대한 정보에만 액세스할 수 있어 다른 사용자의 스레드 정보는 확인할 수 없다.
SHOW PROCESSLIST 명령문은 정보 필드에 각 문의 처음 100자만 표시한다. info 컬럼에 현재 실행중인 SQL문 전체를 표시하고 싶을 경우 SHOW FULL PROCESSLIST 명령을 사용한다.
아래 명령어를 사용하여 실행중인 스레드의 목록을 살펴본다.
mysql> show processlist; |
컬럼명 | 정보 |
Id | 프로세스 ID ( = INFORMATION_SCHEMA PROCESSLIST테이블의 ID컬럼값과 동일) |
User | MySQL에 접속하고 있는 User 명 |
Host | User가 접속하고 있는 Client 호스트 명 (IP 주소) |
db | 스레드의 기본 데이터베이스 (default: NULL) |
Command | 실행중인 스레드 명령 타입 |
Time | 스레드가 현재 상태에 있었던 시간 (초) |
State | 스레드가 수행중인 작업을 나타내는 이벤트, 상태 |
Info | 스레드가 실행중인 명령문 (실행하지 않을경우 : NULL) |
Time_ms | 스레드가 현재 상태에 있었던 시간 (밀리초) |
Rows_sent | 스레드에서 보낸 ROWS 수 |
Rows_examined | 프로세스가 검사한 행 수 |
조회 결과에서 Command 컬럼은, 현재 스레드의 명령 타입을 보여주는데, 이때 다양한 명령 타입이 있으므로 각 상태의 정보를 알고 있으면 운영에 많은 도움이 된다.
상태타입 | 정보 |
Binlog Dump | 바이너리 로그 내용을 복제본으로 보내기 위한 복제 소스의 스레드 |
Change user | 스레드가 사용자 변경 작업을 실행 중 |
Close stmt | 스레드가 준비된 명령문을 닫는 중 |
Connect | 소스에 연결된 복제 수신기 스레드와 복제 작업자 스레드에서 사용 |
Connect Out | 복제본이 소스에 연결 중 |
Create DB | 스레드가 데이터베이스 생성 작업을 실행 중 |
Daemon | 클라이언트 연결을 서비스하는 스레드가 아닌 서버 내부 스레드 |
Debug | 스레드가 디버깅 정보 생성 중 |
Delayed insert | 지연된 삽입 처리기 |
Drop DB | 스레드가 데이터베이스 삭제 작업을 실행 중 |
Error | |
Execute | 스레드가 준비된 명령문을 실행하고 있음 |
Fetch | 스레드가 준비된 명령문을 실행하여 결과를 가져오는 중 |
Field List | 스레드가 테이블 열에 대한 정보를 검색 중 |
Init DB | 스레드가 기본 데이터베이스를 선택 |
Kill | 스레드가 다른 스레드를 강제 종료시킴 |
Long Data | 스레드는 준비된 명령문을 실행한 결과 긴 데이터를 검색 |
Ping | 스레드가 서버 핑 요청 처리 |
Prepare | 스레드가 준비된 명령문을 준비 중 |
Processlist | 스레드가 서버 스레드에 대한 정보를 생성 |
Query | 클라이언트의 쿼리 실행 |
Quit | 스레드가 종료되고 있음 |
Refresh | 스레드가 테이블, 로그 또는 캐시를 플러시하거나 상태 변수 또는 서버정보 재설정 |
Register Slave | 스레드가 복제 서버를 등록 |
Reset stmt | 스레드가 준비된 명령문을 재설정 중 |
Set option | 스레드가 클라이언트 문 실행 옵션을 설정하거나 재설정하는 중 |
Shutdown | 스레드가 서버 종료하고 있음 |
Sleep | 클라이언트가 새로운 명령을 보내기를 기다림 |
Statistics | 스레드가 서버 상태 정보를 생성 |
Statistics | 스레드가 서버 상태 정보를 생성 |
일반적으로 SHOW PROCESSLIST 문은 "연결이 너무 많습니다" 오류 메시지가 표시되고 무슨 일이 일어나고 있는지 확인하려는 경우 매우 유용하게 사용할 수 있다. MySQL은 관리자가 항상 연결하고 시스템을 확인할 수 있도록 하기 위해 CONNECTION_ADMIN 권한(또는 더 이상 사용되지 않는 SUPER 권한)이 있는 계정이 사용할 추가 연결을 미리 예약한다. 데이터베이스에서 특정 사용자가 오랫동안 쿼리를 실행하고 있거나, 현재 실행중인 스레드에 문제점을 찾고 싶을 경우에도 유용하게 활용할 수 있다.
[참고자료]
l SHOW PROCESSLIST Statement : https://dev.mysql.com/doc/refman/8.0/en/show-processlist.html
l Thread Command Values : https://dev.mysql.com/doc/refman/8.0/en/thread-commands.html
2023-12-04 / Sungwook Kang / http://sungwookkang.com
MySQL, SHOW PROCESSLiST, 스레드 목록 확인, 실행중인 쿼리 확인, 마이에스큐엘, 프로세스리스트. 스레드리스트, 롱쿼리, 슬로우쿼리, 연결상태확인