다음을 통해 공유


리소스 사용량/메모리

autovacuum_work_mem

attribute
범주 리소스 사용량/메모리
설명 각 자동 진공 작업자 프로세스에서 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value -1
허용된 값 -1-2097151
매개 변수 형식 dynamic
설명서 autovacuum_work_mem

dynamic_shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 사용되는 동적 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value posix
허용된 값 posix
매개 변수 형식 읽기 전용
설명서 dynamic_shared_memory_type

hash_mem_multiplier

attribute
범주 리소스 사용량/메모리
설명 해시 테이블에 사용할 work_mem의 배수입니다.
데이터 형식 numeric
Default value 2
허용된 값 2
매개 변수 형식 읽기 전용
설명서 hash_mem_multiplier

huge_pages

attribute
범주 리소스 사용량/메모리
설명 거대한 메모리 페이지를 사용하거나 사용하지 않도록 설정합니다. 이 설정은 vCore가 4개 미만인 서버에는 적용되지 않습니다.
데이터 형식 열거형
Default value try
허용된 값 on,off,try
매개 변수 형식 static
설명서 huge_pages

설명

대용량 페이지는 큰 블록에서 메모리를 관리할 수 있는 기능입니다. 표준 4KB 페이지와 달리 일반적으로 최대 2MB의 블록을 관리할 수 있습니다.

대용량 페이지를 사용하면 CPU를 효과적으로 오프로드하는 성능면에서 이점을 제공합니다.

  • TLB(변환 색인 버퍼) 누락이 줄어드는 등 메모리 관리 작업과 관련된 오버헤드가 감소합니다.
  • 메모리 관리에 필요한 시간을 단축합니다.

특히 PostgreSQL에서는 공유 메모리 영역에 대해서만 대용량 페이지를 사용할 수 있습니다. 공유 메모리 영역의 상당 부분이 공유 버퍼에 할당됩니다.

또 다른 장점은 대용량 페이지가 공유 메모리 영역을 디스크로 교환하지 못하게 하여 성능을 더욱 안정화한다는 것입니다.

권장 사항

  • 메모리 리소스가 많은 서버의 경우 대용량 페이지를 사용하지 않도록 설정하지 마십시오. 대용량 페이지를 사용하지 않도록 설정하면 성능이 저하됩니다.
  • 대용량 페이지를 지원하지 않지만 지원하는 서버로 스케일 업할 것으로 예상되는 작은 서버로 시작하는 경우 원활한 전환과 최적의 성능을 위해 huge_pages 설정을 TRY 상태로 유지하세요.

Azure 관련 메모

vCores가 4개 이상인 서버의 경우 기본 운영 체제에서 거대한 페이지가 자동으로 할당됩니다. vCores가 4개 미만인 서버에서는 기능을 사용할 수 없습니다. shared_buffers에 대한 변경 내용을 포함하여 공유 메모리 설정이 변경되면 대용량 페이지 수가 자동으로 조정됩니다.

huge_page_size

attribute
범주 리소스 사용량/메모리
설명 요청해야 하는 거대한 페이지의 크기입니다.
데이터 형식 정수
Default value 0
허용된 값 0
매개 변수 형식 읽기 전용
설명서 huge_page_size

logical_decoding_work_mem

attribute
범주 리소스 사용량/메모리
설명 논리 디코딩에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 65536
허용된 값 65536
매개 변수 형식 읽기 전용
설명서 logical_decoding_work_mem

maintenance_work_mem

attribute
범주 리소스 사용량/메모리
설명 VACUUM, 인덱스 만들기와 같은 유지 관리 작업에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 1024-2097151
매개 변수 형식 dynamic
설명서 maintenance_work_mem

설명

maintenance_work_mem은(는) PostgreSQL의 구성 매개 변수입니다. VACUUM, CREATE INDEXALTER TABLE 같은 유지 관리 작업에 할당된 메모리 양을 제어합니다. 쿼리 작업에 대한 메모리 할당에 영향을 주는 work_mem과 달리, 데이터베이스 구조를 유지 관리하고 최적화하는 작업을 위해 maintenance_work_mem이 예약되어 있습니다.

핵심 내용

  • 진공 메모리 한도: maintenance_work_mem을(를) 늘려 데드 튜플 정리 속도를 높이고 싶다면 VACUUM에는 데드 튜플 식별자를 수집하기 위한 기본 제공 제한이 있다는 점에 유의하세요. 이 프로세스에는 최대 1GB의 메모리만 사용할 수 있습니다.
  • 자동 진공을 위한 메모리 분리: autovacuum_work_mem 설정을 사용하여 자동 진공 작업에서 사용하는 메모리를 독립적으로 제어할 수 있습니다. 이 설정은 maintenance_work_mem의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

max_prepared_transactions

attribute
범주 리소스 사용량/메모리
설명 동시에 준비된 최대 트랜잭션 수를 설정합니다. 복제본 서버를 실행하는 경우 이 매개 변수를 기본 서버의 값 이상으로 설정해야 합니다.
데이터 형식 정수
Default value 0
허용된 값 0-262143
매개 변수 형식 static
설명서 max_prepared_transactions

max_stack_depth

attribute
범주 리소스 사용량/메모리
설명 최대 스택 깊이(킬로바이트)를 설정합니다.
데이터 형식 정수
Default value 2048
허용된 값 2048
매개 변수 형식 읽기 전용
설명서 max_stack_depth

min_dynamic_shared_memory

attribute
범주 리소스 사용량/메모리
설명 시작 시 예약된 동적 공유 메모리 양입니다.
데이터 형식 정수
Default value 0
허용된 값 0
매개 변수 형식 읽기 전용
설명서 min_dynamic_shared_memory

shared_buffers

attribute
범주 리소스 사용량/메모리
설명 서버에서 사용하는 공유 메모리 버퍼 수를 설정합니다. 단위는 8kb입니다. 허용되는 값은 사용 가능한 메모리의 10% - 75% 범위 내에 있습니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 16-1073741823
매개 변수 형식 static
설명서 shared_buffers

설명

shared_buffers 구성 매개 변수는 데이터를 버퍼링하기 위해 PostgreSQL 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

데이터가 필요한 경우 데이터베이스 프로세스는 먼저 공유 버퍼를 확인합니다. 필요한 데이터가 있으면 빠르게 검색되므로 시간이 더 많이 걸리는 디스크 읽기가 무시됩니다. shared_buffers는 데이터베이스 프로세스와 디스크 간의 중개자 역할을 함으로써 필요한 I/O 작업의 수를 효과적으로 줄입니다.

Azure 관련 메모

shared_buffers 설정은 vCore가 계층에서 증가함에 따라 선형으로(대략) 확장됩니다.

shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 기본 공유 메모리 영역에 사용되는 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value mmap
허용된 값 mmap
매개 변수 형식 읽기 전용
설명서 shared_memory_type

temp_buffers

attribute
범주 리소스 사용량/메모리
설명 각 데이터베이스 세션에서 사용하는 최대 임시 버퍼 수를 설정합니다.
데이터 형식 정수
Default value 1024
허용된 값 100-1073741823
매개 변수 형식 dynamic
설명서 temp_buffers

work_mem

attribute
범주 리소스 사용량/메모리
설명 임시 디스크 파일에 쓰기 전에 내부 정렬 작업 및 해시 테이블에서 사용할 메모리 양을 설정합니다.
데이터 형식 정수
Default value 4096
허용된 값 4096-2097151
매개 변수 형식 dynamic
설명서 work_mem

설명

PostgreSQL의 work_mem 매개 변수는 각 데이터베이스 세션의 프라이빗 메모리 영역 내에서 특정 내부 작업에 할당된 메모리 양을 제어합니다. 이러한 작업의 예로는 정렬 및 해시가 있습니다.

공유 메모리 영역에 있는 공유 버퍼와 달리, work_mem은 세션별 또는 쿼리별 프라이빗 메모리 공간에 할당됩니다. 적절한 work_mem 크기를 설정하면 이러한 작업의 효율성을 크게 향상시켜 임시 데이터를 디스크에 쓸 필요가 줄어듭니다.

핵심 내용

  • 프라이빗 연결 메모리: work_mem은(는) 각 데이터베이스 세션에서 사용하는 프라이빗 메모리의 일부입니다. 이 메모리는 shared_buffers이(가) 사용하는 공유 메모리 영역과 다릅니다.
  • 쿼리별 사용: 모든 세션 또는 쿼리에서 work_mem을 사용하는 것은 아닙니다. SELECT 1 같은 간단한 쿼리에는 work_mem이(가) 필요하지 않습니다. 그러나 정렬 또는 해시와 같은 작업과 관련된 복잡한 쿼리는 하나 또는 여러 개의 work_mem 청크를 사용할 수 있습니다.
  • 병렬 작업: 여러 병렬 백 엔드에 걸쳐 있는 쿼리의 경우 각 백 엔드가 하나 또는 여러 work_mem 청크를 사용할 수 있습니다.

모니터링 및 조정 work_mem

주로 정렬 또는 해시 작업과 관련된 쿼리 실행 시간이 느린 경우 시스템의 성능을 지속적으로 모니터링하고 필요에 따라 work_mem을(를) 조정해야 합니다. Azure Portal에서 사용할 수 있는 도구를 사용하여 성능을 모니터링할 수 있는 방법은 다음과 같습니다.

  • 쿼리 성능 인사이트: 임시 파일별 상위 쿼리 탭에서 임시 파일을 생성하는 쿼리를 식별합니다. 이 상황은 work_mem을(를) 늘려야 할 가능성이 있음을 시사합니다.
  • 문제 해결 가이드: 문제 해결 가이드의 높은 임시 파일 탭을 사용하여 문제가 있는 쿼리를 식별합니다.
