Aurora PostgreSQL 호환 인스턴스의 로컬 스토리지 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Aurora PostgreSQL 호환 에디션 DB 인스턴스의 로컬 스토리지에 문제가 있습니다.

간략한 설명

Amazon Aurora 클러스터에 있는 DB 인스턴스에는 두 가지 유형의 스토리지가 있습니다.

  • 영구 데이터에 사용되는 스토리지(공유 클러스터 볼륨). 자세한 내용은 클러스터 볼륨에 포함된 항목을 참조하세요.
  • 인스턴스 클래스를 기반으로 한 클러스터의 각 Aurora 인스턴스에 대한 로컬 스토리지. 이 스토리지 크기는 인스턴스 클래스에 의해 결정되며, 더 큰 DB 인스턴스 클래스로 이동해야 변경할 수 있습니다. Aurora PostgreSQL 호환은 오류 로그 및 임시 파일을 저장하기 위해 로컬 스토리지를 사용합니다. 자세한 내용은 Aurora PostgreSQL의 임시 스토리지 제한을 참조하세요.

해결 방법

FreeLocalStorage에 대한 Amazon CloudWatch 지표를 사용하여 Aurora DB 인스턴스 또는 노드와 관련된 로컬 스토리지 공간을 모니터링할 수 있습니다. 이 지표는 임시 테이블 및 로그에 대해 각 DB 인스턴스에서 사용 가능한 스토리지 크기를 보고합니다. 자세한 내용은 Amazon CloudWatch를 사용하여 Amazon Aurora 지표 모니터링을 참조하세요.

Aurora 로컬 스토리지가 가득 차면 발생한 오류에 따라 다음 문제 해결 단계를 사용하세요.

임시 테이블 또는 파일에서 로컬 스토리지 공간이 사용됨

"ERROR: could not write block XXXXXXXX of temporary file: No space left on device."

이 오류는 DB 인스턴스에서 임시 스토리지가 소진된 경우 발생합니다. 여기에는 다음과 같은 작업을 포함하여 여러 가지 원인이 있을 수 있습니다.

  • 대형 테이블 변경
  • 대형 테이블에 인덱스 추가
  • 복잡한 JOIN, GROUP BY 또는 ORDER BY 절을 사용하여 대규모 SELECT 쿼리를 수행합니다.

다음 방법을 사용하여 임시 테이블 및 임시 파일 크기를 확인합니다.

1.    임시 파일의 경우 Aurora PostgreSQL 호환 DB 인스턴스에서 log_temp_files 파라미터를 활성화합니다. 이 파라미터는 지정된 KB보다 큰 임시 파일 사용을 기록합니다. 이 파라미터를 활성화한 후 임시 파일이 삭제되면 각 임시 파일에 대한 로그 항목이 생성됩니다. 값이 0이면 모든 임시 파일 정보를 기록합니다. 양의 값이면 지정된 KB 이상인 파일만 기록합니다. 기본값은 -1로, 임시 파일 기록 기능을 종료합니다. 이 파라미터를 사용하여 임시 파일 세부 정보를 식별한 다음 FreeLocalStorage 지표와 이 임시 파일을 연결합니다.

참고: log_temp_files 파라미터를 활성화하면 Aurora PostgreSQL 호환 DB 인스턴스에서 과도한 로깅이 발생할 수 있습니다. 이러한 이유로, log_temp_files를 활성화하기 전에 Aurora PostgreSQL 호환 로그 파일 크기를 확인하는 것이 모범 사례입니다. 로그 파일이 로컬 스토리지의 최대 공간을 차지하는 경우 rds.log_retention 값을 줄여 공간을 확보합니다. rds.log_retention의 기본값은 3일입니다.

또한 다음 명령의 후속 실행에서 델타를 사용하여 임시 파일을 검토할 수 있습니다.

maxiops=> select datname, temp_files , pg_size_pretty(temp_bytes) as temp_file_size  FROM   pg_stat_database order by temp_bytes desc;

참고: temp_files 열에서 임시 파일의 생성 시점(예: 정렬 또는 해시 중)에 상관없이 모든 임시 파일이 계산됩니다. pg_stat_database 보기의 temp_filestemp_bytes 열은 누적된 값에 대한 통계를 수집합니다. 이 값은 pg_stat_reset() 함수를 사용하거나 DB 인스턴스를 다시 시작하여 재설정할 수 있습니다. 자세한 내용은 PostgreSQL 문서에서 추가 통계 함수를 참조하세요.

