Aurora PostgreSQL 논리적 복제를 위한 라이트-스루 캐시 및 논리적 슬롯 모니터링 - Amazon Aurora

Aurora PostgreSQL 논리적 복제를 위한 라이트-스루 캐시 및 논리적 슬롯 모니터링

논리적 복제 라이트-스루 캐시를 모니터링하고 논리적 슬롯을 관리하여 Aurora PostgreSQL DB 클러스터의 성능을 개선합니다. 아래에서 라이트-스루 캐시 및 논리적 슬롯에 대한 자세한 내용을 찾아보세요.

Aurora PostgreSQL 논리적 복제 라이트-스루 캐시 모니터링

기본적으로 Aurora PostgreSQL 버전 14.5, 13.8, 12.12 및 11.17 이상에서는 라이트-스루 캐시를 사용하여 논리적 복제의 성능을 개선합니다. 라이트-스루 캐시가 없으면 Aurora PostgreSQL은 기본 PostgreSQL 논리적 복제 프로세스를 구현할 때 Aurora 스토리지 계층을 사용합니다. 이를 위해 WAL 데이터를 스토리지에 쓴 다음 스토리지에서 데이터를 다시 읽어 디코딩하고 대상(가입자)에 전송(복제)합니다. 그 결과 Aurora PostgreSQL DB 클러스터의 논리적 복제 중에 병목 현상이 발생할 수 있습니다.

라이트-스루 캐시를 사용하면 Aurora 스토리지 계층을 사용할 필요가 줄어듭니다. Aurora PostgreSQL은 Aurora 스토리지 계층에서 항상 쓰고 읽는 대신, 버퍼를 사용하여 논리적 WAL 스트림을 캐시하므로 항상 디스크에서 가져오는 대신 복제 프로세스 중에 사용할 수 있습니다. 이 버퍼는 논리적 복제에 사용하는 PostgreSQL 기본 캐시이며, Aurora PostgreSQL DB 클러스터 파라미터에서 rds.logical_wal_cache로 식별됩니다. 기본적으로 이 캐시는 Aurora PostgreSQL DB 클러스터의 버퍼 캐시 설정(shared_buffers)의 1/32를 사용하지만, 64kB보다 작거나 한 WAL 세그먼트 크기(일반적으로 16MB)보다 크지는 않습니다

(라이트-스루 캐시를 지원하는 버전의) Aurora PostgreSQL DB 클러스터에서 논리적 복제를 사용하는 경우, 캐시 적중률을 모니터링하여 사용 사례에 맞게 작동하는지 확인할 수 있습니다. 이렇게 하려면 다음 예제와 같이 psql을 사용하여 Aurora PostgreSQL DB 클러스터의 쓰기 인스턴스에 연결한 다음 Aurora 함수(aurora_stat_logical_wal_cache)를 사용해야 합니다.

SELECT * FROM aurora_stat_logical_wal_cache();

이 함수는 다음과 같은 출력을 반환합니다.

name | active_pid | cache_hit | cache_miss | blks_read | hit_rate | last_reset_timestamp -----------+------------+-----------+------------+-----------+----------+-------------- test_slot1 | 79183 | 24 | 0 | 24 | 100.00% | 2022-08-05 17:39... test_slot2 | | 1 | 0 | 1 | 100.00% | 2022-08-05 17:34... (2 rows)

가독성을 위해 last_reset_timestamp 값을 줄였습니다. 이 함수에 대한 자세한 내용은 aurora_stat_logical_wal_cache 단원을 참조하세요.

Aurora PostgreSQL는 라이트-스루 캐시를 모니터링하는 다음 두 가지 함수를 제공합니다.

자동으로 조정된 WAL 캐시 크기가 워크로드에 충분하지 않은 경우, 사용자 지정 DB 클러스터 파라미터 그룹의 파라미터를 수정하여 rds.logical_wal_cache 값을 수동으로 변경할 수 있습니다. 32kB 미만의 모든 양수 값은 32kB로 처리됩니다. wal_buffers에 대한 자세한 내용은 PostgreSQL 설명서에서 Write Ahead Log를 참조하세요.

Aurora PostgreSQL 논리적 슬롯 관리

스트리밍 활동이 pg_replication_origin_status 보기에 캡처됩니다. 이 보기의 내용을 보려면 다음과 같이 pg_show_replication_origin_status() 함수를 사용하면 됩니다.

SELECT * FROM pg_show_replication_origin_status();

다음 SQL 쿼리를 사용하여 논리적 슬롯 목록을 가져올 수 있습니다.

SELECT * FROM pg_replication_slots;

논리적 슬롯을 삭제하려면 다음 명령에서처럼 pg_drop_replication_slot를 슬롯 이름과 함께 사용합니다.

SELECT pg_drop_replication_slot('test_slot');