세분화된 조정

work_mem 매개 변수를 관리하는 동안 전역 값을 설정하지 말고, 세분화된 조정 방법을 채택하는 것이 더 효율적입니다. 이 방법을 사용하면 프로세스 및 사용자의 특정 요구 사항에 따라 신중하게 메모리를 할당할 수 있습니다. 또한 메모리 부족 문제가 발생할 위험을 최소화합니다. 시작 방법은 다음과 같습니다.

  • 사용자 수준: 특정 사용자가 주로 메모리 집약적인 집계 또는 보고 작업에 관련된 경우 해당 사용자의 work_mem 값을 사용자 지정하는 것이 좋습니다. ALTER ROLE 명령을 사용하여 사용자 작업의 성능을 향상시킵니다.

  • 함수/프로시저 수준: 특정 함수 또는 프로시저가 상당한 임시 파일을 생성할 때 특정 함수 또는 프로시저 수준에서 work_mem 값을 늘리면 도움이 될 수 있습니다. ALTER FUNCTION 또는 ALTER PROCEDURE 명령을 사용하여 이러한 작업에 더 많은 메모리를 특별히 할당하여 수행할 수 있습니다.

  • 데이터베이스 수준: 특정 데이터베이스만 많은 수의 임시 파일을 생성하는 경우 데이터베이스 수준에서 work_mem을(를) 변경합니다.

  • 전역 수준: 시스템을 분석한 결과, 대부분의 쿼리가 작은 임시 파일을 생성하고 소수의 쿼리만 큰 파일을 만드는 것으로 확인되면 전역적으로 work_mem 값을 늘리는 것이 좋습니다. 이 작업을 통해 대부분의 쿼리가 메모리에서 처리되므로 디스크 기반 작업을 방지하고 효율성을 향상시킬 수 있습니다. 그러나 항상 주의해야 하며 서버의 메모리 사용률을 모니터링하여 증가된 work_mem 값을 처리할 수 있는지 확인합니다.

작업 정렬을 위해 최소 work_mem 값 결정

특정 쿼리, 특히 정렬 프로세스 중에 임시 디스크 파일을 생성하는 최소 work_mem 값을 찾으려면 먼저 쿼리 실행 중에 생성된 임시 파일 크기를 고려합니다. 예를 들어 쿼리에서 20MB 임시 파일을 생성하는 경우:

  1. psql 또는 선호하는 PostgreSQL 클라이언트를 사용하여 데이터베이스에 연결합니다.
  2. 메모리에서 처리할 때 추가 헤더를 고려하도록 초기 work_mem 값을 20MB보다 약간 높게 설정합니다. SET work_mem TO '25MB'과(와) 같은 명령을 사용합니다.
  3. 동일한 세션에서 문제가 있는 쿼리에 대해 EXPLAIN ANALYZE를 실행합니다.
  4. "Sort Method: quicksort Memory: xkB"의 출력을 검토합니다. "external merge Disk: xkB"을(를) 나타내는 경우 work_mem 값을 증분 방식으로 높이고 "quicksort Memory"이(가) 나타날 때까지 다시 테스트합니다. "quicksort Memory"의 모양은 쿼리가 현재 메모리에서 작동하고 있음을 보여줍니다.
  5. 이 메서드를 통해 값을 확인한 후에는 운영 요구 사항에 맞게 전역적으로 또는 보다 세부적인 수준에서 적용할 수 있습니다(앞에서 설명한 대로).

autovacuum_work_mem

attribute
범주 리소스 사용량/메모리
설명 각 자동 진공 작업자 프로세스에서 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value -1
허용된 값 -1-2097151
매개 변수 형식 dynamic
설명서 autovacuum_work_mem

dynamic_shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 사용되는 동적 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value posix
허용된 값 posix
매개 변수 형식 읽기 전용
설명서 dynamic_shared_memory_type

hash_mem_multiplier

attribute
범주 리소스 사용량/메모리
설명 해시 테이블에 사용할 work_mem의 배수입니다.
데이터 형식 numeric
Default value 2
허용된 값 2
매개 변수 형식 읽기 전용
설명서 hash_mem_multiplier

huge_pages

attribute
범주 리소스 사용량/메모리
설명 거대한 메모리 페이지를 사용하거나 사용하지 않도록 설정합니다. 이 설정은 vCore가 4개 미만인 서버에는 적용되지 않습니다.
데이터 형식 열거형
Default value try
허용된 값 on,off,try
매개 변수 형식 static
설명서 huge_pages

설명

대용량 페이지는 큰 블록에서 메모리를 관리할 수 있는 기능입니다. 표준 4KB 페이지와 달리 일반적으로 최대 2MB의 블록을 관리할 수 있습니다.

대용량 페이지를 사용하면 CPU를 효과적으로 오프로드하는 성능면에서 이점을 제공합니다.

  • TLB(변환 색인 버퍼) 누락이 줄어드는 등 메모리 관리 작업과 관련된 오버헤드가 감소합니다.
  • 메모리 관리에 필요한 시간을 단축합니다.

특히 PostgreSQL에서는 공유 메모리 영역에 대해서만 대용량 페이지를 사용할 수 있습니다. 공유 메모리 영역의 상당 부분이 공유 버퍼에 할당됩니다.

또 다른 장점은 대용량 페이지가 공유 메모리 영역을 디스크로 교환하지 못하게 하여 성능을 더욱 안정화한다는 것입니다.

권장 사항

  • 메모리 리소스가 많은 서버의 경우 대용량 페이지를 사용하지 않도록 설정하지 마십시오. 대용량 페이지를 사용하지 않도록 설정하면 성능이 저하됩니다.
  • 대용량 페이지를 지원하지 않지만 지원하는 서버로 스케일 업할 것으로 예상되는 작은 서버로 시작하는 경우 원활한 전환과 최적의 성능을 위해 huge_pages 설정을 TRY 상태로 유지하세요.

Azure 관련 메모

vCores가 4개 이상인 서버의 경우 기본 운영 체제에서 거대한 페이지가 자동으로 할당됩니다. vCores가 4개 미만인 서버에서는 기능을 사용할 수 없습니다. shared_buffers에 대한 변경 내용을 포함하여 공유 메모리 설정이 변경되면 대용량 페이지 수가 자동으로 조정됩니다.

huge_page_size

attribute
범주 리소스 사용량/메모리
설명 요청해야 하는 거대한 페이지의 크기입니다.
데이터 형식 정수
Default value 0
허용된 값 0
매개 변수 형식 읽기 전용
설명서 huge_page_size

logical_decoding_work_mem

attribute
범주 리소스 사용량/메모리
설명 논리 디코딩에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 65536
허용된 값 65536
매개 변수 형식 읽기 전용
설명서 logical_decoding_work_mem

maintenance_work_mem

attribute
범주 리소스 사용량/메모리
설명 VACUUM, 인덱스 만들기와 같은 유지 관리 작업에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 1024-2097151
매개 변수 형식 dynamic
설명서 maintenance_work_mem

설명

maintenance_work_mem은(는) PostgreSQL의 구성 매개 변수입니다. VACUUM, CREATE INDEXALTER TABLE 같은 유지 관리 작업에 할당된 메모리 양을 제어합니다. 쿼리 작업에 대한 메모리 할당에 영향을 주는 work_mem과 달리, 데이터베이스 구조를 유지 관리하고 최적화하는 작업을 위해 maintenance_work_mem이 예약되어 있습니다.

핵심 내용

  • 진공 메모리 한도: maintenance_work_mem을(를) 늘려 데드 튜플 정리 속도를 높이고 싶다면 VACUUM에는 데드 튜플 식별자를 수집하기 위한 기본 제공 제한이 있다는 점에 유의하세요. 이 프로세스에는 최대 1GB의 메모리만 사용할 수 있습니다.
  • 자동 진공을 위한 메모리 분리: autovacuum_work_mem 설정을 사용하여 자동 진공 작업에서 사용하는 메모리를 독립적으로 제어할 수 있습니다. 이 설정은 maintenance_work_mem의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

max_prepared_transactions

attribute
범주 리소스 사용량/메모리
설명 동시에 준비된 최대 트랜잭션 수를 설정합니다. 복제본 서버를 실행하는 경우 이 매개 변수를 기본 서버의 값 이상으로 설정해야 합니다.
데이터 형식 정수
Default value 0
허용된 값 0-262143
매개 변수 형식 static
설명서 max_prepared_transactions

max_stack_depth

attribute
범주 리소스 사용량/메모리
설명 최대 스택 깊이(킬로바이트)를 설정합니다.
데이터 형식 정수
Default value 2048
허용된 값 2048
매개 변수 형식 읽기 전용
설명서 max_stack_depth

min_dynamic_shared_memory

attribute
범주 리소스 사용량/메모리
설명 시작 시 예약된 동적 공유 메모리 양입니다.
데이터 형식 정수
Default value 0
허용된 값 0
매개 변수 형식 읽기 전용
설명서 min_dynamic_shared_memory

shared_buffers

attribute
범주 리소스 사용량/메모리
설명 서버에서 사용하는 공유 메모리 버퍼 수를 설정합니다. 단위는 8kb입니다. 허용되는 값은 사용 가능한 메모리의 10% - 75% 범위 내에 있습니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 16-1073741823
매개 변수 형식 static
설명서 shared_buffers

설명