Aurora PostgreSQL 10 이상을 사용하는 경우 성능 개선 도우미를 사용하여 temp_bytestemp_files를 모니터링할 수 있습니다. 이는 또한 Amazon Relational Database Service(Amazon RDS) for PostgreSQL에 적용됩니다. 성능 개선 도우미는 대기 이벤트 외에도 DB 엔진의 내부 지표에 대한 기본 카운터를 제공합니다. 자세한 내용은 Amazon RDS for PostgreSQL용 기본 카운터를 참조하세요.

또한 maintenance_work_memwork_mem을 늘려 작업을 수행하는 프로세스에 더 많은 메모리를 할당할 수도 있습니다. 그러면 작업에 대해 더 많은 메모리를 사용하고, 더 적은 임시 디스크 스토리지를 사용할 수 있습니다. 이러한 파라미터에 대한 자세한 내용은 PostgreSQL 문서에서 maintenance_work_memwork_mem을 참조하세요. 모범 사례는, 메모리가 부족해지지 않도록 쿼리나 세션 수준에서 maintenance_work_memwork_mem에 대한 값을 설정하는 것입니다. 자세한 내용은 Amazon Aurora PostgreSQL 참조를 확인하세요.

2.    임시 테이블의 경우 다음과 같은 쿼리를 실행합니다.

maxiops=> SELECT
n.nspname as SchemaName
,c.relname as RelationName
,CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'i' THEN 'index'
WHEN 'S' THEN 'sequence'
WHEN 's' THEN 'special'
END as RelationType
,pg_catalog.pg_get_userbyid(c.relowner) as RelationOwner
,pg_size_pretty(pg_relation_size(n.nspname ||'.'|| c.relname)) as RelationSize
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n
    ON n.oid = c.relnamespace
WHERE  c.relkind IN ('r','s')
AND  (n.nspname !~ '^pg_toast' and nspname like 'pg_temp%')
ORDER BY pg_relation_size(n.nspname ||'.'|| c.relname) DESC;

애플리케이션을 면밀히 모니터링하고 어떤 트랜잭션이 임시 테이블을 생성하는지 확인하는 것이 가장 좋습니다. 이렇게 하면 사용 가능한 로컬 스토리지 용량의 사용량을 관리할 수 있습니다. 또한 Aurora 인스턴스에 대해 더 높은 인스턴스 클래스로 이동하여 더 많은 가용 로컬 스토리지를 사용할 수 있습니다.

로그 파일에서 사용하는 로컬 스토리지

또한 과도한 로깅으로 인해 DB 인스턴스에서 로컬 스토리지를 소진할 수도 있습니다. 다음은 로컬 스토리지 공간을 사용할 수 있는 로깅 파라미터의 몇 가지 예입니다. 사용량은 로깅이 과도하거나 오랜 시간 동안 오류 로그를 유지했기 때문일 수 있습니다.

rds.log_retention_period
auto_explain.log_min_duration
log_connections
log_disconnections
log_lock_waits
log_min_duration_statement
log_statement
log_statement_stats

과도한 로깅을 일으킨 파라미터를 식별하려면 PostgreSQL 로그를 분석하여 가장 큰 로그를 찾습니다. 그런 다음, 이러한 로그에서 항목의 대부분을 책임지는 파라미터를 식별합니다. 그리고 과도한 로깅을 일으킨 파라미터를 수정합니다.

오류로 실패하는 쿼리를 반복해서 실행하면 기본적으로 이 오류가 있는 PostgreSQL 로그는 PostgreSQL 오류 로그에 기록됩니다. 기록된 오류를 검토하고 실패하는 쿼리를 수정하여 로그가 과도하게 스토리지를 사용하지 않도록 방지합니다. rds.log_retention의 기본값(3일)을 줄여 오류 로그가 사용하는 공간을 확보할 수도 있습니다.

과도한 로깅이 필요하고 로그 파일 때문에 사용 가능한 로컬 스토리지에 제한이 있는 경우, 더 높은 인스턴스 클래스로 이동하는 것을 고려해 보십시오. 즉, Aurora DB 인스턴스에 더 많은 가용 로컬 스토리지가 부여됩니다.


관련 정보

Amazon Aurora PostgreSQL 모범 사례

AWS 공식
AWS 공식업데이트됨 일 년 전