Amazon Aurora PostgreSQL 호환 버전 데이터베이스(DB) 클러스터에서 실행되는 쿼리의 명령문 제한 시간 오류를 해결하고 싶습니다.
해결 방법
중요: Performance Insights는 2026년 6월 30일에 서비스가 종료됩니다. 2026년 6월 30일 이전에 Database Insights의 고급 모드로 업그레이드할 수 있습니다. 업그레이드하지 않으면 Performance Insights를 사용하는 DB 클러스터가 Database Insights의 표준 모드로 기본 설정됩니다. 실행 계획과 온디맨드 분석은 Database Insights의 고급 모드에서만 지원됩니다. 클러스터가 표준 모드로 기본 설정된 경우 콘솔에서 이러한 기능을 사용하지 못할 수 있습니다. 고급 모드를 활성화하려면 Amazon RDS용 Database Insights의 고급 모드 켜기 및 Amazon Aurora용 Database Insights의 고급 모드 켜기를 참조하십시오.
statement_timeout 파라미터로 지정된 시간 내에 쿼리가 실행되지 않으면 statement_timeout 파라미터가 쿼리를 취소합니다. 다음 오류 메시지가 표시됩니다.
"ERROR: canceling statement due to statement timeout."
이 오류를 해결하려면 다음 작업을 수행하십시오.
구성된 statement_timeout 파라미터 확인
DB 클러스터 파라미터 그룹 또는 DB 파라미터 그룹의 statement_timeout 파라미터를 확인하려면 다음 SELECT 쿼리를 실행합니다.
SELECT name, setting, unit, context, source FROM pg_settings WHERE name = 'statement_timeout';
예상 출력:
name | setting | unit | context | source
-------------------+---------+------+---------+--------------------
statement_timeout | 5000 | ms | user | configuration file
참고: 출력 예시에서 statement_timeout 파라미터의 값은 5000밀리초입니다. "source" 필드에는 파라미터가 클러스터 파라미터 그룹 수준에서 설정되었음을 나타내는 "configuration file"이 표시됩니다.
그런 다음 역할 수준 및 데이터베이스 수준에서 statement_timeout 파라미터를 확인합니다.
데이터베이스 클러스터에 있는 모든 역할의 역할 수준 구성을 확인하려면 다음 쿼리를 실행하십시오.
SELECT r.rolname, d.datname, s.setconfig
FROM pg_db_role_setting s
JOIN pg_roles r ON r.oid = s.setrole
LEFT JOIN pg_database d ON d.oid = s.setdatabase
WHERE s.setconfig::text LIKE '%statement_timeout%'
ORDER BY r.rolname;
클러스터의 모든 데이터베이스에 대한 데이터베이스 수준 구성을 확인하려면 다음 쿼리를 실행하십시오.
SELECT d.datname, rs.setconfig
FROM pg_db_role_setting rs
JOIN pg_database d ON d.oid = rs.setdatabase
WHERE rs.setrole = 0;
출력을 검토하여 역할 또는 데이터베이스 수준에서 클러스터 수준 설정을 재정의할 수 있는 statement_timeout 구성을 파악하십시오.
참고: ALTER ROLE SET로 설정된 statement_timeout 파라미터는 하위 역할에 상속되지 않습니다. 역할의 statement_timeout 파라미터를 구성하면 해당 역할에 로그인할 때만 파라미터를 사용할 수 있습니다. 자세한 내용은 PostgreSQL 웹사이트에서 ALTER ROLE을 참조하십시오.
취소된 SQL 쿼리 파악
PostgreSQL 오류 로그 파일을 확인한 다음 log_min_error_statement 파라미터가 ERROR로 설정되었는지, 아니면 더 낮은 심각도로 설정되었는지 확인합니다. 실패한 명령문을 파악한 후 실패한 SQL 및 테이블 이름을 찾으십시오. 자세한 내용은 log_line_prefix 파라미터 이해를 참조하십시오.
쿼리 실행 시간이 길어지는 원인 파악
실패한 SQL 쿼리를 찾았으면 CloudWatch Database Insights를 사용하여 차단된 트랜잭션을 파악하십시오.
CloudWatch Database Insights를 사용하여 성능을 분석하려면 다음 단계를 완료하십시오.
- Amazon Relational Database Service(Amazon RDS) 콘솔을 엽니다.
- 탐색 창에서 데이터베이스를 선택합니다.
- Aurora PostgreSQL DB 클러스터를 선택합니다.
- 모니터링 탭을 선택합니다.
- 성능 개선 도우미의 세부 정보 보기를 선택합니다.
- DB 로드를 검토합니다. 대기 이벤트, SQL 쿼리, 호스트 또는 사용자별로 DB 로드를 그룹화하여 차단된 트랜잭션을 파악할 수 있습니다.
문제가 계속 반복되면 DB 인스턴스에 대해 log_min_duration_statement 파라미터를 구성하고 auto_explain 모듈을 사용하십시오. 자세한 내용은 Amazon RDS PostgreSQL 또는 Aurora PostgreSQL에 대한 쿼리의 실행 계획을 로깅하여 쿼리 성능을 조정하려면 어떻게 해야 합니까?를 참조하십시오.
EXPLAIN 및 EXPLAIN ANALYZE 명령을 사용하여 쿼리 계획을 가져올 수도 있습니다. 자세한 내용은 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 호환 DB 인스턴스에서 성능 문제 및 실행 속도가 느린 쿼리를 파악하고 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
소스 테이블의 데드 행 확인
데드 행 또는 튜플이 있으면 SELECT 시간이 늘어날 수 있습니다. 소스 테이블에 데드 행이 많이 있는지 확인하려면 다음 쿼리를 실행합니다.
SELECT * FROM pg_stat_user_tables WHERE relname = 'table_name';
참고: table_name을 소스 테이블의 이름으로 바꾸십시오.
관련 정보
Amazon RDS for PostrgreSQL 또는 Aurora PostgreSQL 호환 DB 인스턴스에서 장기 실행 쿼리를 종료하려면 어떻게 해야 합니까?
Amazon RDS PostgreSQL 또는 Aurora PostgreSQL 데이터베이스 인스턴스에서 쿼리가 차단된 원인을 파악하려면 어떻게 해야 합니까?