본문 바로가기

MySQL

[MySQL] 쿼리 Process 확인하고 죽이기

개발 환경에서 인덱스를 제거할려고하니 이상하게 transaction wait timeout 때문에 쿼리가 실패하고 있었음
도대체 어떤 쿼리가 오랫동안 lock을 잡고 있었던 걸까? 확인이 필요했음

SHOW PROCESSLIST
- 최근에 수행한 쿼리들의 목록을 볼 수 있는 쿼리
- 이 중 State 컬럼의 내용 중 Sending data이라는 상태 값이 있다
대부분 이녀석이 범인인데 Info의 내용을 보고 테이블과 관련있는 쿼리인지 확인이 필요하다.
- 롱쿼리나 더 이상 수행이 필요하지 않다면 Id 값을 보고 프로세스 수행을 죽인다.
-- ID값을 넣으면 된다.
KILL 36581 
해당 테이블에 대한 인덱스 제거 쿼리를 수행하면 바로 수행이 끝나는 것을 확인할 수 있다.

그래도 역시 주의해야할 것은 수행중인 쿼리를 강제로 죽이기 때문에 죽여도 되는 쿼리인지 확인을 해야한다.
update나 insert 쿼리라면 데이터 정합성에 문제가 생길 수 있다.