shared_buffers 구성 매개 변수는 데이터를 버퍼링하기 위해 PostgreSQL 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

데이터가 필요한 경우 데이터베이스 프로세스는 먼저 공유 버퍼를 확인합니다. 필요한 데이터가 있으면 빠르게 검색되므로 시간이 더 많이 걸리는 디스크 읽기가 무시됩니다. shared_buffers는 데이터베이스 프로세스와 디스크 간의 중개자 역할을 함으로써 필요한 I/O 작업의 수를 효과적으로 줄입니다.

Azure 관련 메모

shared_buffers 설정은 vCore가 계층에서 증가함에 따라 선형으로(대략) 확장됩니다.

shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 기본 공유 메모리 영역에 사용되는 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value mmap
허용된 값 mmap
매개 변수 형식 읽기 전용
설명서 shared_memory_type

temp_buffers

attribute
범주 리소스 사용량/메모리
설명 각 데이터베이스 세션에서 사용하는 최대 임시 버퍼 수를 설정합니다.
데이터 형식 정수
Default value 1024
허용된 값 100-1073741823
매개 변수 형식 dynamic
설명서 temp_buffers

work_mem

attribute
범주 리소스 사용량/메모리
설명 임시 디스크 파일에 쓰기 전에 내부 정렬 작업 및 해시 테이블에서 사용할 메모리 양을 설정합니다.
데이터 형식 정수
Default value 4096
허용된 값 4096-2097151
매개 변수 형식 dynamic
설명서 work_mem

설명

PostgreSQL의 work_mem 매개 변수는 각 데이터베이스 세션의 프라이빗 메모리 영역 내에서 특정 내부 작업에 할당된 메모리 양을 제어합니다. 이러한 작업의 예로는 정렬 및 해시가 있습니다.

공유 메모리 영역에 있는 공유 버퍼와 달리, work_mem은 세션별 또는 쿼리별 프라이빗 메모리 공간에 할당됩니다. 적절한 work_mem 크기를 설정하면 이러한 작업의 효율성을 크게 향상시켜 임시 데이터를 디스크에 쓸 필요가 줄어듭니다.

핵심 내용

  • 프라이빗 연결 메모리: work_mem은(는) 각 데이터베이스 세션에서 사용하는 프라이빗 메모리의 일부입니다. 이 메모리는 shared_buffers이(가) 사용하는 공유 메모리 영역과 다릅니다.
  • 쿼리별 사용: 모든 세션 또는 쿼리에서 work_mem을 사용하는 것은 아닙니다. SELECT 1 같은 간단한 쿼리에는 work_mem이(가) 필요하지 않습니다. 그러나 정렬 또는 해시와 같은 작업과 관련된 복잡한 쿼리는 하나 또는 여러 개의 work_mem 청크를 사용할 수 있습니다.
  • 병렬 작업: 여러 병렬 백 엔드에 걸쳐 있는 쿼리의 경우 각 백 엔드가 하나 또는 여러 work_mem 청크를 사용할 수 있습니다.

모니터링 및 조정 work_mem

주로 정렬 또는 해시 작업과 관련된 쿼리 실행 시간이 느린 경우 시스템의 성능을 지속적으로 모니터링하고 필요에 따라 work_mem을(를) 조정해야 합니다. Azure Portal에서 사용할 수 있는 도구를 사용하여 성능을 모니터링할 수 있는 방법은 다음과 같습니다.

  • 쿼리 성능 인사이트: 임시 파일별 상위 쿼리 탭에서 임시 파일을 생성하는 쿼리를 식별합니다. 이 상황은 work_mem을(를) 늘려야 할 가능성이 있음을 시사합니다.
  • 문제 해결 가이드: 문제 해결 가이드의 높은 임시 파일 탭을 사용하여 문제가 있는 쿼리를 식별합니다.
세분화된 조정

work_mem 매개 변수를 관리하는 동안 전역 값을 설정하지 말고, 세분화된 조정 방법을 채택하는 것이 더 효율적입니다. 이 방법을 사용하면 프로세스 및 사용자의 특정 요구 사항에 따라 신중하게 메모리를 할당할 수 있습니다. 또한 메모리 부족 문제가 발생할 위험을 최소화합니다. 시작 방법은 다음과 같습니다.

  • 사용자 수준: 특정 사용자가 주로 메모리 집약적인 집계 또는 보고 작업에 관련된 경우 해당 사용자의 work_mem 값을 사용자 지정하는 것이 좋습니다. ALTER ROLE 명령을 사용하여 사용자 작업의 성능을 향상시킵니다.

  • 함수/프로시저 수준: 특정 함수 또는 프로시저가 상당한 임시 파일을 생성할 때 특정 함수 또는 프로시저 수준에서 work_mem 값을 늘리면 도움이 될 수 있습니다. ALTER FUNCTION 또는 ALTER PROCEDURE 명령을 사용하여 이러한 작업에 더 많은 메모리를 특별히 할당하여 수행할 수 있습니다.

  • 데이터베이스 수준: 특정 데이터베이스만 많은 수의 임시 파일을 생성하는 경우 데이터베이스 수준에서 work_mem을(를) 변경합니다.

  • 전역 수준: 시스템을 분석한 결과, 대부분의 쿼리가 작은 임시 파일을 생성하고 소수의 쿼리만 큰 파일을 만드는 것으로 확인되면 전역적으로 work_mem 값을 늘리는 것이 좋습니다. 이 작업을 통해 대부분의 쿼리가 메모리에서 처리되므로 디스크 기반 작업을 방지하고 효율성을 향상시킬 수 있습니다. 그러나 항상 주의해야 하며 서버의 메모리 사용률을 모니터링하여 증가된 work_mem 값을 처리할 수 있는지 확인합니다.

작업 정렬을 위해 최소 work_mem 값 결정

특정 쿼리, 특히 정렬 프로세스 중에 임시 디스크 파일을 생성하는 최소 work_mem 값을 찾으려면 먼저 쿼리 실행 중에 생성된 임시 파일 크기를 고려합니다. 예를 들어 쿼리에서 20MB 임시 파일을 생성하는 경우:

  1. psql 또는 선호하는 PostgreSQL 클라이언트를 사용하여 데이터베이스에 연결합니다.
  2. 메모리에서 처리할 때 추가 헤더를 고려하도록 초기 work_mem 값을 20MB보다 약간 높게 설정합니다. SET work_mem TO '25MB'과(와) 같은 명령을 사용합니다.
  3. 동일한 세션에서 문제가 있는 쿼리에 대해 EXPLAIN ANALYZE를 실행합니다.
  4. "Sort Method: quicksort Memory: xkB"의 출력을 검토합니다. "external merge Disk: xkB"을(를) 나타내는 경우 work_mem 값을 증분 방식으로 높이고 "quicksort Memory"이(가) 나타날 때까지 다시 테스트합니다. "quicksort Memory"의 모양은 쿼리가 현재 메모리에서 작동하고 있음을 보여줍니다.
  5. 이 메서드를 통해 값을 확인한 후에는 운영 요구 사항에 맞게 전역적으로 또는 보다 세부적인 수준에서 적용할 수 있습니다(앞에서 설명한 대로).

autovacuum_work_mem

attribute
범주 리소스 사용량/메모리
설명 각 자동 진공 작업자 프로세스에서 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value -1
허용된 값 -1-2097151
매개 변수 형식 dynamic
설명서 autovacuum_work_mem

dynamic_shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 사용되는 동적 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value posix
허용된 값 posix
매개 변수 형식 읽기 전용
설명서 dynamic_shared_memory_type

hash_mem_multiplier

attribute
범주 리소스 사용량/메모리
설명 해시 테이블에 사용할 work_mem의 배수입니다.
데이터 형식 numeric
Default value 1
허용된 값 1
매개 변수 형식 읽기 전용
설명서 hash_mem_multiplier

huge_pages

attribute
범주 리소스 사용량/메모리
설명 거대한 메모리 페이지를 사용하거나 사용하지 않도록 설정합니다. 이 설정은 vCore가 4개 미만인 서버에는 적용되지 않습니다.
데이터 형식 열거형
Default value try
허용된 값 on,off,try
매개 변수 형식 static
설명서 huge_pages

설명

대용량 페이지는 큰 블록에서 메모리를 관리할 수 있는 기능입니다. 표준 4KB 페이지와 달리 일반적으로 최대 2MB의 블록을 관리할 수 있습니다.

대용량 페이지를 사용하면 CPU를 효과적으로 오프로드하는 성능면에서 이점을 제공합니다.

  • TLB(변환 색인 버퍼) 누락이 줄어드는 등 메모리 관리 작업과 관련된 오버헤드가 감소합니다.
  • 메모리 관리에 필요한 시간을 단축합니다.

특히 PostgreSQL에서는 공유 메모리 영역에 대해서만 대용량 페이지를 사용할 수 있습니다. 공유 메모리 영역의 상당 부분이 공유 버퍼에 할당됩니다.

또 다른 장점은 대용량 페이지가 공유 메모리 영역을 디스크로 교환하지 못하게 하여 성능을 더욱 안정화한다는 것입니다.

권장 사항

  • 메모리 리소스가 많은 서버의 경우 대용량 페이지를 사용하지 않도록 설정하지 마십시오. 대용량 페이지를 사용하지 않도록 설정하면 성능이 저하됩니다.
  • 대용량 페이지를 지원하지 않지만 지원하는 서버로 스케일 업할 것으로 예상되는 작은 서버로 시작하는 경우 원활한 전환과 최적의 성능을 위해 huge_pages 설정을 TRY 상태로 유지하세요.

