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

2분 분량
0

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

간략한 설명

Amazon RDS for PostgreSQL 인스턴스의 경우 AWS DMS는 네이티브 복제 슬롯을 사용하여 변경 데이터 캡처(CDC)에 대한 논리적 복제를 수행합니다.

PostgreSQL 인스턴스가 갖는 복제 슬롯 수는 max_replication_slots 파라미터에 의해 제어됩니다. 기본적으로 RDS PostgreSQL 인스턴스에는 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 파라미터의 값을 늘린 후 작업을 다시 시작합니다.


관련 정보

Amazon RDS의 PostgreSQL

PostgreSQL 데이터베이스를 AWS DMS 원본으로 사용

PostgreSQL 설명서의 논리적 디코딩 예시

AWS 공식
AWS 공식업데이트됨 9달 전