AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
Amazon RDS for MySQL에서 느린 쿼리 문제를 해결하고 성능을 개선하려면 어떻게 해야 합니까?
Amazon Relational Database Service(Amazon RDS) for MySQL에서 느린 쿼리 문제를 해결하고 성능을 개선하고 싶습니다.
해결 방법
리소스 및 데이터베이스 성능 모니터링
Amazon CloudWatch를 사용하여 쿼리로 인해 리소스 사용률이 증가하는 시점을 확인할 수 있습니다.
다음 CloudWatch 지표를 모니터링하십시오.
- DatabaseConnections
- NetworkReceiveThroughput
- WriteThroughput 및 ReadThroughput
- WriteLatency 및 ReadLatency
- WriteIOPS 및 ReadIOPS
- FreeStorageSpace
- BurstBalance
Amazon RDS 콘솔을 사용하여 쿼리로 인해 데이터베이스 성능이 저하되는 시점을 확인할 수 있습니다. 또한 RDS DB 인스턴스 상태를 확인하여 데이터베이스 성능에 영향을 줄 수 있는 활성 프로세스 또는 예약된 프로세스를 식별하십시오. 데이터베이스 성능이 저하될 때 발생하는 Amazon RDS 이벤트를 확인하십시오.
향상된 모니터링을 사용하여 워크로드 및 시스템 지표의 운영 체제(OS) 목록을 볼 수 있습니다. 기본적으로 향상된 모니터링의 간격은 60초입니다. 더 자세한 데이터 포인트에 대해서는 1~5초 간격을 설정하는 것이 가장 좋습니다.
리소스 사용률에 영향을 미치는 워크로드 확인
쿼리로 인해 리소스 사용률이 증가하거나 성능이 저하되는 시간을 확인한 후 Performance Insights를 활성화하여 최적화해야 하는 쿼리를 식별하십시오.
중요: Performance Insights는 2025년 11월 30일에 서비스가 종료됩니다. 2025년 11월 30일 이전에 Database Insights의 고급 모드로 업그레이드할 수 있습니다. 업그레이드하지 않으면 Performance Insights를 사용하는 DB 클러스터는 Database Insights의 표준 모드로 기본 설정됩니다. Database Insights의 고급 모드만 실행 계획과 온디맨드 분석을 지원합니다. 클러스터가 표준 모드로 기본 설정된 경우 콘솔에서 이러한 기능을 사용하지 못할 수 있습니다. 고급 모드를 활성화하려면 Amazon RDS용 Database Insights의 고급 모드 활성화 및 Amazon Aurora용 Database Insights의 고급 모드 활성화를 참조하십시오.
워크로드를 확인하려면 다음 단계를 완료하십시오.
- Performance Insights 대시보드에서 데이터베이스 로드 차트에 액세스합니다.
- 대기별 로드(AAS) 열을 확인하여 리소스 사용률이 증가하거나 쿼리의 성능이 저하될 때 대기 이벤트를 가장 많이 사용하는 워크로드를 파악합니다.
참고: 로드 차트에서 색상의 지분이 클수록 워크로드에 가장 큰 영향을 미치는 대기 유형을 나타냅니다. 워크로드가 계속해서 최대 vCPU를 초과하는 경우 인스턴스 클래스를 수정하십시오. - 상위 SQL 탭에서 워크로드에 영향을 미치는 개별 쿼리를 검색합니다.
실행 속도가 느린 쿼리를 식별하려면 파라미터 그룹에서 slow_query_log를 활성화하고 로그를 CloudWatch Logs에 게시할 수도 있습니다.
쿼리 성능 개선
EXPLAIN 문 사용
쿼리 작업 계획을 확인하여 쿼리가 적절한 인덱스를 사용하는지 파악하십시오. EXPLAIN을 사용하여 쿼리를 최적화하고 MySQL이 쿼리를 실행하는 방법에 관한 세부 정보를 볼 수 있습니다. 자세한 내용은 MySQL 웹 사이트에서 EXPLAIN을 사용하여 쿼리 최적화를 참조하십시오.
전체 테이블 스캔을 방지하려면 EXPLAIN 문을 실행하여 쿼리에서 인덱스를 사용하는지 확인하십시오. EXPLAIN 출력에서 테이블 이름, 사용된 키, 쿼리를 위해 스캔된 행 수를 확인합니다. 자세한 내용은 MySQL 웹 사이트에서 EXPLAIN 문을 참조하십시오.
출력에 사용 중인 키가 표시되지 않으면 WHERE 절의 열에 인덱스를 생성합니다. 테이블에 필요한 인덱싱이 있는 경우 테이블 통계가 최신 상태인지 확인하십시오. 통계가 최신 상태일 때 쿼리 최적화 프로그램은 올바른 카디널리티를 가진 가장 선별적인 인덱스를 사용합니다. 그에 따라 쿼리 성능이 향상됩니다. 자세한 내용은 MySQL 웹 사이트의 INFORMATION_SCHEMA STATISTICS 테이블을 참조하십시오.
ANALYZE TABLE 사용
ANALYZE TABLE을 사용하여 쿼리 통계를 최신 상태로 유지하십시오. 자세한 내용은 MySQL 웹 사이트의 ANALYZE TABLE 문을 참조하십시오.
EXPLAIN ANALYZE 사용
MySQL 8.0의 경우 EXPLAIN ANALYZE를 사용하십시오. EXPLAIN ANALYZE 문은 MySQL이 쿼리에서 시간을 할당하는 위치와 시간이 할당된 이유를 보여줍니다. 쿼리가 완료되면 EXPLAIN ANALYZE는 계획과 측정값을 출력합니다. 자세한 내용은 MySQL 웹 사이트에서 EXPLAIN ANALYZE로 정보 확보를 참조하십시오.
기록 목록 길이 확인
InnoDB는 다중 버전 동시성 제어(MVCC)를 사용합니다. MVCC는 읽기 일관성 유지를 위해 동일한 레코드에 대해 여러 개의 복사본을 유지합니다. 기록 목록 길이는 기록 목록의 수정 사항이 포함된 실행 취소 로그의 총 수입니다. 데이터를 쓰거나 읽는 장기 실행 트랜잭션이 있는 경우 트랜잭션이 완료되거나 롤백될 때까지 기록 목록 길이가 증가합니다. 또한 다른 트랜잭션이 장기 실행 트랜잭션에서 사용하는 테이블을 수정하면 기록 목록 길이가 증가합니다.
데이터베이스에서 열린 트랜잭션이나 장기 실행 트랜잭션을 방지하는 것이 좋습니다. 대신 데이터를 소량으로 커밋하십시오. 그러나 워크로드에 여러 개의 열린 트랜잭션이나 장기 실행 트랜잭션이 필요한 경우 데이터베이스의 기록 목록 길이가 길어질 수 있습니다.
기록 목록 길이를 모니터링하지 않으면 시간이 지남에 따라 성능이 저하될 수 있습니다. 기록 목록 길이가 길면 리소스 사용률이 높아지고, SELECT 문 성능이 느려지고 일관성이 떨어지며 스토리지가 증가할 수도 있습니다.
참고: 장기 실행 트랜잭션이 기록 목록 길이 증가의 유일한 원인은 아닙니다. 제거 스레드가 데이터베이스의 변경 사항과 일치하지 않는 경우 기록 목록 길이가 계속해서 길어집니다. 극단적인 경우에는 데이터베이스가 중단될 수도 있습니다.
기록 목록 길이를 확인하려면 다음 명령을 실행합니다.
SHOW ENGINE INNODB STATUS;
참고: SHOW ENGINE INNODB STATUS 문은 트랜잭션 처리, 대기 이벤트 및 교착 상태에 대한 정보를 가져옵니다. 자세한 내용은 MySQL 웹 사이트의 SHOW ENGINE 문을 참조하십시오.
출력 예시:
\------------ TRANSACTIONS ------------Trx id counter 26368570695 Purge done for trx's n:o < 26168770192 undo n:o < 0 state: running but idle History list length 1839
Performance Insights를 사용하여 기록 목록 길이를 확인하려면 다음 단계를 완료하십시오.
- Amazon RDS 콘솔을 엽니다.
- 탐색 창에서 Performance Insights를 선택한 다음, 지표를 보려는 데이터베이스를 선택합니다.
- 지표 탭을 선택합니다.
- 지표 대시보드 메뉴에서 사용자 지정 대시보드를 선택합니다.
- 위젯 추가를 선택한 다음, Trx Rseg History Len 지표를 검색하여 선택합니다.
- 위젯 추가를 선택합니다.
DML 쓰기로 인해 기록 목록 길이가 증가하는 경우 데이터베이스 관리자에게 쓰기 문을 종료하도록 요청하십시오.
참고: 중단된 트랜잭션에 대한 업데이트를 롤백하는 데 시간이 오래 걸립니다.
차단된 쿼리 해결
MySQL 8.0에서는 data_lock_waits 테이블의 성능 스키마에서 잠금 대기를 찾을 수 있습니다. 자세한 내용은 MySQL 웹 사이트의 InnoDB 트랜잭션 사용 및 잠금 정보를 참조하십시오.
예:
SELECT r.trx\_id waiting\_trx\_id, r.trx\_mysql\_thread\_id waiting\_thread, r.trx\_query waiting\_query, b.trx\_id blocking\_trx\_id, b.trx\_mysql\_thread\_id blocking\_thread, b.trx\_query blocking\_query FROM performance\_schema.data\_lock\_waits w INNER JOIN information\_schema.innodb\_trx b ON b.trx\_id = w.blocking\_engine\_transaction\_id INNER JOIN information\_schema.innodb\_trx r ON r.trx\_id = w.requesting\_engine\_transaction\_id;
자세한 내용은 다른 활성 세션이 없는데 Amazon RDS for MySQL DB 인스턴스에 대한 쿼리가 차단된 이유는 무엇입니까?를 참조하십시오.
SHOW PROFILE 문 사용
속도가 느린 쿼리를 프로파일링하여 세션에서 가장 많은 시간을 소비하는 상태를 찾아보십시오. 자세한 내용은 MySQL 웹 사이트의 SHOW PROFILE 문을 참조하십시오.
SHOW FULL PROCESSLIST 문 사용
SHOW FULL PROCESSLIST 문을 실행하고 향상된 모니터링을 사용하여 데이터베이스 서버에서 현재 수행하는 작업 목록을 검토하십시오. 자세한 내용은 MySQL 웹 사이트의 SHOW PROCESSLIST 문을 참조하십시오.
관련 정보
스토리지가 가득 찬 것으로 표시되는 RDS for MySQL 또는 MariaDB 인스턴스 문제를 해결하려면 어떻게 해야 합니까?