Azure 관련 메모

vCores가 4개 이상인 서버의 경우 기본 운영 체제에서 거대한 페이지가 자동으로 할당됩니다. vCores가 4개 미만인 서버에서는 기능을 사용할 수 없습니다. shared_buffers에 대한 변경 내용을 포함하여 공유 메모리 설정이 변경되면 대용량 페이지 수가 자동으로 조정됩니다.

huge_page_size

attribute
범주 리소스 사용량/메모리
설명 요청해야 하는 거대한 페이지의 크기입니다.
데이터 형식 정수
Default value 0
허용된 값 0
매개 변수 형식 읽기 전용
설명서 huge_page_size

logical_decoding_work_mem

attribute
범주 리소스 사용량/메모리
설명 논리 디코딩에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 65536
허용된 값 65536
매개 변수 형식 읽기 전용
설명서 logical_decoding_work_mem

maintenance_work_mem

attribute
범주 리소스 사용량/메모리
설명 VACUUM, 인덱스 만들기와 같은 유지 관리 작업에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 1024-2097151
매개 변수 형식 dynamic
설명서 maintenance_work_mem

설명

maintenance_work_mem은(는) PostgreSQL의 구성 매개 변수입니다. VACUUM, CREATE INDEXALTER TABLE 같은 유지 관리 작업에 할당된 메모리 양을 제어합니다. 쿼리 작업에 대한 메모리 할당에 영향을 주는 work_mem과 달리, 데이터베이스 구조를 유지 관리하고 최적화하는 작업을 위해 maintenance_work_mem이 예약되어 있습니다.

핵심 내용

  • 진공 메모리 한도: maintenance_work_mem을(를) 늘려 데드 튜플 정리 속도를 높이고 싶다면 VACUUM에는 데드 튜플 식별자를 수집하기 위한 기본 제공 제한이 있다는 점에 유의하세요. 이 프로세스에는 최대 1GB의 메모리만 사용할 수 있습니다.
  • 자동 진공을 위한 메모리 분리: autovacuum_work_mem 설정을 사용하여 자동 진공 작업에서 사용하는 메모리를 독립적으로 제어할 수 있습니다. 이 설정은 maintenance_work_mem의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

max_prepared_transactions

attribute
범주 리소스 사용량/메모리
설명 동시에 준비된 최대 트랜잭션 수를 설정합니다. 복제본 서버를 실행하는 경우 이 매개 변수를 기본 서버의 값 이상으로 설정해야 합니다.
데이터 형식 정수
Default value 0
허용된 값 0-262143
매개 변수 형식 static
설명서 max_prepared_transactions

max_stack_depth

attribute
범주 리소스 사용량/메모리
설명 최대 스택 깊이(킬로바이트)를 설정합니다.
데이터 형식 정수
Default value 2048
허용된 값 2048
매개 변수 형식 읽기 전용
설명서 max_stack_depth

min_dynamic_shared_memory

attribute
범주 리소스 사용량/메모리
설명 시작 시 예약된 동적 공유 메모리 양입니다.
데이터 형식 정수
Default value 0
허용된 값 0
매개 변수 형식 읽기 전용
설명서 min_dynamic_shared_memory

shared_buffers

attribute
범주 리소스 사용량/메모리
설명 서버에서 사용하는 공유 메모리 버퍼 수를 설정합니다. 단위는 8kb입니다. 허용되는 값은 사용 가능한 메모리의 10% - 75% 범위 내에 있습니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 16-1073741823
매개 변수 형식 static
설명서 shared_buffers

설명

shared_buffers 구성 매개 변수는 데이터를 버퍼링하기 위해 PostgreSQL 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

데이터가 필요한 경우 데이터베이스 프로세스는 먼저 공유 버퍼를 확인합니다. 필요한 데이터가 있으면 빠르게 검색되므로 시간이 더 많이 걸리는 디스크 읽기가 무시됩니다. shared_buffers는 데이터베이스 프로세스와 디스크 간의 중개자 역할을 함으로써 필요한 I/O 작업의 수를 효과적으로 줄입니다.

Azure 관련 메모

shared_buffers 설정은 vCore가 계층에서 증가함에 따라 선형으로(대략) 확장됩니다.

shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 기본 공유 메모리 영역에 사용되는 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value mmap
허용된 값 mmap
매개 변수 형식 읽기 전용
설명서 shared_memory_type

temp_buffers

attribute
범주 리소스 사용량/메모리
설명 각 데이터베이스 세션에서 사용하는 최대 임시 버퍼 수를 설정합니다.
데이터 형식 정수
Default value 1024
허용된 값 100-1073741823
매개 변수 형식 dynamic
설명서 temp_buffers

work_mem

attribute
범주 리소스 사용량/메모리
설명 임시 디스크 파일에 쓰기 전에 내부 정렬 작업 및 해시 테이블에서 사용할 메모리 양을 설정합니다.
데이터 형식 정수
Default value 4096
허용된 값 4096-2097151
매개 변수 형식 dynamic
설명서 work_mem

설명

PostgreSQL의 work_mem 매개 변수는 각 데이터베이스 세션의 프라이빗 메모리 영역 내에서 특정 내부 작업에 할당된 메모리 양을 제어합니다. 이러한 작업의 예로는 정렬 및 해시가 있습니다.

공유 메모리 영역에 있는 공유 버퍼와 달리, work_mem은 세션별 또는 쿼리별 프라이빗 메모리 공간에 할당됩니다. 적절한 work_mem 크기를 설정하면 이러한 작업의 효율성을 크게 향상시켜 임시 데이터를 디스크에 쓸 필요가 줄어듭니다.

핵심 내용

  • 프라이빗 연결 메모리: work_mem은(는) 각 데이터베이스 세션에서 사용하는 프라이빗 메모리의 일부입니다. 이 메모리는 shared_buffers이(가) 사용하는 공유 메모리 영역과 다릅니다.
  • 쿼리별 사용: 모든 세션 또는 쿼리에서 work_mem을 사용하는 것은 아닙니다. SELECT 1 같은 간단한 쿼리에는 work_mem이(가) 필요하지 않습니다. 그러나 정렬 또는 해시와 같은 작업과 관련된 복잡한 쿼리는 하나 또는 여러 개의 work_mem 청크를 사용할 수 있습니다.
  • 병렬 작업: 여러 병렬 백 엔드에 걸쳐 있는 쿼리의 경우 각 백 엔드가 하나 또는 여러 work_mem 청크를 사용할 수 있습니다.

모니터링 및 조정 work_mem

주로 정렬 또는 해시 작업과 관련된 쿼리 실행 시간이 느린 경우 시스템의 성능을 지속적으로 모니터링하고 필요에 따라 work_mem을(를) 조정해야 합니다. Azure Portal에서 사용할 수 있는 도구를 사용하여 성능을 모니터링할 수 있는 방법은 다음과 같습니다.

  • 쿼리 성능 인사이트: 임시 파일별 상위 쿼리 탭에서 임시 파일을 생성하는 쿼리를 식별합니다. 이 상황은 work_mem을(를) 늘려야 할 가능성이 있음을 시사합니다.
  • 문제 해결 가이드: 문제 해결 가이드의 높은 임시 파일 탭을 사용하여 문제가 있는 쿼리를 식별합니다.
세분화된 조정

work_mem 매개 변수를 관리하는 동안 전역 값을 설정하지 말고, 세분화된 조정 방법을 채택하는 것이 더 효율적입니다. 이 방법을 사용하면 프로세스 및 사용자의 특정 요구 사항에 따라 신중하게 메모리를 할당할 수 있습니다. 또한 메모리 부족 문제가 발생할 위험을 최소화합니다. 시작 방법은 다음과 같습니다.

  • 사용자 수준: 특정 사용자가 주로 메모리 집약적인 집계 또는 보고 작업에 관련된 경우 해당 사용자의 work_mem 값을 사용자 지정하는 것이 좋습니다. ALTER ROLE 명령을 사용하여 사용자 작업의 성능을 향상시킵니다.

  • 함수/프로시저 수준: 특정 함수 또는 프로시저가 상당한 임시 파일을 생성할 때 특정 함수 또는 프로시저 수준에서 work_mem 값을 늘리면 도움이 될 수 있습니다. ALTER FUNCTION 또는 ALTER PROCEDURE 명령을 사용하여 이러한 작업에 더 많은 메모리를 특별히 할당하여 수행할 수 있습니다.

  • 데이터베이스 수준: 특정 데이터베이스만 많은 수의 임시 파일을 생성하는 경우 데이터베이스 수준에서 work_mem을(를) 변경합니다.

  • 전역 수준: 시스템을 분석한 결과, 대부분의 쿼리가 작은 임시 파일을 생성하고 소수의 쿼리만 큰 파일을 만드는 것으로 확인되면 전역적으로 work_mem 값을 늘리는 것이 좋습니다. 이 작업을 통해 대부분의 쿼리가 메모리에서 처리되므로 디스크 기반 작업을 방지하고 효율성을 향상시킬 수 있습니다. 그러나 항상 주의해야 하며 서버의 메모리 사용률을 모니터링하여 증가된 work_mem 값을 처리할 수 있는지 확인합니다.

작업 정렬을 위해 최소 work_mem 값 결정

