다음을 통해 공유


Azure Database for PostgreSQL의 높은 메모리 사용률 - 유연한 서버

적용 대상: Azure Database for PostgreSQL - 유연한 서버

이 문서에서는 Azure Database for PostgreSQL 유연한 서버에서 메모리 사용률을 높일 수 있는 일반적인 시나리오와 근본 원인을 소개합니다.

이 문서에서는 다음에 대해 알아봅니다.

  • 근본 원인을 완화하기 위한 권장 사항을 식별하고 가져오는 문제 해결 가이드에 대해 설명합니다.
  • 높은 메모리 사용률을 식별하는 도구입니다.
  • 높은 메모리 및 수정 작업에 대한 이유입니다.

문제 해결 가이드

Azure Database for PostgreSQL 유연한 서버 포털에서 사용할 수 있는 기능 문제 해결 가이드를 사용하여 높은 메모리 시나리오 완화에 대한 가능한 근본 원인 및 권장 사항을 찾을 수 있습니다. 이를 사용하도록 문제 해결 가이드를 설정하는 방법은 설정 문제 해결 가이드를 따르세요.

높은 메모리 사용률을 식별하는 도구

높은 메모리 사용률을 식별하려면 다음 도구를 고려하세요.

Azure Metrics

Azure Metrics를 사용하여 사용 중인 메모리의 백분율을 명확한 날짜 및 시간 프레임에 대해 모니터링합니다.
사전 모니터링을 위해 Metrics에 경고를 구성합니다. 단계별 지침은 Azure Metrics를 참조하세요.

쿼리 저장소

쿼리 데이터 저장소는 쿼리 및 런타임 통계의 기록을 자동으로 캡처하고 검토를 위해 보존합니다.

쿼리 저장소는 대기 이벤트 정보와 쿼리 런타임 통계의 상관 관계를 파악할 수 있습니다. 쿼리 저장소를 사용하여 관심 있는 기간 동안 메모리 사용량이 높은 쿼리를 식별합니다.

쿼리 저장소 설정 및 사용에 대한 자세한 내용은 쿼리 저장소를 검토하세요.

이유 및 수정 작업

높은 메모리 사용률을 해결하기 위해 다음 이유와 수정 작업을 고려하세요.

서버 매개 변수

다음 서버 매개 변수는 메모리 사용량에 영향을 미치며 검토해야 합니다.

Work_Mem

work_mem 매개 변수는 임시 디스크 파일에 쓰기 전에 내부 정렬 작업과 해시 테이블에서 사용할 메모리 양을 지정합니다. 쿼리 단위가 아니라 정렬 및 해시 작업의 수에 따라 설정됩니다.

워크로드에 간단한 조인과 최소한의 정렬 작업이 포함된 단기 실행 쿼리가 많은 경우 work_mem을 낮게 유지하는 것이 좋습니다. 복잡한 조인 및 정렬이 포함된 활성 쿼리가 몇 가지 있는 경우 work_mem에 더 높은 값을 설정하는 것이 좋습니다.

work_mem의 값을 올바르게 가져오는 것은 어렵습니다. 높은 메모리 사용률 또는 메모리 부족 문제가 발견되면 work_mem을 줄이는 것이 좋습니다.

work_memwork_mem = Total RAM / Max_Connections / 16

work_mem의 기본값은 4MB입니다. Azure Portal의 매개 변수 페이지를 통해 서버 수준을 포함하여 여러 수준에서 work_mem 값을 설정할 수 있습니다.

좋은 전략은 사용량이 많은 시간 동안 메모리 사용량을 모니터링하는 것입니다.

이 시간 동안 디스크 정렬이 발생하고 사용되지 않은 메모리가 많으면 사용 가능한 메모리와 사용된 메모리 사이의 균형이 잘 맞을 때까지 work_mem을 점진적으로 늘립니다. 마찬가지로 메모리 사용량이 많아 보이면 work_mem을 줄입니다.

Maintenance_Work_Mem

maintenance_work_mem은 진공, 인덱스 또는 외래 키 추가와 같은 유지 관리 작업을 위한 것입니다. 이 시나리오에서 메모리 사용량은 세션당 입니다.

예를 들어 세 명의 자동 진공 작업자가 실행되는 시나리오를 고려해 보세요.

maintenance_work_mem이 1GB로 설정된 경우 결합된 모든 세션은 3GB의 메모리를 사용합니다.

진공/인덱스 만들기/외부 키 추가를 위해 실행 중인 여러 세션과 함께 높은 maintenance_work_mem 값은 메모리 사용률을 높일 수 있습니다. Azure Database for PostgreSQL 유연한 서버의 maintenance_work_mem 서버 매개 변수에 허용되는 최대값은 2GB입니다.

공유 버퍼

shared_buffers 매개 변수는 데이터 캐싱을 위해 서버에 할당되는 메모리 양을 결정합니다. 공유 버퍼의 목적은 디스크 I/O를 줄이는 것입니다.

공유 버퍼에 대한 적절한 설정은 RAM의 25%입니다. RAM의 40%보다 큰 값을 설정하는 것은 대부분의 일반적인 워크로드에 권장되지 않습니다.

최대 연결

Azure Database for PostgreSQL 유연한 서버 데이터베이스의 모든 신규 및 유휴 연결은 최대 2MB의 메모리를 사용합니다. 연결을 모니터링하는 한 가지 방법은 다음과 같은 쿼리를 사용하는 것입니다.

select count(*) from pg_stat_activity;

데이터베이스에 대한 연결 수가 많으면 메모리 사용량도 증가합니다.

데이터베이스 연결이 많은 상황에서는 PgBouncer와 같은 연결 풀러를 사용하는 것이 좋습니다.

PgBouncer에 대한 자세한 내용은 다음을 검토하세요.

연결 풀러

모범 사례

Azure Database for PostgreSQL 유연한 서버는 기본 제공 연결 풀링 솔루션으로 PgBouncer를 제공합니다. 자세한 내용은 PgBouncer를 참조하세요.

분석 설명

쿼리 저장소에서 메모리를 많이 사용하는 쿼리가 식별되면 EXPLAINEXPLAIN ANALYZE를 사용하여 더 자세히 조사하고 조정합니다.

EXPLAIN 명령에 대한 자세한 내용은 플랜 설명을 참조하세요.