문제 상황
현재 RDS를 사용하고 있는데 읽기 부하를 분산하기 위해 읽기 복제본을 사용하고 있습니다. Cloudwatch에서 모니터링을 하기 위해 필요한 지표들을 추가하여 활용하고 있는데요, 어느 순간부터 읽기 복제본으로의 복제에 지연이 발생하고 있었습니다.
배포를 했다거나 모니터링에 활용하는 다른 지표들에서는 뚜렷한 문제가 보이지 않았기 때문에 해당 인스턴스에 무언가 평소와 다른 점이 있지 않을까, 이상한 쿼리가 돌고 있지는 않을까 의심했습니다. 성능 개선 도우미와 slow 쿼리를 조회했을 때 복제 지연이 일어난 시간이 증가하기 시작 시점과 비슷한 시간부터 동작하는 쿼리가 보였습니다. IP가 사내 IP인 점, 배치에서 조회하지 않을 법한 테이블 그리고 쿼리의 형태로 보아 다른 팀에서 통계 데이터 추출 혹은 단순 조회로 판단하였습니다. 확신하지는 못했습니다.
해결 방법
동료분들과 이야기 했을 때는 일단 중단해도 무방해보인다는 결론을 내렸습니다. 따라서 해당 프로세스를 죽이려 헀으나 실패했습니다. 당시 상황은 아래와 같습니다.
show processlist; # 중단시킬 process 확인
kill PID; # process kill 시도
ERROR !! # Error Code: 1095. You are not owner of thread PID
위와 같은 에러가 발생했고 내용은 죽이려는 프로세스의 주인이 아니니 안돼! 라는 것이었습니다. 해당 유저에 로그인해서 프로세스를 죽일 수 있으면 좋겠지만 그럴만한 여건이 되지 않아 당황스러웠습니다.
찾아보니 mysql.rds_kill 을 통해 해결할 수 있다는 글을 스택오버플로우에서 발견하였습니다. 그저 빛...
CALL mysql.rds_kill(PID);
위 명령을 실행하자 이전에 중단에 실패했던 프로세스를 중단시킬 수 있었습니다.
무엇이 다를까?
두 명령이 사실 생김새로 보아 같은 역할을 할 것인라는 것은 자명했지만 무엇이 다른지 궁금했습니다. 그래서 요새 화제의 대상인 Chat GPT 에게 물어보았습니다.
Q. What is the differences between kill and rds_kill in MySQL?
A.
In MySQL, rds_kill and kill are both commands used to terminate a running process, but they have some differences in their functionality and usage:
MySQL에서 rds_kill 및 kill은 모두 실행 중인 프로세스를 종료하는 데 사용되는 명령이지만 기능 및 사용법에 약간의 차이가 있습니다.
KILL: This is a standard MySQL command used to terminate a specific connection or thread associated with a client connection. When you execute the KILL command, it sends a signal to the specified connection, causing it to terminate. You can use the KILL command to terminate any connection, but you need to have the PROCESS privilege to do so.
KILL: 클라이언트 연결과 관련된 특정 연결 또는 스레드를 종료하는 데 사용되는 표준 MySQL 명령입니다. KILL 명령을 실행하면 지정된 연결에 신호를 보내 종료시킵니다. KILL 명령을 사용하여 모든 연결을 종료할 수 있지만 그렇게 하려면 PROCESS 권한이 있어야 합니다.
rds_kill: This command is specific to Amazon Web Services (AWS) Relational Database Service (RDS) instances running MySQL. rds_kill is a wrapper around the KILL command and provides additional functionality to terminate a specific process running on an RDS instance. The rds_kill command requires the rds_superuser role to execute, which has more privileges than the PROCESS privilege required for the KILL command.
rds_kill: 이 명령은 MySQL을 실행하는 Amazon Web Services(AWS) Relational Database Service(RDS) 인스턴스에만 적용됩니다. rds_kill은 KILL 명령을 둘러싼 래퍼이며 RDS 인스턴스에서 실행 중인 특정 프로세스를 종료하는 추가 기능을 제공합니다. rds_kill 명령을 실행하려면 KILL 명령에 필요한 PROCESS 권한보다 더 많은 권한이 있는 rds_superuser 역할이 필요합니다.
In summary, KILL is a standard MySQL command that can terminate a specific connection, while rds_kill is a specific command for AWS RDS instances that can terminate a specific process and requires a higher level of privilege.
요약하면 KILL은 특정 연결을 종료할 수 있는 표준 MySQL 명령인 반면, rds_kill은 특정 프로세스를 종료할 수 있고 더 높은 수준의 권한이 필요한 AWS RDS 인스턴스용 특정 명령입니다.
정리하자면 kill 은 MySQL의 명령어이고, rds_kill은 rds_superuser 권한이 필요하며 RDS인스턴스에만 적용가능한 명령어라고 합니다.
'데이터베이스' 카테고리의 다른 글
| MySQL 8.0 계정의 비밀번호 변경하기 (2) | 2024.10.02 |
|---|
댓글