Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 실행 중인 쿼리를 중지하는 방법 완벽 가이드

MySQL 실행 중인 쿼리 중지하기

MySQL에서 오래 실행되거나 멈춰 버린 쿼리를 중지해야 할 때가 있습니다. 이럴 때는 KILL 명령어에 프로세스 ID를 지정하여 해당 쿼리를 강제로 종료할 수 있습니다.

1. 기본 문법

프로세스 ID를 사용해 쿼리를 종료하는 기본 문법은 다음과 같습니다.

kill processId;

또는 RDS 환경 등에서 아래와 같은 저장 프로시저를 호출하여 실행 중인 쿼리를 중지할 수도 있습니다.

call mysql.rds_kill(queryId);

2. 프로세스 ID 확인하기

쿼리를 종료하려면 먼저 대상 프로세스의 ID를 알아야 합니다. SHOW PROCESSLIST 명령으로 현재 실행 중인 모든 프로세스 목록을 확인할 수 있습니다.

mysql> show processlist;

위 명령을 실행하면 다음과 같이 현재 MySQL에서 동작 중인 프로세스 목록이 출력됩니다.

+----+-----------------+-----------------+----------+---------+--------+------------------------+------------------+
| Id | User            | Host            | db       | Command | Time   | State                  | Info             |
+----+-----------------+-----------------+----------+---------+--------+------------------------+------------------+
| 4  | event_scheduler | localhost       | NULL     | Daemon  | 221718 | Waiting on empty queue | NULL             |
| 47 | root            | localhost:60722 | business | Query   | 0      | starting               | show processlist |
+----+-----------------+-----------------+----------+---------+--------+------------------------+------------------+
2 rows in set (0.03 sec)

위 결과를 보면 현재 두 개의 프로세스가 실행 중입니다. 이 중 특정 프로세스를 중지하고 싶다면, 해당 프로세스의 Id 값을 확인한 뒤 KILL 명령어에 지정하면 됩니다.

3. KILL 명령어로 쿼리 종료하기

ID가 47인 프로세스를 종료하는 예시는 다음과 같습니다.

mysql> kill 47;
ERROR 1317 (70100): Query execution was interrupted

명령이 성공적으로 실행되면 해당 연결의 쿼리 실행이 중단되며, 클라이언트 쪽에는 위와 같이 "쿼리 실행이 중단되었습니다"라는 에러 메시지가 표시됩니다.

4. mysql.rds_kill() 사용하기

대안으로 mysql.rds_kill() 프로시저를 호출하여 동일한 작업을 수행할 수 있습니다.

mysql> CALL mysql.rds_kill(47);
ERROR 2013 (HY000): Lost connection to MySQL server during query

이 경우 대상 세션의 연결 자체가 종료되므로, 클라이언트에는 "쿼리 실행 중 서버와의 연결이 끊어졌습니다"라는 메시지가 나타납니다.

정리

MySQL에서 실행 중인 쿼리를 중지하는 절차는 다음과 같습니다.
SHOW PROCESSLIST로 프로세스 ID를 확인한다.
KILL 프로세스ID; 또는 CALL mysql.rds_kill(프로세스ID);를 실행한다.
이 방법을 활용하면 비정상적으로 길게 실행되는 쿼리나 데드락 상태의 세션을 신속하게 정리하여 데이터베이스 성능을 유지할 수 있습니다.