알려진 제한사항

데이터베이스를 Cloud SQL로 마이그레이션하기 전에 이 마이그레이션 시나리오의 알려진 제한사항을 고려해야 합니다.

PostgreSQL 데이터베이스를 소스로 사용할 경우의 알려진 제한사항은 다음과 같습니다.

  • pglogical 확장 프로그램은 PostgreSQL 12 이상의 생성된 열 복제를 지원하지 않습니다.

  • 테이블 구조 (DDL)에 대한 변경사항은 표준 DDL 명령어를 통해 복제되지 않으며 복제에 사용되는 pglogical 확장 프로그램을 사용하여 실행되는 명령어로만 복제됩니다. 여기에는 enum 유형 변경이 포함됩니다.

    • 예를 들어 pglogical는 일관된 지점에서 소스 데이터베이스와 복제본 모두에서 DDL을 실행할 수 있는 pglogical.replicate_ddl_command 함수를 제공합니다.
    • 새로 만든 테이블의 데이터를 복제하려면 pglogical.replication_set_add_table 명령어를 사용하여 기존 복제 세트에 새 테이블을 추가해야 합니다.
    • 마이그레이션이 진행되는 동안 DDL 복제에 대해 자세히 알아보려면 마이그레이션 충실도를 참조하세요.
  • 기본 키가 없는 테이블의 경우 Database Migration Service가 변경 데이터 캡처 (CDC) 단계 중에 초기 스냅샷과 INSERT 문의 마이그레이션을 지원합니다. UPDATE 및 DELETE 문 마이그레이션은 다음에 따라 다릅니다.

    • 표준 마이그레이션: 기본 키가 없는 테이블의 경우 UPDATE 및 DELETE 문이 마이그레이션되지 않습니다. 마이그레이션하기 전에 열의 기본 키를 추가하거나 UPDATE 및 DELETE 문을 수동으로 마이그레이션해야 합니다.
    • 빠른 시작 마이그레이션: 빠른 시작 마이그레이션에서는 복제본 ID를 INDEX 또는 FULL로 설정하는 경우 UPDATE 및 DELETE 작업을 복제하는 데 기본 키가 필요하지 않습니다. REPLICA IDENTITY FULL를 구성하면 미리 쓰기 로그 (WAL) 볼륨과 리소스 오버헤드가 증가합니다. 가능한 경우 기본 키를 추가하는 것이 좋습니다. 자세한 내용은 PostgreSQL 복제본 ID 문서 및 빠른 시작 이전 가이드를 참조하세요.
  • Database Migration Service는 구체화된 뷰에서 데이터를 마이그레이션하지 않고 뷰 스키마만 마이그레이션합니다. 대상 데이터베이스에서 뷰를 채우려면 REFRESH MATERIALIZED VIEW view_name를 실행합니다.

  • 진행 중인 CDC 중에 대상의 SEQUENCE 상태 (예: last_value)가 소스와 다를 수 있습니다. 시퀀스 값은 최종 승격 단계에서 동기화됩니다.

  • UNLOGGED 및 TEMPORARY 테이블은 복제되지 않으며 복제할 수 없습니다.

  • 대규모 객체 데이터 유형 (pg_largeobject를 참조하는 oid)은 PostgreSQL 논리적 디코딩에서 지원되지 않습니다.

  • Cloud SQL에서 PostgreSQL용으로 지원하는 확장 프로그램만 마이그레이션할 수 있습니다. Database Migration Service는 Cloud SQL에서 지원하지 않는 확장 프로그램을 마이그레이션하지 않습니다. 이러한 확장 프로그램이 있어도 마이그레이션이 차단되지는 않지만 원활한 마이그레이션을 위해 애플리케이션이 지원되지 않는 확장 프로그램을 참조하지 않는지 확인하세요. 지원되는 확장 프로그램 목록은 Cloud SQL 문서의 PostgreSQL 확장 프로그램을 참조하세요.

  • pg_cron 확장 프로그램(또는 확장 프로그램 내에 구성된 크론 작업)은 Database Migration Service에서 마이그레이션되지 않지만 PostgreSQL용 Cloud SQL 대상에서 지원됩니다. 소스 데이터베이스에서 pg_cron를 사용하는 경우 마이그레이션이 완료된 후 대상 인스턴스에서 확장 프로그램을 다시 설치하고 크론 작업을 구성합니다.

  • Database Migration Service는 복구 모드에 있는 읽기 복제본에서 마이그레이션하는 것을 지원하지 않습니다.

  • Database Migration Service는 AWS SCT 확장 프로그램 팩이 적용된 Amazon RDS 소스를 지원하지 않습니다.

  • C로 작성된 사용자 정의 함수는 Cloud SQL에서 지원하는 확장 프로그램을 만들 때 설치되는 함수를 제외하고 마이그레이션할 수 없습니다.

  • 소스 데이터베이스에 다른 확장 프로그램이 있고 해당 버전이 Cloud SQL에서 지원되지 않는 경우 마이그레이션 작업을 테스트하거나 시작할 수 없습니다.

  • 마이그레이션 작업이 시작된 후 소스 인스턴스에 추가된 데이터베이스는 마이그레이션되지 않습니다.

  • Database Migration Service를 사용하여 마이그레이션할 때 특정 데이터베이스를 선택할 수 있습니다. 선택한 데이터베이스의 모든 테이블과 스키마가 마이그레이션됩니다. 단, 다음은 제외됩니다.

    • 정보 스키마 (information_schema)입니다.
    • pg_로 시작하는 모든 스키마(예: pg_catalog, pg_toast, pgtemp*). pg_로 시작하는 PostgreSQL 카탈로그의 전체 목록은 PostgreSQL 문서의 PostgreSQL 시스템 카탈로그를 참조하세요.
    • 사용자 로그인 사용자 인증 정보 및 역할
  • 암호화된 데이터베이스에서 데이터를 복호화하기 위해 고객 관리 암호화 키 (CMEK)가 필요하고 Database Migration Service에 키에 대한 액세스 권한이 없으면 데이터베이스를 마이그레이션할 수 없습니다. 하지만 Cloud SQL은 pgcrypto를 지원하므로 pgcrypto 확장 프로그램으로 암호화된 데이터는 마이그레이션할 수 있습니다. Database Migration Service는 AWS가 복호화를 투명하게 처리하므로 암호화된 Amazon Aurora 또는 Amazon RDS 데이터베이스에서 마이그레이션하는 것도 지원합니다. 자세한 내용은 Amazon Aurora 리소스 암호화 및 Amazon RDS 리소스 암호화를 참조하세요.

  • 마이그레이션 중 대상 데이터베이스 운영 동작:

    • 쓰기 가능한 대상 데이터베이스: PostgreSQL용 Cloud SQL은 마이그레이션 중에 대상 데이터베이스를 읽기 전용 모드로 실행하지 않습니다. Database Migration Service에서 만든 대상 인스턴스는 강등되지 않습니다.

    • 마이그레이션 데이터에 대한 쓰기 작업 방지: 마이그레이션에 참여하는 테이블 또는 데이터베이스에서 쓰기 작업(예: INSERT, UPDATE, DELETE 또는 DDL 스키마 변경)을 수행하지 마세요. 마이그레이션 중인 데이터에 쓰기를 실행하면 수신되는 변경 데이터 캡처(CDC) 스트림과 복제 충돌이 발생할 수 있습니다.

    • 데이터베이스 사용자 관리: 표준 psql 명령어를 사용하거나 Google Cloud 콘솔의 Cloud SQL을 통해 언제든지 데이터베이스 사용자를 만들고 관리할 수 있습니다. 자세한 내용은 Cloud SQL 문서의 사용자 관리를 참조하세요.

    • 정지된 기능: 연속 복제 중에는 자동 백업 및 PITR(point-in-time recovery)이 정지됩니다. 또한 마이그레이션 작업이 승격될 때까지 대상 인스턴스에서 Cloud SQL 읽기 복제본을 만들 수 없습니다.

  • 트리거 동작은 트리거 구성에 따라 달라집니다. 기본적으로 트리거는 ALTER EVENT TRIGGER 또는 ALTER TABLE ... ENABLE ALWAYS TRIGGER로 구성되지 않는 한 복제 중에 복제본에서 실행되지 않습니다.

  • SECURITY DEFINER로 정의된 함수는 승격된 권한을 보유한 대상 Cloud SQL 인스턴스에서 cloudsqlexternalsync에 의해 생성됩니다. 공개 권한을 취소하고 액세스 권한을 선택적으로 부여하여 민감한 SECURITY DEFINER 함수에 대한 실행 권한을 제한합니다.

  • Cloud SQL은 커스텀 테이블스페이스를 지원하지 않습니다. 커스텀 테이블스페이스 내의 모든 객체는 Cloud SQL의 기본 pg_default 테이블스페이스로 마이그레이션됩니다.

  • Private Service Connect 인터페이스 연결 방법은 기존 대상 인스턴스로 마이그레이션하는 경우에만 지원됩니다. 비공개 IP 연결을 사용하고 새 대상 인스턴스로 마이그레이션하려면 VPC 피어링을 사용합니다.

  • 대상 인스턴스 또는 클러스터에 대한 Identity and Access Management 데이터베이스 인증은 지원되지 않습니다. Database Migration Service는 데이터베이스 사용자 인증을 사용하여 대상 데이터베이스에 연결합니다. IAM에 대한 자세한 내용은 Cloud SQL 문서의 IAM 인증을 참조하세요.

