Amazon Aurora for PostgreSQL 스토리지에는 어떤 항목이 저장되며, 스토리지 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 11월 14일

Amazon Aurora PostgreSQL 스토리지에는 어떤 항목이 저장됩니까? 스토리지 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

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

  • 영구 데이터에 사용되는 스토리지(공유 클러스터 스토리지). 자세한 내용은 클러스터 볼륨에 포함된 항목을 참조하십시오.
  • 임시 데이터 및 로그에 사용되는 스토리지(로컬 스토리지). 모든 DB 임시 파일(예: 로그 및 임시 테이블)은 인스턴스 로컬 스토리지에 저장됩니다. 여기에는 쿼리에 필요한 정렬 작업, 해시 테이블, 그룹화 작업이 포함됩니다.

각 Aurora 인스턴스에는 제한된 크기의 로컬 스토리지가 포함되며, 이 크기는 인스턴스 클래스로 결정됩니다. 일반적으로 로컬 스토리지의 크기는 인스턴스에 있는 메모리의 2배입니다. 인스턴스에서 사용할 수 있는 것보다 더 많은 메모리를 필요로 하는 정렬 또는 인덱스 생성 작업을 수행하는 경우 Aurora는 작업을 이행하기 위해 로컬 스토리지를 사용합니다.

​해결 방법

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

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 인스턴스에서 log_temp_files 파라미터를 활성화합니다. 이 파라미터는 지정된 KB보다 큰 임시 파일 사용을 기록합니다. 이 파라미터를 활성화한 후 임시 파일이 삭제되면 각 임시 파일에 대한 로그 항목이 생성됩니다. 값이 0이면 모든 임시 파일 정보를 기록하고, 양의 값이면 지정된 KB 이상인 파일만 기록합니다. 기본값은 -1로, 임시 파일 기록 기능을 비활성화합니다. 이 파라미터를 사용하여 임시 파일 세부 정보를 식별할 수 있으며, Free local storage (여유 로컬 스토리지) 지표와 이 임시 파일을 연결할 수 있습니다.

참고: log_temp_files 파라미터를 활성화하면 Aurora PostgreSQL 인스턴스에서 과도한 로깅이 발생할 수 있습니다. 이러한 이유로, log_temp_files를 활성화하기 전에 Aurora Postgres 로그 파일 크기를 확인하는 것이 모범 사례입니다. Aurora Postgres 로그 파일이 로컬 스토리지의 최대 공간을 이용하는 경우 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 또는 Amazon RDS for PostgreSQL 10 또는 11을 사용하는 경우 성능 개선 도우미를 사용하여 temp_bytestemp_files를 모니터링할 수 있습니다. 성능 개선 도우미는 대기 이벤트 외에도 DB 엔진의 내부 지표에 대한 기본 카운터를 제공합니다. 자세한 내용은 Amazon RDS 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;

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

또한 Aurora 인스턴스 크기를 늘려 사용 가능한 로컬 스토리지를 더 늘릴 수도 있습니다.

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

또한 과도한 로깅으로 인해 인스턴스에서 로컬 스토리지를 소진할 수도 있습니다. 다음 로깅 파라미터 중 하나 이상에 의해 과도한 로깅이 발생할 수 있습니다.

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 오류 로그에 기록됩니다. 기록된 오류를 검토하고 실패하는 쿼리를 수정하여 로그가 과도하게 스토리지를 사용하지 않도록 방지합니다. rds.log_retention의 기본값(3일)을 줄여 공간을 확보할 수도 있습니다.

또한 Aurora 인스턴스 크기를 늘려 사용 가능한 로컬 스토리지를 더 늘릴 수도 있습니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?