특정 쿼리, 특히 정렬 프로세스 중에 임시 디스크 파일을 생성하는 최소 work_mem 값을 찾으려면 먼저 쿼리 실행 중에 생성된 임시 파일 크기를 고려합니다. 예를 들어 쿼리에서 20MB 임시 파일을 생성하는 경우:

  1. psql 또는 선호하는 PostgreSQL 클라이언트를 사용하여 데이터베이스에 연결합니다.
  2. 메모리에서 처리할 때 추가 헤더를 고려하도록 초기 work_mem 값을 20MB보다 약간 높게 설정합니다. SET work_mem TO '25MB'과(와) 같은 명령을 사용합니다.
  3. 동일한 세션에서 문제가 있는 쿼리에 대해 EXPLAIN ANALYZE를 실행합니다.
  4. "Sort Method: quicksort Memory: xkB"의 출력을 검토합니다. "external merge Disk: xkB"을(를) 나타내는 경우 work_mem 값을 증분 방식으로 높이고 "quicksort Memory"이(가) 나타날 때까지 다시 테스트합니다. "quicksort Memory"의 모양은 쿼리가 현재 메모리에서 작동하고 있음을 보여줍니다.
  5. 이 메서드를 통해 값을 확인한 후에는 운영 요구 사항에 맞게 전역적으로 또는 보다 세부적인 수준에서 적용할 수 있습니다(앞에서 설명한 대로).

autovacuum_work_mem

attribute
범주 리소스 사용량/메모리
설명 각 자동 진공 작업자 프로세스에서 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value -1
허용된 값 -1-2097151
매개 변수 형식 dynamic
설명서 autovacuum_work_mem

dynamic_shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 사용되는 동적 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value posix
허용된 값 posix
매개 변수 형식 읽기 전용
설명서 dynamic_shared_memory_type

hash_mem_multiplier

attribute
범주 리소스 사용량/메모리
설명 해시 테이블에 사용할 work_mem의 배수입니다.
데이터 형식 numeric
Default value 1
허용된 값 1
매개 변수 형식 읽기 전용
설명서 hash_mem_multiplier

huge_pages

attribute
범주 리소스 사용량/메모리
설명 거대한 메모리 페이지를 사용하거나 사용하지 않도록 설정합니다. 이 설정은 vCore가 4개 미만인 서버에는 적용되지 않습니다.
데이터 형식 열거형
Default value try
허용된 값 on,off,try
매개 변수 형식 static
설명서 huge_pages

설명

대용량 페이지는 큰 블록에서 메모리를 관리할 수 있는 기능입니다. 표준 4KB 페이지와 달리 일반적으로 최대 2MB의 블록을 관리할 수 있습니다.

대용량 페이지를 사용하면 CPU를 효과적으로 오프로드하는 성능면에서 이점을 제공합니다.

  • TLB(변환 색인 버퍼) 누락이 줄어드는 등 메모리 관리 작업과 관련된 오버헤드가 감소합니다.
  • 메모리 관리에 필요한 시간을 단축합니다.

특히 PostgreSQL에서는 공유 메모리 영역에 대해서만 대용량 페이지를 사용할 수 있습니다. 공유 메모리 영역의 상당 부분이 공유 버퍼에 할당됩니다.

또 다른 장점은 대용량 페이지가 공유 메모리 영역을 디스크로 교환하지 못하게 하여 성능을 더욱 안정화한다는 것입니다.

권장 사항

  • 메모리 리소스가 많은 서버의 경우 대용량 페이지를 사용하지 않도록 설정하지 마십시오. 대용량 페이지를 사용하지 않도록 설정하면 성능이 저하됩니다.
  • 대용량 페이지를 지원하지 않지만 지원하는 서버로 스케일 업할 것으로 예상되는 작은 서버로 시작하는 경우 원활한 전환과 최적의 성능을 위해 huge_pages 설정을 TRY 상태로 유지하세요.

Azure 관련 메모

vCores가 4개 이상인 서버의 경우 기본 운영 체제에서 거대한 페이지가 자동으로 할당됩니다. vCores가 4개 미만인 서버에서는 기능을 사용할 수 없습니다. shared_buffers에 대한 변경 내용을 포함하여 공유 메모리 설정이 변경되면 대용량 페이지 수가 자동으로 조정됩니다.

logical_decoding_work_mem

attribute
범주 리소스 사용량/메모리
설명 논리 디코딩에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 65536
허용된 값 65536
매개 변수 형식 읽기 전용
설명서 logical_decoding_work_mem

maintenance_work_mem

attribute
범주 리소스 사용량/메모리
설명 VACUUM, 인덱스 만들기와 같은 유지 관리 작업에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 1024-2097151
매개 변수 형식 dynamic
설명서 maintenance_work_mem

설명

maintenance_work_mem은(는) PostgreSQL의 구성 매개 변수입니다. VACUUM, CREATE INDEXALTER TABLE 같은 유지 관리 작업에 할당된 메모리 양을 제어합니다. 쿼리 작업에 대한 메모리 할당에 영향을 주는 work_mem과 달리, 데이터베이스 구조를 유지 관리하고 최적화하는 작업을 위해 maintenance_work_mem이 예약되어 있습니다.

핵심 내용

  • 진공 메모리 한도: maintenance_work_mem을(를) 늘려 데드 튜플 정리 속도를 높이고 싶다면 VACUUM에는 데드 튜플 식별자를 수집하기 위한 기본 제공 제한이 있다는 점에 유의하세요. 이 프로세스에는 최대 1GB의 메모리만 사용할 수 있습니다.
  • 자동 진공을 위한 메모리 분리: autovacuum_work_mem 설정을 사용하여 자동 진공 작업에서 사용하는 메모리를 독립적으로 제어할 수 있습니다. 이 설정은 maintenance_work_mem의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

max_prepared_transactions

attribute
범주 리소스 사용량/메모리
설명 동시에 준비된 최대 트랜잭션 수를 설정합니다. 복제본 서버를 실행하는 경우 이 매개 변수를 기본 서버의 값 이상으로 설정해야 합니다.
데이터 형식 정수
Default value 0
허용된 값 0-262143
매개 변수 형식 static
설명서 max_prepared_transactions

max_stack_depth

attribute
범주 리소스 사용량/메모리
설명 최대 스택 깊이(킬로바이트)를 설정합니다.
데이터 형식 정수
Default value 2048
허용된 값 2048
매개 변수 형식 읽기 전용
설명서 max_stack_depth

shared_buffers

attribute
범주 리소스 사용량/메모리
설명 서버에서 사용하는 공유 메모리 버퍼 수를 설정합니다. 단위는 8kb입니다. 허용되는 값은 사용 가능한 메모리의 10% - 75% 범위 내에 있습니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 16-1073741823
매개 변수 형식 static
설명서 shared_buffers

설명

shared_buffers 구성 매개 변수는 데이터를 버퍼링하기 위해 PostgreSQL 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

데이터가 필요한 경우 데이터베이스 프로세스는 먼저 공유 버퍼를 확인합니다. 필요한 데이터가 있으면 빠르게 검색되므로 시간이 더 많이 걸리는 디스크 읽기가 무시됩니다. shared_buffers는 데이터베이스 프로세스와 디스크 간의 중개자 역할을 함으로써 필요한 I/O 작업의 수를 효과적으로 줄입니다.

Azure 관련 메모

shared_buffers 설정은 vCore가 계층에서 증가함에 따라 선형으로(대략) 확장됩니다.

shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 기본 공유 메모리 영역에 사용되는 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value mmap
허용된 값 mmap
매개 변수 형식 읽기 전용
설명서 shared_memory_type

temp_buffers

attribute
범주 리소스 사용량/메모리
설명 각 데이터베이스 세션에서 사용하는 최대 임시 버퍼 수를 설정합니다.
데이터 형식 정수
Default value 1024
허용된 값 100-1073741823
매개 변수 형식 dynamic
설명서 temp_buffers

work_mem

attribute
범주 리소스 사용량/메모리
설명 임시 디스크 파일에 쓰기 전에 내부 정렬 작업 및 해시 테이블에서 사용할 메모리 양을 설정합니다.
데이터 형식 정수
Default value 4096
허용된 값 4096-2097151
매개 변수 형식 dynamic
설명서 work_mem

설명

PostgreSQL의 work_mem 매개 변수는 각 데이터베이스 세션의 프라이빗 메모리 영역 내에서 특정 내부 작업에 할당된 메모리 양을 제어합니다. 이러한 작업의 예로는 정렬 및 해시가 있습니다.

공유 메모리 영역에 있는 공유 버퍼와 달리, work_mem은 세션별 또는 쿼리별 프라이빗 메모리 공간에 할당됩니다. 적절한 work_mem 크기를 설정하면 이러한 작업의 효율성을 크게 향상시켜 임시 데이터를 디스크에 쓸 필요가 줄어듭니다.

핵심 내용

  • 프라이빗 연결 메모리: work_mem은(는) 각 데이터베이스 세션에서 사용하는 프라이빗 메모리의 일부입니다. 이 메모리는 shared_buffers이(가) 사용하는 공유 메모리 영역과 다릅니다.
  • 쿼리별 사용: 모든 세션 또는 쿼리에서 work_mem을 사용하는 것은 아닙니다. SELECT 1 같은 간단한 쿼리에는 work_mem이(가) 필요하지 않습니다. 그러나 정렬 또는 해시와 같은 작업과 관련된 복잡한 쿼리는 하나 또는 여러 개의 work_mem 청크를 사용할 수 있습니다.
  • 병렬 작업: 여러 병렬 백 엔드에 걸쳐 있는 쿼리의 경우 각 백 엔드가 하나 또는 여러 work_mem 청크를 사용할 수 있습니다.

모니터링 및 조정 work_mem