기존 대상 인스턴스로의 마이그레이션 제한사항

  • 표준 마이그레이션의 대상 인스턴스 강등: 기존 Cloud SQL 인스턴스로의 표준 마이그레이션의 경우 Database Migration Service는 독립형 인스턴스를 소스 데이터베이스의 외부 복제본으로 구성하기 위해 강등합니다.
    • 인스턴스를 강등해도 PostgreSQL 엔진이 읽기 전용 모드로 전환되지 않지만 복제 충돌을 방지하려면 테이블 마이그레이션 시 쓰기 작업을 피해야 합니다.
    • 인스턴스를 강등하면 자동 백업 및 PITR(point-in-time recovery)이 정지되고 승격될 때까지 Cloud SQL 읽기 복제본을 추가할 수 없습니다.
    • Google Cloud 콘솔에서 마이그레이션 작업을 만들 때 대상 인스턴스 ID를 입력하거나 gcloud database-migration migration-jobs demote-destination를 실행하여 강등을 확인해야 합니다.
    • 빠른 시작 마이그레이션은 PostgreSQL pgnative 논리 복제를 사용하며 대상 인스턴스 강등을 요구하거나 수행하지 않습니다.
  • 기존 대상 인스턴스에는 대상 인스턴스를 만들 때 자동으로 설정되는 기본 시스템 데이터베이스만 포함될 수 있습니다. 사용자 데이터가 포함된 기존 대상 인스턴스로의 이전은 지원되지 않습니다.

    기존 대상 인스턴스의 추가 데이터로 인해 문제가 발생하는 경우 대상 인스턴스의 데이터베이스를 지우고 마이그레이션 작업을 다시 시도합니다. 기존 대상 인스턴스에서 추가 데이터 삭제를 참조하세요.

  • 대상 인스턴스당 하나의 마이그레이션 작업만 구성할 수 있습니다.
  • 독립형 Cloud SQL 인스턴스로만 마이그레이션할 수 있습니다. 외부 서버 복제본으로의 마이그레이션은 지원되지 않습니다.
  • 인스턴스를 승격한 후에는 point-in-time recovery를 사용 설정해야 합니다.
  • 인스턴스에 맞춤설정된 백업 설정(예: 커스텀 백업 위치)이 있으면 승격 후 백업 설정을 다시 복원해야 합니다. 승격 프로세스가 진행되는 동안 Cloud SQL에서 백업 설정을 기본값으로 재설정합니다.
  • Terraform 사용자: Database Migration Service는 대상 인스턴스의 백업 및 복구 설정을 수정합니다. 이로 인해 대상 인스턴스 설정이 프로비저닝에 사용되는 Terraform 구성과 다를 수 있습니다. 이 문제가 발생하면 문제 진단의 안내를 참고하세요.

