PostgreSQL을 소스로 사용하는 AWS DMS 작업이 사용 중인 모든 복제 슬롯에서 실패하는 이유는 무엇인가요?

2분 분량
0

PostgreSQL DB 인스턴스용 Amazon Relational Database Service(RDS)를 사용하는 AWS Database Migration Service(AWS DMS) 작업이 있습니다. 작업이 실패하고 모든 복제 슬롯이 사용 중이며 오류 메시지가 나타납니다.

간략한 설명

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

max_replication_slots 파라미터는 PostgreSQL 인스턴스에 있는 복제 슬롯의 수를 제어합니다. PostgreSQL 인스턴스용 RDS에는 기본적으로 다섯 개의 복제 슬롯이 있습니다. 최대 복제 슬롯 수를 초과하면 다음과 같은 로그 항목이 표시됩니다.

메시지
[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개의 메시지: 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

참고: **active: t (true)**는 슬롯이 사용 중임을 의미하고, **active: f (false)**는 슬롯이 사용 중이 아님을 의미합니다.

사용하지 않는 복제 슬롯을 제거하려면 다음 쿼리를 실행합니다.

SELECT pg_drop_replication_slot('old_and_used_slot');

참고:****old_and_used_slot을 복제 슬롯의 이름으로 바꾸세요.

사용하지 않는 복제 슬롯을 제거한 후 작업을 다시 시작합니다.

max_replication_slots 파라미터의 값을 늘립니다.

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

관련 정보

논리적 복제를 사용하여 변경 데이터 캡처(CDC) 활성화

Amazon RDS for PostgreSQL

PostgreSQL 데이터베이스를 AWS DMS 소스로 사용

PostgreSQL 웹 사이트의 논리적 디코딩 예제