주로 정렬 또는 해시 작업과 관련된 쿼리 실행 시간이 느린 경우 시스템의 성능을 지속적으로 모니터링하고 필요에 따라 work_mem을(를) 조정해야 합니다. Azure Portal에서 사용할 수 있는 도구를 사용하여 성능을 모니터링할 수 있는 방법은 다음과 같습니다.

  • 쿼리 성능 인사이트: 임시 파일별 상위 쿼리 탭에서 임시 파일을 생성하는 쿼리를 식별합니다. 이 상황은 work_mem을(를) 늘려야 할 가능성이 있음을 시사합니다.
  • 문제 해결 가이드: 문제 해결 가이드의 높은 임시 파일 탭을 사용하여 문제가 있는 쿼리를 식별합니다.
세분화된 조정

work_mem 매개 변수를 관리하는 동안 전역 값을 설정하지 말고, 세분화된 조정 방법을 채택하는 것이 더 효율적입니다. 이 방법을 사용하면 프로세스 및 사용자의 특정 요구 사항에 따라 신중하게 메모리를 할당할 수 있습니다. 또한 메모리 부족 문제가 발생할 위험을 최소화합니다. 시작 방법은 다음과 같습니다.

  • 사용자 수준: 특정 사용자가 주로 메모리 집약적인 집계 또는 보고 작업에 관련된 경우 해당 사용자의 work_mem 값을 사용자 지정하는 것이 좋습니다. ALTER ROLE 명령을 사용하여 사용자 작업의 성능을 향상시킵니다.

  • 함수/프로시저 수준: 특정 함수 또는 프로시저가 상당한 임시 파일을 생성할 때 특정 함수 또는 프로시저 수준에서 work_mem 값을 늘리면 도움이 될 수 있습니다. ALTER FUNCTION 또는 ALTER PROCEDURE 명령을 사용하여 이러한 작업에 더 많은 메모리를 특별히 할당하여 수행할 수 있습니다.

  • 데이터베이스 수준: 특정 데이터베이스만 많은 수의 임시 파일을 생성하는 경우 데이터베이스 수준에서 work_mem을(를) 변경합니다.

  • 전역 수준: 시스템을 분석한 결과, 대부분의 쿼리가 작은 임시 파일을 생성하고 소수의 쿼리만 큰 파일을 만드는 것으로 확인되면 전역적으로 work_mem 값을 늘리는 것이 좋습니다. 이 작업을 통해 대부분의 쿼리가 메모리에서 처리되므로 디스크 기반 작업을 방지하고 효율성을 향상시킬 수 있습니다. 그러나 항상 주의해야 하며 서버의 메모리 사용률을 모니터링하여 증가된 work_mem 값을 처리할 수 있는지 확인합니다.

작업 정렬을 위해 최소 work_mem 값 결정

특정 쿼리, 특히 정렬 프로세스 중에 임시 디스크 파일을 생성하는 최소 work_mem 값을 찾으려면 먼저 쿼리 실행 중에 생성된 임시 파일 크기를 고려합니다. 예를 들어 쿼리에서 20MB 임시 파일을 생성하는 경우:

  1. psql 또는 선호하는 PostgreSQL 클라이언트를 사용하여 데이터베이스에 연결합니다.
  2. 메모리에서 처리할 때 추가 헤더를 고려하도록 초기 work_mem 값을 20MB보다 약간 높게 설정합니다. SET work_mem TO '25MB'과(와) 같은 명령을 사용합니다.
  3. 동일한 세션에서 문제가 있는 쿼리에 대해 EXPLAIN ANALYZE를 실행합니다.
  4. "Sort Method: quicksort Memory: xkB"의 출력을 검토합니다. "external merge Disk: xkB"을(를) 나타내는 경우 work_mem 값을 증분 방식으로 높이고 "quicksort Memory"이(가) 나타날 때까지 다시 테스트합니다. "quicksort Memory"의 모양은 쿼리가 현재 메모리에서 작동하고 있음을 보여줍니다.
  5. 이 메서드를 통해 값을 확인한 후에는 운영 요구 사항에 맞게 전역적으로 또는 보다 세부적인 수준에서 적용할 수 있습니다(앞에서 설명한 대로).

autovacuum_work_mem

attribute
범주 리소스 사용량/메모리
설명 각 자동 진공 작업자 프로세스에서 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value -1
허용된 값 -1-2097151
매개 변수 형식 dynamic
설명서 autovacuum_work_mem

dynamic_shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 사용되는 동적 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value posix
허용된 값 posix
매개 변수 형식 읽기 전용
설명서 dynamic_shared_memory_type

hash_mem_multiplier

attribute
범주 리소스 사용량/메모리
설명 해시 테이블에 사용할 work_mem의 배수입니다.
데이터 형식 numeric
Default value 1
허용된 값 1
매개 변수 형식 읽기 전용
설명서 hash_mem_multiplier

huge_pages

attribute
범주 리소스 사용량/메모리
설명 거대한 메모리 페이지를 사용하거나 사용하지 않도록 설정합니다. 이 설정은 vCore가 4개 미만인 서버에는 적용되지 않습니다.
데이터 형식 열거형
Default value try
허용된 값 on,off,try
매개 변수 형식 static
설명서 huge_pages

설명

대용량 페이지는 큰 블록에서 메모리를 관리할 수 있는 기능입니다. 표준 4KB 페이지와 달리 일반적으로 최대 2MB의 블록을 관리할 수 있습니다.

대용량 페이지를 사용하면 CPU를 효과적으로 오프로드하는 성능면에서 이점을 제공합니다.

  • TLB(변환 색인 버퍼) 누락이 줄어드는 등 메모리 관리 작업과 관련된 오버헤드가 감소합니다.
  • 메모리 관리에 필요한 시간을 단축합니다.

특히 PostgreSQL에서는 공유 메모리 영역에 대해서만 대용량 페이지를 사용할 수 있습니다. 공유 메모리 영역의 상당 부분이 공유 버퍼에 할당됩니다.

또 다른 장점은 대용량 페이지가 공유 메모리 영역을 디스크로 교환하지 못하게 하여 성능을 더욱 안정화한다는 것입니다.

권장 사항

  • 메모리 리소스가 많은 서버의 경우 대용량 페이지를 사용하지 않도록 설정하지 마십시오. 대용량 페이지를 사용하지 않도록 설정하면 성능이 저하됩니다.
  • 대용량 페이지를 지원하지 않지만 지원하는 서버로 스케일 업할 것으로 예상되는 작은 서버로 시작하는 경우 원활한 전환과 최적의 성능을 위해 huge_pages 설정을 TRY 상태로 유지하세요.

Azure 관련 메모

vCores가 4개 이상인 서버의 경우 기본 운영 체제에서 거대한 페이지가 자동으로 할당됩니다. vCores가 4개 미만인 서버에서는 기능을 사용할 수 없습니다. shared_buffers에 대한 변경 내용을 포함하여 공유 메모리 설정이 변경되면 대용량 페이지 수가 자동으로 조정됩니다.

maintenance_work_mem

attribute
범주 리소스 사용량/메모리
설명 VACUUM, 인덱스 만들기와 같은 유지 관리 작업에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 1024-2097151
매개 변수 형식 dynamic
설명서 maintenance_work_mem

설명

maintenance_work_mem은(는) PostgreSQL의 구성 매개 변수입니다. VACUUM, CREATE INDEXALTER TABLE 같은 유지 관리 작업에 할당된 메모리 양을 제어합니다. 쿼리 작업에 대한 메모리 할당에 영향을 주는 work_mem과 달리, 데이터베이스 구조를 유지 관리하고 최적화하는 작업을 위해 maintenance_work_mem이 예약되어 있습니다.

핵심 내용

  • 진공 메모리 한도: maintenance_work_mem을(를) 늘려 데드 튜플 정리 속도를 높이고 싶다면 VACUUM에는 데드 튜플 식별자를 수집하기 위한 기본 제공 제한이 있다는 점에 유의하세요. 이 프로세스에는 최대 1GB의 메모리만 사용할 수 있습니다.
  • 자동 진공을 위한 메모리 분리: autovacuum_work_mem 설정을 사용하여 자동 진공 작업에서 사용하는 메모리를 독립적으로 제어할 수 있습니다. 이 설정은 maintenance_work_mem의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

max_prepared_transactions

attribute
범주 리소스 사용량/메모리
설명 동시에 준비된 최대 트랜잭션 수를 설정합니다. 복제본 서버를 실행하는 경우 이 매개 변수를 기본 서버의 값 이상으로 설정해야 합니다.
데이터 형식 정수
Default value 0
허용된 값 0-262143
매개 변수 형식 static
설명서 max_prepared_transactions

max_stack_depth

attribute
범주 리소스 사용량/메모리
설명 최대 스택 깊이(킬로바이트)를 설정합니다.
데이터 형식 정수
Default value 2048
허용된 값 2048
매개 변수 형식 읽기 전용
설명서 max_stack_depth

shared_buffers

attribute
범주 리소스 사용량/메모리
설명 서버에서 사용하는 공유 메모리 버퍼 수를 설정합니다. 단위는 8kb입니다. 허용되는 값은 사용 가능한 메모리의 10% - 75% 범위 내에 있습니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 16-1073741823
매개 변수 형식 static
설명서 shared_buffers

설명

shared_buffers 구성 매개 변수는 데이터를 버퍼링하기 위해 PostgreSQL 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

