RDS for PostgreSQL 메모리
RDS for PostgreSQL 메모리는 공유 메모리와 로컬 메모리로 구분됩니다.
RDS for PostgreSQL의 공유 메모리
RDS for PostgreSQL은 인스턴스가 시작될 때 공유 메모리를 할당합니다. 공유 메모리는 여러 하위 영역으로 나뉩니다. 다음에서 가장 중요한 사항에 대한 설명을 찾을 수 있습니다.
공유 버퍼
공유 버퍼 풀은 애플리케이션 연결에서 사용 중이거나 사용 중인 모든 페이지를 보관하는 RDS for PostgreSQL 메모리 영역입니다. 페이지는 디스크 블록의 메모리 버전입니다. 공유 버퍼 풀은 디스크에서 읽은 데이터 블록을 캐시합니다. 이 풀은 디스크에서 데이터를 다시 읽어야 할 필요성을 줄여 데이터베이스가 더 효율적으로 연산하게 합니다.
모든 테이블과 인덱스는 고정된 크기의 페이지 배열로 저장됩니다. 각 블록에는 행에 해당하는 여러 튜플이 포함되어 있습니다. 튜플은 모든 페이지에 저장할 수 있습니다.
공유 버퍼 풀에는 유한 메모리가 있습니다. 새 요청에 메모리에 없는 페이지가 필요하고 메모리가 더 이상 존재하지 않는 경우 RDS for PostgreSQL은 요청을 수용하기 위해 자주 사용되지 않는 페이지를 삭제합니다. 제거 정책은 클럭 스윕 알고리즘에 의해 구현됩니다.
shared_buffers
파라미터는 서버가 데이터 캐싱에 전념하는 메모리 양을 결정합니다.
미리 쓰기 로그(WAL) 버퍼
미리 쓰기 로그(WAL) 버퍼는 RDS for PostgreSQL이 나중에 영구 스토리지에 쓰는 트랜잭션 데이터를 보유합니다. WAL 메커니즘을 사용하여 RDS for PostgreSQL이 다음을 수행할 수 있습니다.
-
장애 발생 후 데이터 복구
-
디스크에 빈번한 쓰기를 방지하여 디스크 I/O 감소
클라이언트가 데이터를 변경하면 RDS for PostgreSQL이 변경 사항을 WAL 버퍼에 기록합니다. 클라이언트가 COMMIT
을 발행하면 WAL 라이터 프로세스는 트랜잭션 데이터를 WAL 파일에 씁니다.
wal_level
파라미터는 WAL에 기록되는 정보의 양을 결정합니다.
RDS for PostgreSQL의 로컬 메모리
모든 백엔드 프로세스는 쿼리 처리를 위해 로컬 메모리를 할당합니다.
작업 메모리 영역
작업 메모리 영역은 정렬 및 해시를 수행하는 쿼리에 대한 임시 데이터를 보유합니다. 예를 들어, 다음을 포함하는 쿼리 ORDER BY
절은 정렬을 수행합니다. 쿼리는 해시 조인 및 집계에서 해시 테이블을 사용합니다.
work_mem
파라미터는 임시 디스크 파일에 쓰기 전에 내부 정렬 작업 및 해시 테이블에서 사용할 메모리 양입니다. 기본값은 4MB입니다. 여러 세션을 동시에 실행할 수 있으며 각 세션은 유지 관리 작업을 병렬로 실행할 수 있습니다. 이러한 이유로 사용되는 총 작업 메모리는 work_mem
설정의 배수가 될 수 있습니다.
유지 관리 작업 메모리 영역
유지 관리 작업 메모리 영역은 유지 관리 작업을 위해 데이터를 캐시합니다. 이러한 작업에는 베큠, 인덱스 생성 및 외래 키 추가가 포함됩니다.
maintenance_work_mem
파라미터는 유지 관리 작업에서 사용할 최대 메모리 양을 지정합니다. 기본값은 64MB입니다. 데이터베이스 세션은 한 번에 하나의 유지 관리 작업만 실행할 수 있습니다.
임시 버퍼 영역
임시 버퍼 영역에서는 각 데이터베이스 세션에 대한 임시 테이블을 캐시합니다.
각 세션은 사용자가 지정한 한도까지 필요에 따라 임시 버퍼를 할당합니다. 세션이 끝나면 서버는 버퍼를 지웁니다.
temp_buffers
파라미터는 각 세션에서 사용하는 임시 버퍼의 최대 수를 설정합니다. 세션 내에서 임시 테이블을 처음 사용하기 전에 temp_buffers
값을 변경할 수 있습니다.