AlloyDB Omni는 메모리 관리에 적응형 알고리즘을 사용합니다.
AlloyDB Omni를 시작할 때 공유 버퍼의 상한을 결정할 수 있습니다. 상한을 설정하지 않으면 AlloyDB Omni에서 공유 버퍼 백업 크기를 시스템 메모리의 80% 로 자동 설정합니다. 공유 버퍼의 초기 백업 크기는 상한과 다를 수 있습니다.
AlloyDB Omni는 메모리 상태를 지속적으로 모니터링하고 데이터를 캐시할 때 최적의 성능을 위해 공유 버퍼 백업 크기를 조정하는 지능형 메모리 작업자로 구성됩니다.
기본적으로 shared_buffers
매개변수는 shared buffers
캐시 크기의 상한을 시스템 메모리의 80% 로 설정하는 특수 값인 0
로 설정됩니다. AlloyDB Omni는 shared_buffers
상한의 10% 에서 시작합니다. shared_buffers
가 맞춤 값으로 재정의되면 AlloyDB Omni는 이 값을 shared_buffers
크기의 상한으로 적용하고 지정된 맞춤 크기로 시작합니다.
맞춤 크기를 지정하려면 postgresql.conf
구성 파일을 수정합니다. 예를 들어 다음 중 하나를 사용하여 shared_buffers
를 1GB
로 설정할 수 있습니다.
docker run --name CONTAINER_NAME -e INITDB_ARGS="-c shared_buffers=1GB" $image
docker run --name CONTAINER_NAME $image -c shared_buffers=1GB
CONTAINER_NAME
을 AlloyDB Omni 컨테이너를 설치할 때 할당한 이름으로 바꿉니다.
쿼리 성능 최적화
shared_buffers
매개변수의 기본값은 일반적인 시나리오에 적합합니다.
하지만 최적의 성능을 위해 값을 조정할 수 있습니다.
공유 버퍼 상한을 추론하기 위해 기본값 shared_buffers
을 사용하는 경우 cgroup memory.max
값을 사용하여 계산에 영향을 미칩니다.
열 기반 엔진 메모리
동적 shared_buffers
는 열 기반 엔진 메모리와 무관합니다. 열 엔진이 사용 설정된 경우 동적 shared_buffers
크기는 시스템 또는 cgroup에서 사용할 수 있는 총 메모리의 80% 에서 열 엔진에서 사용하는 메모리 양을 뺀 값으로 파생할 수 있습니다.
Huge Page
대용량 페이지는 데이터베이스 성능을 개선합니다. AlloyDB Omni는 가능하면 대용량 페이지를 명시적으로 관리하고, 그렇지 않으면 운영체제의 Transparent Huge Pages (THP) 기능을 사용합니다. 두 개의 대용량 페이지 유형이 모두 지원되지 않는 경우 AlloyDB Omni은 4K 페이지로 대체되고 대용량 페이지를 설정하는 구체적인 안내와 함께 Docker 컨테이너 로그 docker logs $container_name
에 경고를 출력합니다. 컨테이너를 시작하는 방법은 AlloyDB Omni 시작을 참고하세요.
경고는 다음과 같이 표시됩니다.
HINT: Please either execute the all-in-one setup script:
docker run --rm --privileged $image setup-host
OR manually execute:
echo within_size | sudo tee /sys/kernel/mm/transparent_hugepage/shmem_enabled
sudo sysctl -w vm.nr_overcommit_hugepages=1048576
런타임 시 자동 메모리 관리
AlloyDB Omni는 시스템 부하를 지속적으로 모니터링하고 성능을 개선하기 위해 메모리 사용량을 조정합니다. 구체적으로 다음과 같은 문제가 발생할 수 있습니다.
- 동적
shared_buffers
크기 변경 - AlloyDB Omni는 시스템 메모리 소비량이 적을 때 동적
shared_buffers
크기를 늘리고 시스템 메모리 소비량이 많을 때 크기를 줄입니다. 동적shared_buffers
크기를 모니터링하려면 다음을 사용하세요.CREATE EXTENSION IF NOT EXISTS g_memory; SELECT g_dynamic_shared_size();
- 시스템의 메모리가 매우 부족할 때 PostgreSQL 연결 종료
- AlloyDB Omni는 시스템의 메모리가 매우 부족하다고 감지하면 부하가 적절한 수준으로 떨어질 때까지 메모리를 가장 많이 사용하는 PostgreSQL 연결을 삭제하려고 시도합니다. 이러한 이벤트가 발생하면 AlloyDB Omni는 docker 컨테이너 로그에 다음을 로깅합니다.
WARNING: Sending SIGTERM to pid=xxx NSpid=xxx (VA size = xxxMB) (RSS size = xxxMB)