데이터가 필요한 경우 데이터베이스 프로세스는 먼저 공유 버퍼를 확인합니다. 필요한 데이터가 있으면 빠르게 검색되므로 시간이 더 많이 걸리는 디스크 읽기가 무시됩니다. shared_buffers는 데이터베이스 프로세스와 디스크 간의 중개자 역할을 함으로써 필요한 I/O 작업의 수를 효과적으로 줄입니다.

Azure 관련 메모

shared_buffers 설정은 vCore가 계층에서 증가함에 따라 선형으로(대략) 확장됩니다.

shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 기본 공유 메모리 영역에 사용되는 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value mmap
허용된 값 mmap
매개 변수 형식 읽기 전용
설명서 shared_memory_type

temp_buffers

attribute
범주 리소스 사용량/메모리
설명 각 데이터베이스 세션에서 사용하는 최대 임시 버퍼 수를 설정합니다.
데이터 형식 정수
Default value 1024
허용된 값 100-1073741823
매개 변수 형식 dynamic
설명서 temp_buffers

work_mem

attribute
범주 리소스 사용량/메모리
설명 임시 디스크 파일에 쓰기 전에 내부 정렬 작업 및 해시 테이블에서 사용할 메모리 양을 설정합니다.
데이터 형식 정수
Default value 4096
허용된 값 4096-2097151
매개 변수 형식 dynamic
설명서 work_mem

설명

PostgreSQL의 work_mem 매개 변수는 각 데이터베이스 세션의 프라이빗 메모리 영역 내에서 특정 내부 작업에 할당된 메모리 양을 제어합니다. 이러한 작업의 예로는 정렬 및 해시가 있습니다.

공유 메모리 영역에 있는 공유 버퍼와 달리, work_mem은 세션별 또는 쿼리별 프라이빗 메모리 공간에 할당됩니다. 적절한 work_mem 크기를 설정하면 이러한 작업의 효율성을 크게 향상시켜 임시 데이터를 디스크에 쓸 필요가 줄어듭니다.

핵심 내용

  • 프라이빗 연결 메모리: work_mem은(는) 각 데이터베이스 세션에서 사용하는 프라이빗 메모리의 일부입니다. 이 메모리는 shared_buffers이(가) 사용하는 공유 메모리 영역과 다릅니다.
  • 쿼리별 사용: 모든 세션 또는 쿼리에서 work_mem을 사용하는 것은 아닙니다. SELECT 1 같은 간단한 쿼리에는 work_mem이(가) 필요하지 않습니다. 그러나 정렬 또는 해시와 같은 작업과 관련된 복잡한 쿼리는 하나 또는 여러 개의 work_mem 청크를 사용할 수 있습니다.
  • 병렬 작업: 여러 병렬 백 엔드에 걸쳐 있는 쿼리의 경우 각 백 엔드가 하나 또는 여러 work_mem 청크를 사용할 수 있습니다.

모니터링 및 조정 work_mem

주로 정렬 또는 해시 작업과 관련된 쿼리 실행 시간이 느린 경우 시스템의 성능을 지속적으로 모니터링하고 필요에 따라 work_mem을(를) 조정해야 합니다. Azure Portal에서 사용할 수 있는 도구를 사용하여 성능을 모니터링할 수 있는 방법은 다음과 같습니다.

  • 쿼리 성능 인사이트: 임시 파일별 상위 쿼리 탭에서 임시 파일을 생성하는 쿼리를 식별합니다. 이 상황은 work_mem을(를) 늘려야 할 가능성이 있음을 시사합니다.
  • 문제 해결 가이드: 문제 해결 가이드의 높은 임시 파일 탭을 사용하여 문제가 있는 쿼리를 식별합니다.
세분화된 조정

work_mem 매개 변수를 관리하는 동안 전역 값을 설정하지 말고, 세분화된 조정 방법을 채택하는 것이 더 효율적입니다. 이 방법을 사용하면 프로세스 및 사용자의 특정 요구 사항에 따라 신중하게 메모리를 할당할 수 있습니다. 또한 메모리 부족 문제가 발생할 위험을 최소화합니다. 시작 방법은 다음과 같습니다.

  • 사용자 수준: 특정 사용자가 주로 메모리 집약적인 집계 또는 보고 작업에 관련된 경우 해당 사용자의 work_mem 값을 사용자 지정하는 것이 좋습니다. ALTER ROLE 명령을 사용하여 사용자 작업의 성능을 향상시킵니다.

  • 함수/프로시저 수준: 특정 함수 또는 프로시저가 상당한 임시 파일을 생성할 때 특정 함수 또는 프로시저 수준에서 work_mem 값을 늘리면 도움이 될 수 있습니다. ALTER FUNCTION 또는 ALTER PROCEDURE 명령을 사용하여 이러한 작업에 더 많은 메모리를 특별히 할당하여 수행할 수 있습니다.

  • 데이터베이스 수준: 특정 데이터베이스만 많은 수의 임시 파일을 생성하는 경우 데이터베이스 수준에서 work_mem을(를) 변경합니다.

  • 전역 수준: 시스템을 분석한 결과, 대부분의 쿼리가 작은 임시 파일을 생성하고 소수의 쿼리만 큰 파일을 만드는 것으로 확인되면 전역적으로 work_mem 값을 늘리는 것이 좋습니다. 이 작업을 통해 대부분의 쿼리가 메모리에서 처리되므로 디스크 기반 작업을 방지하고 효율성을 향상시킬 수 있습니다. 그러나 항상 주의해야 하며 서버의 메모리 사용률을 모니터링하여 증가된 work_mem 값을 처리할 수 있는지 확인합니다.

작업 정렬을 위해 최소 work_mem 값 결정

특정 쿼리, 특히 정렬 프로세스 중에 임시 디스크 파일을 생성하는 최소 work_mem 값을 찾으려면 먼저 쿼리 실행 중에 생성된 임시 파일 크기를 고려합니다. 예를 들어 쿼리에서 20MB 임시 파일을 생성하는 경우:

  1. psql 또는 선호하는 PostgreSQL 클라이언트를 사용하여 데이터베이스에 연결합니다.
  2. 메모리에서 처리할 때 추가 헤더를 고려하도록 초기 work_mem 값을 20MB보다 약간 높게 설정합니다. SET work_mem TO '25MB'과(와) 같은 명령을 사용합니다.
  3. 동일한 세션에서 문제가 있는 쿼리에 대해 EXPLAIN ANALYZE를 실행합니다.
  4. "Sort Method: quicksort Memory: xkB"의 출력을 검토합니다. "external merge Disk: xkB"을(를) 나타내는 경우 work_mem 값을 증분 방식으로 높이고 "quicksort Memory"이(가) 나타날 때까지 다시 테스트합니다. "quicksort Memory"의 모양은 쿼리가 현재 메모리에서 작동하고 있음을 보여줍니다.
  5. 이 메서드를 통해 값을 확인한 후에는 운영 요구 사항에 맞게 전역적으로 또는 보다 세부적인 수준에서 적용할 수 있습니다(앞에서 설명한 대로).

autovacuum_work_mem

attribute
범주 리소스 사용량/메모리
설명 각 자동 진공 작업자 프로세스에서 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value -1
허용된 값 -1-2097151
매개 변수 형식 dynamic
설명서 autovacuum_work_mem

dynamic_shared_memory_type

attribute
범주 리소스 사용량/메모리
설명 사용되는 동적 공유 메모리 구현을 선택합니다.
데이터 형식 열거형
Default value posix
허용된 값 posix
매개 변수 형식 읽기 전용
설명서 dynamic_shared_memory_type

huge_pages

attribute
범주 리소스 사용량/메모리
설명 거대한 메모리 페이지를 사용하거나 사용하지 않도록 설정합니다. 이 설정은 vCore가 4개 미만인 서버에는 적용되지 않습니다.
데이터 형식 열거형
Default value try
허용된 값 on,off,try
매개 변수 형식 static
설명서 huge_pages

설명

대용량 페이지는 큰 블록에서 메모리를 관리할 수 있는 기능입니다. 표준 4KB 페이지와 달리 일반적으로 최대 2MB의 블록을 관리할 수 있습니다.

대용량 페이지를 사용하면 CPU를 효과적으로 오프로드하는 성능면에서 이점을 제공합니다.

  • TLB(변환 색인 버퍼) 누락이 줄어드는 등 메모리 관리 작업과 관련된 오버헤드가 감소합니다.
  • 메모리 관리에 필요한 시간을 단축합니다.

특히 PostgreSQL에서는 공유 메모리 영역에 대해서만 대용량 페이지를 사용할 수 있습니다. 공유 메모리 영역의 상당 부분이 공유 버퍼에 할당됩니다.

또 다른 장점은 대용량 페이지가 공유 메모리 영역을 디스크로 교환하지 못하게 하여 성능을 더욱 안정화한다는 것입니다.

권장 사항

  • 메모리 리소스가 많은 서버의 경우 대용량 페이지를 사용하지 않도록 설정하지 마십시오. 대용량 페이지를 사용하지 않도록 설정하면 성능이 저하됩니다.
  • 대용량 페이지를 지원하지 않지만 지원하는 서버로 스케일 업할 것으로 예상되는 작은 서버로 시작하는 경우 원활한 전환과 최적의 성능을 위해 huge_pages 설정을 TRY 상태로 유지하세요.

Azure 관련 메모

vCores가 4개 이상인 서버의 경우 기본 운영 체제에서 거대한 페이지가 자동으로 할당됩니다. vCores가 4개 미만인 서버에서는 기능을 사용할 수 없습니다. shared_buffers에 대한 변경 내용을 포함하여 공유 메모리 설정이 변경되면 대용량 페이지 수가 자동으로 조정됩니다.

