PostgreSQL을 원본으로 사용하는 AWS DMS 작업이 모든 복제 슬롯이 사용 중일 때 실패하는 이유는 무엇입니까?

최종 업데이트 날짜: 2019년 10월 1일

PostgreSQL을 원본으로 실행하는 Amazon RDS(Amazon Relational Database Service) DB 인스턴스를 사용하는 AWS DMS(AWS Database Migration Service) 작업이 있습니다. 작업이 실패하고 모든 복제 슬롯이 사용 중이며 오류 메시지를 받았습니다. 내 작업이 실패하는 이유는 무엇이며 이러한 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

PostgreSQL을 실행하는 RDS DB 인스턴스의 경우, AWS DMS는 기본 복제 슬롯을 사용하여 CDC(변경 데이터 캡처)에 대한 논리적 복제, 즉 지속적 복제를 수행합니다.

PostgreSQL 인스턴스가 갖는 복제 슬롯 수는 max_replication_slots 파라미터에 의해 제어됩니다. 기본적으로 PostgreSQL을 실행하는 RDS DB 인스턴스에는 5개의 복제 슬롯이 있습니다. 최대 복제 슬롯 수를 초과하는 경우, 다음과 비슷한 로그 항목이 표시됩니다.

메시지
[SOURCE_CAPTURE  ]E:  Failed (retcode -1) to execute statement [1022502]  (ar_odbc_stmt.c:2579)
[SOURCE_CAPTURE  ]E: RetCode: SQL_ERROR  SqlState: 53400 NativeError: 1 Message: ERROR: all replication slots are in use;

이러한 오류를 해결하려면 사용된 복제 슬롯을 제거하거나 max_replication_slots 파라미터의 값을 늘립니다.

​해결 방법

사용된 복제 슬롯 제거

여러 AWS DMS 작업을 실행 중이거나 동일한 DB 인스턴스에서 이전 작업을 실행 중인 경우, 새 작업에 슬롯을 사용할 수 있도록 공간을 계속 차지하는 사용된 복제 슬롯을 제거합니다. 먼저 최대 복제 슬롯 수를 식별합니다. 그런 다음 새 작업에서 재사용할 수 있도록 사용된 복제 슬롯을 제거하거나 "삭제"합니다.

다음 쿼리를 실행하여 최대 복제 슬롯 수를 확인합니다.

SELECT * FROM pg_replication_slots;

    slot_name    |    plugin     | slot_type | datoid | database | active |  xmin  | catalog_xmin | restart_lsn

-----------------+---------------+-----------+--------+----------+--------+--------+--------------+-------------

old_and_used_slot | test_decoding | logical   |  12052 | postgres | f      |        |          684 | 0/16A4408

다음 쿼리를 실행하여 사용된 복제 슬롯을 삭제합니다.

SELECT pg_drop_replication_slot('old_and_used_slot');

참고: old_and_used_slot을 복제 슬롯의 이름으로 바꿉니다.

max_replication_slots 파라미터의 값 증가

Amazon RDS DB 인스턴스에 연결된 사용자 지정 DB 파라미터 그룹DB 파라미터를 수정하여 max_replication_slots 파라미터의 값을 늘립니다. 이는 정적 파라미터이므로 파라미터 값을 변경한 후 DB 인스턴스를 재부팅해야 합니다.

사용된 복제 슬롯을 제거하거나 max_replication_slots 파라미터의 값을 늘린 후 AWS DMS 작업을 다시 시작합니다.


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

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


도움이 필요하십니까?