Yao 씨가 유휴 상태의 MySQL
트랜잭션을 찾는 방법을 보여줍니다.

blocked-mysql-query-yao

MySQL을 실행하는 Amazon Relational Database Service(Amazon RDS)에서 쿼리를 실행할 때 쿼리가 차단되었습니다. 당시, 실행 중인 다른 쿼리는 없었습니다. 쿼리가 차단된 이유는 무엇이며 이 문제를 해결하려면 어떻게 해야 합니까?

차단된 쿼리의 가장 일반적인 원인은 InnoDB 트랜잭션이 커밋되지 않았기 때문입니다. 이로 인해 새로운 쿼리가 차단되고, 유휴 상태가 되고, 잠금 대기 제한 시간이 초과되면 결국 실패할 수 있습니다.

커밋되지 않은 트랜잭션 식별

1.     INNODB_TRX table에 대해 다음 쿼리를 실행하여 현재 실행 중인 트랜잭션을 식별합니다.

select * from information_schema.innodb_trx\G

2.    쿼리 결과에서 애플리케이션의 동작 및 워크로드와 일치하는 실행 중인 트랜잭션을 찾습니다. 시간이 오래 걸릴 수 있지만 작업을 수행하기 전에 각 쿼리가 데이터베이스 및 애플리케이션의 상태에 미치는 잠재적 영향을 파악하는 것이 중요합니다.

3.    차단 트랜잭션을 식별한 후 트랜잭션의 trx_state를 검토하고 트랜잭션을 중지하거나 롤백할 경우의 영향을 고려합니다. 참고: 오래 실행되는 작업을 롤백하면 시스템에서 데이터베이스, 애플리케이션 또는 사용 사례에 피해를 주는 I/O 또는 잠금 작업이 발생할 수 있습니다.

트랜잭션 중지

트랜잭션을 중지하려면 다음 단계에 따라 실행 중인 모든 InnoDB를 중지(종료)할 수 있습니다.

1.    다음 명령을 실행하여 [Running] 상태의 모든 InnoDB 트랜잭션을 찾습니다.

select * from information_schema.innodb_trx\G

2.    중지하려는 InnoDB 트랜잭션의 스레드 ID를 기록합니다.

3.    다음 명령을 실행하여 [Running] 상태의 모든 트랜잭션을 중지(종료)합니다. 여기서 thread-id는 실행 중인 InnoDB 트랜잭션의 스레드 ID입니다.

CALL mysql.rds_kill(thread-ID)

트랜잭션이 중지된 후 차단된 쿼리를 다시 실행해 보십시오.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2017년 3월 15일

업데이트된 날짜: 2018년 7월 5일