maintenance_work_mem

attribute
범주 리소스 사용량/메모리
설명 VACUUM, 인덱스 만들기와 같은 유지 관리 작업에 사용할 최대 메모리를 설정합니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 1024-2097151
매개 변수 형식 dynamic
설명서 maintenance_work_mem

설명

maintenance_work_mem은(는) PostgreSQL의 구성 매개 변수입니다. VACUUM, CREATE INDEXALTER TABLE 같은 유지 관리 작업에 할당된 메모리 양을 제어합니다. 쿼리 작업에 대한 메모리 할당에 영향을 주는 work_mem과 달리, 데이터베이스 구조를 유지 관리하고 최적화하는 작업을 위해 maintenance_work_mem이 예약되어 있습니다.

핵심 내용

  • 진공 메모리 한도: maintenance_work_mem을(를) 늘려 데드 튜플 정리 속도를 높이고 싶다면 VACUUM에는 데드 튜플 식별자를 수집하기 위한 기본 제공 제한이 있다는 점에 유의하세요. 이 프로세스에는 최대 1GB의 메모리만 사용할 수 있습니다.
  • 자동 진공을 위한 메모리 분리: autovacuum_work_mem 설정을 사용하여 자동 진공 작업에서 사용하는 메모리를 독립적으로 제어할 수 있습니다. 이 설정은 maintenance_work_mem의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

max_prepared_transactions

attribute
범주 리소스 사용량/메모리
설명 동시에 준비된 최대 트랜잭션 수를 설정합니다. 복제본 서버를 실행하는 경우 이 매개 변수를 기본 서버의 값 이상으로 설정해야 합니다.
데이터 형식 정수
Default value 0
허용된 값 0-262143
매개 변수 형식 static
설명서 max_prepared_transactions

max_stack_depth

attribute
범주 리소스 사용량/메모리
설명 최대 스택 깊이(킬로바이트)를 설정합니다.
데이터 형식 정수
Default value 2048
허용된 값 2048
매개 변수 형식 읽기 전용
설명서 max_stack_depth

shared_buffers

attribute
범주 리소스 사용량/메모리
설명 서버에서 사용하는 공유 메모리 버퍼 수를 설정합니다. 단위는 8kb입니다. 허용되는 값은 사용 가능한 메모리의 10% - 75% 범위 내에 있습니다.
데이터 형식 정수
Default value 서버에 할당된 리소스(vCore, RAM 또는 디스크 공간)에 따라 달라집니다.
허용된 값 16-1073741823
매개 변수 형식 static
설명서 shared_buffers

설명

shared_buffers 구성 매개 변수는 데이터를 버퍼링하기 위해 PostgreSQL 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

데이터가 필요한 경우 데이터베이스 프로세스는 먼저 공유 버퍼를 확인합니다. 필요한 데이터가 있으면 빠르게 검색되므로 시간이 더 많이 걸리는 디스크 읽기가 무시됩니다. shared_buffers는 데이터베이스 프로세스와 디스크 간의 중개자 역할을 함으로써 필요한 I/O 작업의 수를 효과적으로 줄입니다.

Azure 관련 메모

shared_buffers 설정은 vCore가 계층에서 증가함에 따라 선형으로(대략) 확장됩니다.

temp_buffers

attribute
범주 리소스 사용량/메모리
설명 각 데이터베이스 세션에서 사용하는 최대 임시 버퍼 수를 설정합니다.
데이터 형식 정수
Default value 1024
허용된 값 100-1073741823
매개 변수 형식 dynamic
설명서 temp_buffers

work_mem

attribute
범주 리소스 사용량/메모리
설명 임시 디스크 파일에 쓰기 전에 내부 정렬 작업 및 해시 테이블에서 사용할 메모리 양을 설정합니다.
데이터 형식 정수
Default value 4096
허용된 값 4096-2097151
매개 변수 형식 dynamic
설명서 work_mem

설명

PostgreSQL의 work_mem 매개 변수는 각 데이터베이스 세션의 프라이빗 메모리 영역 내에서 특정 내부 작업에 할당된 메모리 양을 제어합니다. 이러한 작업의 예로는 정렬 및 해시가 있습니다.

공유 메모리 영역에 있는 공유 버퍼와 달리, work_mem은 세션별 또는 쿼리별 프라이빗 메모리 공간에 할당됩니다. 적절한 work_mem 크기를 설정하면 이러한 작업의 효율성을 크게 향상시켜 임시 데이터를 디스크에 쓸 필요가 줄어듭니다.

핵심 내용

  • 프라이빗 연결 메모리: work_mem은(는) 각 데이터베이스 세션에서 사용하는 프라이빗 메모리의 일부입니다. 이 메모리는 shared_buffers이(가) 사용하는 공유 메모리 영역과 다릅니다.
  • 쿼리별 사용: 모든 세션 또는 쿼리에서 work_mem을 사용하는 것은 아닙니다. SELECT 1 같은 간단한 쿼리에는 work_mem이(가) 필요하지 않습니다. 그러나 정렬 또는 해시와 같은 작업과 관련된 복잡한 쿼리는 하나 또는 여러 개의 work_mem 청크를 사용할 수 있습니다.
  • 병렬 작업: 여러 병렬 백 엔드에 걸쳐 있는 쿼리의 경우 각 백 엔드가 하나 또는 여러 work_mem 청크를 사용할 수 있습니다.

모니터링 및 조정 work_mem

주로 정렬 또는 해시 작업과 관련된 쿼리 실행 시간이 느린 경우 시스템의 성능을 지속적으로 모니터링하고 필요에 따라 work_mem을(를) 조정해야 합니다. Azure Portal에서 사용할 수 있는 도구를 사용하여 성능을 모니터링할 수 있는 방법은 다음과 같습니다.

  • 쿼리 성능 인사이트: 임시 파일별 상위 쿼리 탭에서 임시 파일을 생성하는 쿼리를 식별합니다. 이 상황은 work_mem을(를) 늘려야 할 가능성이 있음을 시사합니다.
  • 문제 해결 가이드: 문제 해결 가이드의 높은 임시 파일 탭을 사용하여 문제가 있는 쿼리를 식별합니다.
세분화된 조정

work_mem 매개 변수를 관리하는 동안 전역 값을 설정하지 말고, 세분화된 조정 방법을 채택하는 것이 더 효율적입니다. 이 방법을 사용하면 프로세스 및 사용자의 특정 요구 사항에 따라 신중하게 메모리를 할당할 수 있습니다. 또한 메모리 부족 문제가 발생할 위험을 최소화합니다. 시작 방법은 다음과 같습니다.

  • 사용자 수준: 특정 사용자가 주로 메모리 집약적인 집계 또는 보고 작업에 관련된 경우 해당 사용자의 work_mem 값을 사용자 지정하는 것이 좋습니다. ALTER ROLE 명령을 사용하여 사용자 작업의 성능을 향상시킵니다.

  • 함수/프로시저 수준: 특정 함수 또는 프로시저가 상당한 임시 파일을 생성할 때 특정 함수 또는 프로시저 수준에서 work_mem 값을 늘리면 도움이 될 수 있습니다. ALTER FUNCTION 또는 ALTER PROCEDURE 명령을 사용하여 이러한 작업에 더 많은 메모리를 특별히 할당하여 수행할 수 있습니다.

  • 데이터베이스 수준: 특정 데이터베이스만 많은 수의 임시 파일을 생성하는 경우 데이터베이스 수준에서 work_mem을(를) 변경합니다.

  • 전역 수준: 시스템을 분석한 결과, 대부분의 쿼리가 작은 임시 파일을 생성하고 소수의 쿼리만 큰 파일을 만드는 것으로 확인되면 전역적으로 work_mem 값을 늘리는 것이 좋습니다. 이 작업을 통해 대부분의 쿼리가 메모리에서 처리되므로 디스크 기반 작업을 방지하고 효율성을 향상시킬 수 있습니다. 그러나 항상 주의해야 하며 서버의 메모리 사용률을 모니터링하여 증가된 work_mem 값을 처리할 수 있는지 확인합니다.

작업 정렬을 위해 최소 work_mem 값 결정

특정 쿼리, 특히 정렬 프로세스 중에 임시 디스크 파일을 생성하는 최소 work_mem 값을 찾으려면 먼저 쿼리 실행 중에 생성된 임시 파일 크기를 고려합니다. 예를 들어 쿼리에서 20MB 임시 파일을 생성하는 경우:

  1. psql 또는 선호하는 PostgreSQL 클라이언트를 사용하여 데이터베이스에 연결합니다.
  2. 메모리에서 처리할 때 추가 헤더를 고려하도록 초기 work_mem 값을 20MB보다 약간 높게 설정합니다. SET work_mem TO '25MB'과(와) 같은 명령을 사용합니다.
  3. 동일한 세션에서 문제가 있는 쿼리에 대해 EXPLAIN ANALYZE를 실행합니다.
  4. "Sort Method: quicksort Memory: xkB"의 출력을 검토합니다. "external merge Disk: xkB"을(를) 나타내는 경우 work_mem 값을 증분 방식으로 높이고 "quicksort Memory"이(가) 나타날 때까지 다시 테스트합니다. "quicksort Memory"의 모양은 쿼리가 현재 메모리에서 작동하고 있음을 보여줍니다.
  5. 이 메서드를 통해 값을 확인한 후에는 운영 요구 사항에 맞게 전역적으로 또는 보다 세부적인 수준에서 적용할 수 있습니다(앞에서 설명한 대로).