InnoDB 기록 목록 길이가 크게 늘어남
날짜
부터 행 변경에 대한 기록 목록이 db-instance
의 길이
까지 크게 늘어났습니다. 이 증가는 쿼리 및 데이터베이스 종료 성능에 영향을 줍니다.
지원되는 엔진 버전
이 인사이트 정보는 Aurora MySQL의 모든 버전에서 지원됩니다.
컨텍스트
InnoDB 트랜잭션 시스템은 다중 버전 동시성 제어(MVCC)를 유지합니다. 행이 수정되면 수정 중인 데이터의 수정 전 버전이 실행 취소 로그에 실행 취소 레코드로 저장됩니다. 모든 실행 취소 레코드에는 이전 실행 취소 레코드에 대한 참조가 있어 연결된 목록을 형성합니다.
InnoDB 기록 목록은 커밋된 트랜잭션에 대한 실행 취소 로그의 전체 목록입니다. MySQL 트랜잭션에 더 이상 기록이 필요하지 않은 경우 기록 목록을 사용하여 레코드 및 로그 페이지를 제거합니다. 기록 목록 길이는 기록 목록에 수정 사항이 포함된 실행 취소 로그의 총 수입니다. 각 로그에는 하나 이상의 수정이 포함되어 있습니다. InnoDB 기록 목록 길이가 너무 길어지면 이전 행 버전이 많다는 것을 의미하며 쿼리 및 데이터베이스 종료 속도가 느려집니다.
이 문제의 잠재적 원인
긴 기록 목록의 일반적인 원인은 다음과 같습니다.
-
장기 실행 트랜잭션(읽기 또는 쓰기)
-
무거운 쓰기 로드
작업
인사이트의 원인에 따라 다른 조치를 취할 것을 권장합니다.
주제
InnoDB 기록 목록이 줄어들 때까지 데이터베이스 종료와 관련된 작업을 시작하지 않음
InnoDB 기록 목록이 길면 데이터베이스 종료 속도가 느려지므로 데이터베이스 종료와 관련된 작업을 시작하기 전에 목록 크기를 줄이세요. 이러한 작업에는 메이저 버전 데이터베이스 업그레이드가 포함됩니다.
장기 실행 트랜잭션 확인 및 종료
information_schema.innodb_trx
쿼리를 통해 장기 실행 트랜잭션을 찾을 수 있습니다.
참고
또한 읽기 전용 복제본에서 장기 실행 트랜잭션을 찾아보는 것도 잊지 마세요.
장기 실행 트랜잭션을 확인하는 방법
-
SQL 클라이언트에서 다음 쿼리를 실행합니다.
SELECT a.trx_id, a.trx_state, a.trx_started, TIMESTAMPDIFF(SECOND,a.trx_started, now()) as "Seconds Transaction Has Been Open", a.trx_rows_modified, b.USER, b.host, b.db, b.command, b.time, b.state FROM information_schema.innodb_trx a, information_schema.processlist b WHERE a.trx_mysql_thread_id=b.id AND TIMESTAMPDIFF(SECOND,a.trx_started, now()) > 10 ORDER BY trx_started
-
저장 프로시저 mysql.rds_kill을 사용하여 장기 실행 트랜잭션을 종료합니다.
성능 개선 도우미를 사용하여 상위 호스트와 상위 사용자를 확인합니다.
많은 수의 수정된 행이 즉시 커밋되도록 트랜잭션을 최적화합니다.
관련 지표
이 인사이트와 관련된 지표는 다음과 같습니다.
-
trx_rseg_history_len
- 이 카운터 지표는INFORMATION_SCHEMA.INNODB_METRICS
테이블뿐만 아니라 성능 개선 도우미에서도 볼 수 있습니다. 자세한 내용은 MySQL 설명서의 InnoDB INFORMATION_SCHEMA metrics table을 참조하세요. -
RollbackSegmentHistoryListLength
- 이 Amazon CloudWatch 지표는 삭제 표시 레코드로 커밋된 트랜잭션을 로깅하는 실행 취소 로그를 측정합니다. 이러한 레코드는 InnoDB 제거 작업에 의해 처리되도록 예약됩니다.trx_rseg_history_len
지표는RollbackSegmentHistoryListLength
과 동일한 값을 갖습니다. -
PurgeBoundary
- InnoDB 제거가 허용되는 최대 트랜잭션 수입니다. 이 CloudWatch 지표가 장기간 변화하지 않으면 장기 실행 트랜잭션으로 인해 InnoDB 제거가 차단되었음을 나타내는 좋은 지표로 해석할 수 있습니다. 이를 조사하려면 Aurora MySQL DB 클러스터의 활성 트랜잭션을 확인합니다. 이 지표는 Aurora MySQL 버전 2.11 이상 및 버전 3.08 이상에서만 사용할 수 있습니다. -
PurgeFinishedPoint
- InnoDB 제거가 수행되는 최대 트랜잭션 수입니다. 이 CloudWatch 지표를 사용하면 InnoDB 제거가 얼마나 빠르게 진행되고 있는지 확인할 수 있습니다. 이 지표는 Aurora MySQL 버전 2.11 이상 및 버전 3.08 이상에서만 사용할 수 있습니다. -
TransactionAgeMaximum
- 가장 오랫동안 실행 중인 활성 트랜잭션의 연령입니다. 이 CloudWatch 지표는 Aurora MySQL 버전 3.08 이상에서 사용할 수 있습니다. -
TruncateFinishedPoint
- 실행 취소 잘라내기가 수행될 때의 트랜잭션 수입니다. 이 CloudWatch 지표는 Aurora MySQL 버전 2.11 이상 및 버전 3.08 이상에서만 사용할 수 있습니다.
CloudWatch 지표에 대한 자세한 내용은 Amazon Aurora에 대한 인스턴스 수준 지표 섹션을 참조하세요.