MySQL, MariaDB

[MySQL] SHOW PROCESSLIST로 현재 실행중인 스레드 목록 확인하기

SungWookKang 2023. 12. 4. 10:28
반응형

[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, 스레드 목록 확인, 실행중인 쿼리 확인, 마이에스큐엘, 프로세스리스트. 스레드리스트, 롱쿼리, 슬로우쿼리, 연결상태확인  

반응형