들어가며
- DB 프로세스 목록을 확인하는 방법에 대해 알아봅니다.
테이블 정보
1. INFORMATION_SCHEMA DB
- 데이터를 저장하기 위한 데이터들의 집합체입니다.
- DB 서버 내에 존재하는 DB의 메타 정보(테이블, 칼럼, 인덱스 등의 스키마 정보)를 모아둔 것으로 INFORMATION_SCHEMA 데이터베이스 내의 모든 테이블을 읽기 전용이며, 단순히 조회만 가능합니다.
2. INFORMATION_SCHEMA.PROCESSLIST Table
- PROCESSLIST 테이블을 조회하여 서버 내에서 실행 중인 Thread 집합에서 현재 수행중인 작업을 확인할 수 있습니다.
- column 정보
- ID : 프로세스 ID
- USER : Thread에 접속하고 있는 Mysql 사용자
- HOST : user가 접속하고 있는 hostname, IP address
- DB : 현재 사용 중인 DB
- COMMAND : Thread 실행 중인 명령 ex) sleep, kill,Query 등
- TIME : Thread가 현재 상태를 유지한 시간
- STATE : Thread의 상태 ex) Starting, Rolling back, System lock 등
- INFO : 실행 중인 SQL 쿼리
- TIME_MS : Thread가 현재 상태를 유지한 시간(ms)
- MEMORY_USED : Thread가 사용 중인 메모리(바이트)
- MAX_MEMORY_USER : Threade가 사용한 최대 메모리(바이트)
show process
- 실행 중인 Thread를 보여줍니다.
- information_schema.PROCESSLIST table 또는 mysqladmin processlist 명령으로 확인할 수 있습니다.
모니터링
- 상태 확인
show status;
- threade 확인
show status like'threads%';
Threade kill
- 서비스 운영 도중 LOCK 현상이 발생하거나 DB에 너무 많은 부하를 주게 되어 DB 성능에 문제를 주게 되는 경우 혹은 Sleep 상태로 존재하는 Thread가 많은 경우
KILL [ID];
- SLEEP 상태인 Threade Kill
SELECT concat('KILL ',id,';') FROM information_schema.processlist WHERE command='sleep' INTO OUTFILE '/home/process_kill.agile'; source /home/process_kill.agile;
마무리
- column - COMMAND에 대한 참고 사이트
- https://dev.mysql.com/doc/refman/8.0/en/thread-commands.html
- column - STATE에 대한 참고 사이트
- https://dev.mysql.com/doc/refman/8.0/en/general-thread-states.html
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.