할당량

  • 어느 시점에든지 최대 2,000개의 연결 프로필과 1,000개의 마이그레이션 작업이 존재할 수 있습니다. 공간을 더 확보하려면 사용하지 않는 마이그레이션 작업과 연결 프로필을 삭제하세요.

데이터 덤프 동시 로드 고려사항

마이그레이션 작업을 만들 때 병렬 구독 수를 늘려 초기 데이터 덤프 및 지속적인 변경 데이터 캡처(CDC) 복제를 가속화할 수 있습니다. 더 높은 데이터 덤프 동시 로드 설정을 사용하면 소스 데이터베이스와 대상 Cloud SQL 인스턴스 모두에서 연결 및 리소스 사용률이 증가합니다.

  • 최대 동시 로드를 사용하기 전에 소스 데이터베이스에 충분한 CPU, 메모리, I/O 여유 공간이 있는지 확인하세요.
  • 조정된 데이터 덤프 동시 로드를 사용하는 경우 소스 데이터베이스에서 max_replication_slots, max_wal_senders, max_worker_processes에 더 높은 값을 구성해야 합니다. 자세한 매개변수 계산은 소스 데이터베이스 구성을 참조하세요.
  • pglogical 확장 프로그램은 초기 전체 덤프 중에 테이블 수준에서 데이터를 복제합니다. 파티션을 나누지 않은 단일 테이블은 하나의 구독에 할당되며 여러 병렬 구독 또는 작업자 스레드로 분할되지 않습니다.
  • pglogical 확장 프로그램은 개별 리프 파티션을 별도의 테이블로 복제하고 초기 전체 덤프 중에 병렬 구독에 여러 리프 파티션을 배포할 수 있습니다. 하나의 큰 리프 파티션은 여러 구독에 분할될 수 없으며 단일 스레드로 복사됩니다.
  • Database Migration Service는 테이블을 크기별로 정렬하고 가장 큰 구독의 총 데이터 볼륨을 줄일 수 있는 경우에만 동시 구독을 추가합니다. Database Migration Service는 최적 동시 로드의 경우 데이터베이스당 최대 2개의 구독을 만들고 최대 동시 로드의 경우 데이터베이스당 최대 4개의 구독을 만듭니다. 이는 모든 데이터베이스에서 10개의 구독으로 구성된 대상 풀에서 데이터베이스 크기에 따라 분할됩니다(마이그레이션된 데이터베이스당 최소 1개의 구독). 데이터베이스의 테이블 크기가 크게 치우친 경우 Database Migration Service는 최대 한도보다 적은 구독을 할당합니다. 예를 들어 데이터베이스에 1TB 테이블 1개와 작은 테이블 여러 개가 포함된 경우 Database Migration Service는 1TB 테이블을 하나의 구독으로 격리하고 작은 테이블을 두 번째 구독으로 그룹화합니다. 이 시나리오에서 Database Migration Service는 동시 로드가 최대로 설정된 경우에도 구독을 2개만 사용합니다.
  • Database Migration Service는 기본 키가 없는 테이블을 전용 삽입 전용 복제 세트(병렬 구독당 하나)에 할당합니다. 기본 키가 없는 여러 테이블을 병렬 구독에 분산할 수 있지만 초기 전체 덤프 중에 각 개별 테이블은 한 구독 내에서 단일 테이블 스트림으로 복사되며 여러 병렬 스레드에 분할되지 않습니다.

메이저 버전 업그레이드 중 PostgreSQL 확장 프로그램 버전 호환성

더 높은 PostgreSQL 메이저 버전으로 마이그레이션하면 Database Migration Service는 대상 PostgreSQL 메이저 버전의 기본 확장 프로그램 버전을 설치하는 pg_restore 유틸리티를 사용합니다. pg_restore 유틸리티의 정확한 확장 프로그램 버전을 지정할 수 없습니다.

소스 데이터베이스에서 대상 PostgreSQL 메이저 버전에 설치된 기본 버전과 스키마가 호환되지 않는 확장 프로그램 버전을 사용하는 경우 스키마 불일치 또는 내부 오류로 인해 마이그레이션이 실패할 수 있습니다.

이전 실패를 방지하려면 스키마 호환성을 확인하세요. 마이그레이션하기 전에 소스 데이터베이스의 확장 프로그램을 대상 PostgreSQL 메이저 버전과 호환되는 버전으로 업그레이드하세요.