mysql 현재 실행중인 쿼리 확인 및 강제종료 (deadlock 해결)
현재 실행중인 쿼리 확인 명령어
mysql> show processlist; +------+---------+-----------------+---------+-------------+------+----------------+-----------------------------------+ | Id | User | Host | db | Command | Time | State | Info | +------+---------+-----------------+---------+-------------+------+----------------+-----------------------------------+ | 5354 | ... | ... | ... | Query | 733 | ... | SELECT ... | +------+---------+-----------------+---------+-------------+------+----------------+-----------------------------------+ |
- Id : 쿼리 아이디. PID라고 생각하면 된다.
- User : 쿼리 실행 user
- Host : 연결 host ip
- db : database명
- Command
- Query : 실행중인 쿼리
- Sleep : 쿼리의 실행이 완료되고 연결만 유지되고 있는 경우
- Time : 쿼리 실행 시간 (초)
- State : 현재 쿼리가 뭘 하고있는지 나타냄
- Info : 쿼리문
보통의 경우 Command가 Query이며, Time이 10초 이상인 경우 확인 및 개선이 필요하다. (쿼리 튜닝 등)
또한 Time이 긴 쿼리가 deadlock의 원인이 되는 경우가 많은데,
현재 db가 deadlock이 걸린 경우 원인이 되는 쿼리를 찾아 아래와 같이 강제종료 시키면 해결할 수 있다.
mysql> kill 5354 |
(kill Id번호)
+ 추가
show processlist를 이용할 경우 조건을 넣을수가 없다.
show processlist에 조건을 넣고 싶은 경우 아래처럼 직접 select해야 한다.
mysql> SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE info IS NOT NULL AND time > 10; |