AWS DMS CDC 작업을 실행할 때 소스 PostgreSQL 데이터베이스에서 스토리지 사용량이 많은 이유는 무엇입니까?

3분 분량
0

AWS Database Migration Service(AWS DMS) 변경 데이터 캡처(CDC) 작업을 실행하고 PostgreSQL 데이터베이스를 소스로 사용하고 있습니다. AWS DMS CDC 작업을 실행할 때 소스 데이터베이스에서 스토리지 사용량이 많은 이유는 무엇입니까?

간략한 설명

PostgreSQL을 CDC 작업의 소스로 사용하는 경우 AWS DMS는 PostgreSQL 기능인 논리 복제 슬롯을 사용하여 소스 데이터베이스에서 변경 사항을 가져옵니다. 이러한 슬롯은 PostgreSQL 소스 데이터베이스에서 수행된 것과 동일한 순서로 재생되는 작업 스트림을 나타냅니다.

논리 복제 슬롯은 PostgreSQL 소스에 연결되어 있지 않더라도 AWS DMS에 필요한 변환 로그(WAL)를 재교육하도록 설계되어 있습니다. 따라서 WAL은 AWS DMS가 복제 슬롯에서 필요한 변경 사항을 가져왔음을 확인한 후에만 PostgreSQL에서 제거됩니다. AWS DMS는 복제 슬롯의 restart_lsn을 진행하여 필요한 변경 사항이 있는지 확인합니다.

PostgreSQL 소스에서 스토리지 사용량이 많은 원인

PostgreSQL이 논리 복제 슬롯 기능을 구현하는 방식 때문에 일부 시나리오에서는 원본 데이터베이스에서 스토리지 볼륨 문제가 발생할 수 있습니다.

  • AWS DMS CDC 작업이 오랫동안 중지되었습니다. 즉, AWS DMS가 소스 데이터베이스에 연결되어 있지 않으며 소스의 복제 슬롯에서 변경 사항을 소비하지 않습니다. 즉, PostgreSQL은 AWS DMS에서 읽지 않은 이전 WAL을 삭제하지 않고 WAL을 지속적으로 유지합니다. 따라서 소스 데이터베이스의 스토리지가 결국 꽉 차게 됩니다.
  • 과중한 워크로드 - 과도한 WAL 생성을 유발하는 과중한 워크로드로 인해 논리 복제 슬롯이 사용 중일 때 PostgreSQL 데이터베이스에서 스토리지가 가득 찰 수 있습니다. 이는 복제 슬롯에 로그 시퀀스 번호(LSN)가 필요한 경우 PostgreSQL에 의해 WAL이 계속 유지되기 때문에 발생합니다.
  • 유휴 복제 슬롯 - AWS DMS가 변경 사항을 복제하는 테이블, 스키마 또는 데이터베이스가 비활성 상태인 경우에도 복제 슬롯에 의해 유지되는 WAL에는 해당 테이블, 스키마 또는 데이터베이스에 대한 정보가 계속 포함됩니다. 이렇게 하면 테이블에 트랜잭션이 발생하지 않더라도 소스에서 스토리지가 가득 차게 됩니다.

해결 방법

복제 슬롯으로 인해 PostgreSQL 소스에서 높은 디스크 공간 사용량이 발생하는지 확인

PostgreSQL 데이터베이스에서 복제 슬롯이 높은 디스크 공간 사용량의 원인인지 확인하려면 Amazon RDS for PostgreSQL에서 "No space left on device” 또는 "DiskFull" 오류가 발생하는 이유는 무엇입니까?에 나열된 쿼리를 실행합니다.

참고: 이러한 쿼리 중 다수는 자체 관리형 PostgreSQL 설치에서 사용할 수 있습니다.

WAL 하트비트 기능 켜기

AWS DMS WAL 하트비트 기능을 활성화하면 PostgreSQL 소스 데이터베이스의 스토리지 소비를 방지할 수 있습니다. 이 기능은 더미 트랜잭션을 모방하여 유휴 논리 복제 슬롯이 이전 WAL 로그를 보유하지 않도록 합니다. 이 하트비트는 restart_lsn을 계속 움직이도록 하고 PostgreSQL 소스에서 스토리지가 가득 차는 것을 방지합니다.

WAL 하트비트 기능을 켜려면 다음 추가 연결 속성(ECA)을 PostgreSQL 소스 엔드포인트에 추가합니다.

heartbeatEnable=Y;

필요한 경우 다음과 같은 추가 ECA를 지정합니다.

heartbeatFrequency=frequency;heartbeatSchema=schemaname;

heartbeatFrequency는 PostgreSQL 소스에서 하트비트 트랜잭션이 실행되는 빈도(분)를 결정합니다. 예를 들어 heartbeatFrequency를 15로 설정하면 AWS DMS는 소스에서 15분마다 하트비트 트랜잭션을 실행합니다.

HeartBeatSchema는 하트비트 트랜잭션을 생성하기 위해 AWS DMS가 데이터베이스 객체를 생성하는 데이터베이스 스키마를 지정합니다.

참고: 하트비트 트랜잭션은 AWS DMS 작업이 실행 중인 경우에만 소스에서 실행됩니다. AWS DMS 작업이 중지된 경우 WAL 하트비트 기능은 효과가 없습니다.

PostgreSQL에서 슬롯의 크기 제한

PostgreSQL 13 이상의 소스 데이터베이스에 max_slot_wal_keep_size를 적용할 수 있습니다. 복제 슬롯이 보유할 수 있는 최대 WAL 양을 설정합니다.

참고: max_slot_wal_keep_size 설정은 PostgreSQL 소스에서 스토리지 가득 참 문제를 방지하는 데 도움이 될 수 있습니다. 하지만 AWS DMS CDC 작업이 복제 슬롯에서 변경 내용을 읽기 전에 WAL이 소스에서 제거될 수도 있습니다. 따라서 작업이 실패합니다.


관련 정보

논리적 디코딩 개념

PostgreSQL을 DMS 소스로 사용 시 추가 연결 속성

Amazon RDS for PostgreSQL에서 "디바이스에 남은 공간 없음" 또는 "DiskFull" 오류가 발생하는 이유는 무엇입니까?

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