Aurora PostgreSQL에서 로깅되지 않은 테이블 작업 - Amazon Aurora

Aurora PostgreSQL에서 로깅되지 않은 테이블 작업

Amazon Aurora PostgreSQL은 라이터 인스턴스가 실패하거나 또는 장애 조치된 후에도 충돌이 방지되고 데이터 무결성을 유지하는 로깅되지 않은 테이블을 지원합니다. 표준 PostgreSQL에서는 로깅되지 않은 테이블이 쓰기 작업 중에 Write-Ahead Log(WAL)를 우회하여 쓰기 속도가 빨라집니다. 그러나 로깅되지 않은 테이블은 충돌이 방지되지 않으며 시스템 장애 또는 비정상 종료 후 데이터가 손실될 수 있으므로 내구성이 낮습니다. 이러한 로깅되지 않은 테이블은 충돌 또는 비정상 종료 후 자동으로 잘립니다. 콘텐츠와 인덱스도 대기 서버에 복제되지 않습니다.

반면 Aurora PostgreSQL은 분산 스토리지 아키텍처로 인해 로깅되지 않은 테이블을 다르게 처리합니다. 이는 Aurora 스토리지 시스템의 내구성이 기존 PostgreSQL WAL에 의존하지 않기 때문입니다. 그러나 표준 PostgreSQL에서 로깅되지 않은 테이블과 일반적으로 연관되는 성능 이점은 Aurora에서 그다지 중요하지 않을 수 있습니다. 이는 Aurora의 분산 스토리지 아키텍처로 인해 표준 PostgreSQL에 사용되는 로컬 스토리지에 비해 추가 오버헤드가 발생할 수 있기 때문입니다.

Aurora PostgreSQL에서 로깅되지 않은 테이블을 사용하는 경우 다음을 고려하세요.

  • 로깅되지 않은 테이블은 Aurora DB 클러스터의 라이터 노드에서만 액세스할 수 있습니다.

  • 리더 노드는 라이터 상태로 승격된 경우에만 로깅되지 않은 테이블에 액세스할 수 있습니다.

  • 리더 노드에서 로깅되지 않은 테이블에 액세스하려고 하면 다음 오류가 발생합니다.

    cannot access temporary or unlogged relations during recovery.

로깅되지 않은 테이블 만들기

Aurora PostgreSQL에서 로깅되지 않은 테이블을 만들려면 CREATE TABLE 문에 UNLOGGED 키워드를 추가합니다.

CREATE UNLOGGED TABLE staging_sales_data ( transaction_id bigint, customer_id bigint, product_id bigint, transaction_date date, amount NUMERIC );

로깅되지 않은 테이블 및 논리적 복제

논리적 복제는 WAL을 사용하여 변경 사항을 캡처하고 전송하기 때문에 로깅되지 않은 테이블은 일반적으로 논리적 복제에 포함되지 않습니다. 기본적으로 로깅되지 않은 테이블에 대한 변경 사항은 WAL 로깅되지 않고 복제 스트림에서 제외되므로 논리적 복제가 필요한 사용 사례에 적합하지 않습니다. 그러나 Aurora PostgreSQL은 이 동작을 제어할 수 있는 rds.logically_replicate_unlogged_tables라는 파라미터를 제공합니다.

  • rds.logically_replicate_unlogged_tables가 0(꺼짐)으로 설정되면 로깅되지 않은 테이블이 논리적 복제에서 제외됩니다.

  • rds.logically_replicate_unlogged_tables가 1(켜짐)로 설정되면 로깅되지 않은 테이블이 논리적 복제에 포함됩니다.

참고

Aurora PostgreSQL에서 rds.logically_replicate_unlogged_tables 파라미터는 기본적으로 버전 14 이하에서는 1(켜짐), 버전 15 이상에서는 0(꺼짐)으로 설정됩니다.