다음을 통해 공유


리소스 사용량/메모리

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
허용된 값 1-1000
매개 변수 형식 dynamic
설명서 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의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

Azure 관련 메모

maintenance_work_mem 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 maintenance_work_mem 서버 매개 변수에 대한 기본값에 영향을 미치지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 maintenance_work_mem 값에 따라 매개 변수 값도 조정해야 합니다.

값을 maintenance_work_mem 계산하는 데 사용되는 수식은 .입니다 (long)(82.5 * ln(memoryGiB) + 40) * 1024.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 maintenance_work_mem
2GiB 99328 KiB
4GiB 157696 KiB
8GiB 216064 KiB
16GiB 274432 KiB
32GiB 332800 KiB
48GiB 367616 KiB
64GiB 392192 KiB
80GiB 410624 KiB
128GiB 450560 KiB
160GiB 468992 KiB
192GiB 484352 KiB
256GiB 508928 KiB
384GiB 542720 KiB
432GiB 552960 KiB
672GiB 590848 KiB

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 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

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

Azure 관련 메모

shared_buffers 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 서버 매개 변수에 대한 기본값에 shared_buffers 영향을 주지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 shared_buffers 값에 따라 매개 변수 값도 조정해야 합니다.

최대 2GiB의 메모리가 있는 가상 머신의 경우 값을 shared_buffers 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 16384.

2GiB를 초과하는 가상 머신의 shared_buffers 경우 값을 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 32768.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 shared_buffers
2GiB 32768
4GiB 131072
8GiB 262144
16GiB 524288
32GiB 1048576
48GiB 1572864
64GiB 2097152
80GiB 2621440
128GiB 4194304
160GiB 5242880
192GiB 6291456
256GiB 8388608
384GiB 12582912
432GiB 14155776
672GiB 22020096

shared_memory_type

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

temp_buffers

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

vacuum_buffer_usage_limit

attribute
범주 리소스 사용량/메모리
설명 VACUUM, ANALYZE 및 autovacuum에 대한 버퍼 풀 크기를 설정합니다.
데이터 형식 정수
Default value 2048
허용된 값 0-16777216
매개 변수 형식 dynamic
설명서 vacuum_buffer_usage_limit

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
허용된 값 1-1000
매개 변수 형식 dynamic
설명서 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
허용된 값 64-2147483647
매개 변수 형식 dynamic
설명서 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의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

Azure 관련 메모

maintenance_work_mem 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 maintenance_work_mem 서버 매개 변수에 대한 기본값에 영향을 미치지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 maintenance_work_mem 값에 따라 매개 변수 값도 조정해야 합니다.

값을 maintenance_work_mem 계산하는 데 사용되는 수식은 .입니다 (long)(82.5 * ln(memoryGiB) + 40) * 1024.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 maintenance_work_mem
2GiB 99328 KiB
4GiB 157696 KiB
8GiB 216064 KiB
16GiB 274432 KiB
32GiB 332800 KiB
48GiB 367616 KiB
64GiB 392192 KiB
80GiB 410624 KiB
128GiB 450560 KiB
160GiB 468992 KiB
192GiB 484352 KiB
256GiB 508928 KiB
384GiB 542720 KiB
432GiB 552960 KiB
672GiB 590848 KiB

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 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

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

Azure 관련 메모

shared_buffers 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 서버 매개 변수에 대한 기본값에 shared_buffers 영향을 주지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 shared_buffers 값에 따라 매개 변수 값도 조정해야 합니다.

최대 2GiB의 메모리가 있는 가상 머신의 경우 값을 shared_buffers 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 16384.

2GiB를 초과하는 가상 머신의 shared_buffers 경우 값을 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 32768.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 shared_buffers
2GiB 32768
4GiB 131072
8GiB 262144
16GiB 524288
32GiB 1048576
48GiB 1572864
64GiB 2097152
80GiB 2621440
128GiB 4194304
160GiB 5242880
192GiB 6291456
256GiB 8388608
384GiB 12582912
432GiB 14155776
672GiB 22020096

shared_memory_type

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

temp_buffers

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

vacuum_buffer_usage_limit

attribute
범주 리소스 사용량/메모리
설명 VACUUM, ANALYZE 및 autovacuum에 대한 버퍼 풀 크기를 설정합니다.
데이터 형식 정수
Default value 256
허용된 값 0-16777216
매개 변수 형식 dynamic
설명서 vacuum_buffer_usage_limit

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
허용된 값 1-1000
매개 변수 형식 dynamic
설명서 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
허용된 값 64-2147483647
매개 변수 형식 dynamic
설명서 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의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

Azure 관련 메모

maintenance_work_mem 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 maintenance_work_mem 서버 매개 변수에 대한 기본값에 영향을 미치지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 maintenance_work_mem 값에 따라 매개 변수 값도 조정해야 합니다.

값을 maintenance_work_mem 계산하는 데 사용되는 수식은 .입니다 (long)(82.5 * ln(memoryGiB) + 40) * 1024.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 maintenance_work_mem
2GiB 99328 KiB
4GiB 157696 KiB
8GiB 216064 KiB
16GiB 274432 KiB
32GiB 332800 KiB
48GiB 367616 KiB
64GiB 392192 KiB
80GiB 410624 KiB
128GiB 450560 KiB
160GiB 468992 KiB
192GiB 484352 KiB
256GiB 508928 KiB
384GiB 542720 KiB
432GiB 552960 KiB
672GiB 590848 KiB

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 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

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

Azure 관련 메모

shared_buffers 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 서버 매개 변수에 대한 기본값에 shared_buffers 영향을 주지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 shared_buffers 값에 따라 매개 변수 값도 조정해야 합니다.

최대 2GiB의 메모리가 있는 가상 머신의 경우 값을 shared_buffers 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 16384.

2GiB를 초과하는 가상 머신의 shared_buffers 경우 값을 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 32768.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 shared_buffers
2GiB 32768
4GiB 131072
8GiB 262144
16GiB 524288
32GiB 1048576
48GiB 1572864
64GiB 2097152
80GiB 2621440
128GiB 4194304
160GiB 5242880
192GiB 6291456
256GiB 8388608
384GiB 12582912
432GiB 14155776
672GiB 22020096

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-1000
매개 변수 형식 dynamic
설명서 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
허용된 값 64-2147483647
매개 변수 형식 dynamic
설명서 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의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

Azure 관련 메모

maintenance_work_mem 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 maintenance_work_mem 서버 매개 변수에 대한 기본값에 영향을 미치지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 maintenance_work_mem 값에 따라 매개 변수 값도 조정해야 합니다.

값을 maintenance_work_mem 계산하는 데 사용되는 수식은 .입니다 (long)(82.5 * ln(memoryGiB) + 40) * 1024.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 maintenance_work_mem
2GiB 99328 KiB
4GiB 157696 KiB
8GiB 216064 KiB
16GiB 274432 KiB
32GiB 332800 KiB
48GiB 367616 KiB
64GiB 392192 KiB
80GiB 410624 KiB
128GiB 450560 KiB
160GiB 468992 KiB
192GiB 484352 KiB
256GiB 508928 KiB
384GiB 542720 KiB
432GiB 552960 KiB
672GiB 590848 KiB

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 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

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

Azure 관련 메모

shared_buffers 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 서버 매개 변수에 대한 기본값에 shared_buffers 영향을 주지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 shared_buffers 값에 따라 매개 변수 값도 조정해야 합니다.

최대 2GiB의 메모리가 있는 가상 머신의 경우 값을 shared_buffers 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 16384.

2GiB를 초과하는 가상 머신의 shared_buffers 경우 값을 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 32768.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 shared_buffers
2GiB 32768
4GiB 131072
8GiB 262144
16GiB 524288
32GiB 1048576
48GiB 1572864
64GiB 2097152
80GiB 2621440
128GiB 4194304
160GiB 5242880
192GiB 6291456
256GiB 8388608
384GiB 12582912
432GiB 14155776
672GiB 22020096

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-1000
매개 변수 형식 dynamic
설명서 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
허용된 값 64-2147483647
매개 변수 형식 dynamic
설명서 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의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

Azure 관련 메모

maintenance_work_mem 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 maintenance_work_mem 서버 매개 변수에 대한 기본값에 영향을 미치지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 maintenance_work_mem 값에 따라 매개 변수 값도 조정해야 합니다.

값을 maintenance_work_mem 계산하는 데 사용되는 수식은 .입니다 (long)(82.5 * ln(memoryGiB) + 40) * 1024.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 maintenance_work_mem
2GiB 99328 KiB
4GiB 157696 KiB
8GiB 216064 KiB
16GiB 274432 KiB
32GiB 332800 KiB
48GiB 367616 KiB
64GiB 392192 KiB
80GiB 410624 KiB
128GiB 450560 KiB
160GiB 468992 KiB
192GiB 484352 KiB
256GiB 508928 KiB
384GiB 542720 KiB
432GiB 552960 KiB
672GiB 590848 KiB

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 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

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

Azure 관련 메모

shared_buffers 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 서버 매개 변수에 대한 기본값에 shared_buffers 영향을 주지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 shared_buffers 값에 따라 매개 변수 값도 조정해야 합니다.

최대 2GiB의 메모리가 있는 가상 머신의 경우 값을 shared_buffers 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 16384.

2GiB를 초과하는 가상 머신의 shared_buffers 경우 값을 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 32768.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 shared_buffers
2GiB 32768
4GiB 131072
8GiB 262144
16GiB 524288
32GiB 1048576
48GiB 1572864
64GiB 2097152
80GiB 2621440
128GiB 4194304
160GiB 5242880
192GiB 6291456
256GiB 8388608
384GiB 12582912
432GiB 14155776
672GiB 22020096

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-1000
매개 변수 형식 dynamic
설명서 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의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

Azure 관련 메모

maintenance_work_mem 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 maintenance_work_mem 서버 매개 변수에 대한 기본값에 영향을 미치지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 maintenance_work_mem 값에 따라 매개 변수 값도 조정해야 합니다.

값을 maintenance_work_mem 계산하는 데 사용되는 수식은 .입니다 (long)(82.5 * ln(memoryGiB) + 40) * 1024.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 maintenance_work_mem
2GiB 99328 KiB
4GiB 157696 KiB
8GiB 216064 KiB
16GiB 274432 KiB
32GiB 332800 KiB
48GiB 367616 KiB
64GiB 392192 KiB
80GiB 410624 KiB
128GiB 450560 KiB
160GiB 468992 KiB
192GiB 484352 KiB
256GiB 508928 KiB
384GiB 542720 KiB
432GiB 552960 KiB
672GiB 590848 KiB

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 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

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

Azure 관련 메모

shared_buffers 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 서버 매개 변수에 대한 기본값에 shared_buffers 영향을 주지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 shared_buffers 값에 따라 매개 변수 값도 조정해야 합니다.

최대 2GiB의 메모리가 있는 가상 머신의 경우 값을 shared_buffers 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 16384.

2GiB를 초과하는 가상 머신의 shared_buffers 경우 값을 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 32768.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 shared_buffers
2GiB 32768
4GiB 131072
8GiB 262144
16GiB 524288
32GiB 1048576
48GiB 1572864
64GiB 2097152
80GiB 2621440
128GiB 4194304
160GiB 5242880
192GiB 6291456
256GiB 8388608
384GiB 12582912
432GiB 14155776
672GiB 22020096

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의 하위 집합 역할을 합니다. 다른 유지 관리 작업 및 데이터 정의 작업에 대한 메모리 할당에 영향을 주지 않고 자동 진공에 사용되는 메모리 양을 결정할 수 있습니다.

Azure 관련 메모

maintenance_work_mem 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 maintenance_work_mem 서버 매개 변수에 대한 기본값에 영향을 미치지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 maintenance_work_mem 값에 따라 매개 변수 값도 조정해야 합니다.

값을 maintenance_work_mem 계산하는 데 사용되는 수식은 .입니다 (long)(82.5 * ln(memoryGiB) + 40) * 1024.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 maintenance_work_mem
2GiB 99328 KiB
4GiB 157696 KiB
8GiB 216064 KiB
16GiB 274432 KiB
32GiB 332800 KiB
48GiB 367616 KiB
64GiB 392192 KiB
80GiB 410624 KiB
128GiB 450560 KiB
160GiB 468992 KiB
192GiB 484352 KiB
256GiB 508928 KiB
384GiB 542720 KiB
432GiB 552960 KiB
672GiB 590848 KiB

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 데이터베이스에 할당된 시스템 메모리 양을 결정합니다. 모든 데이터베이스 프로세스에서 액세스할 수 있는 중앙 집중식 메모리 풀 역할을 합니다.

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

Azure 관련 메모

shared_buffers 서버 매개 변수의 기본값은 컴퓨팅을 위해 선택한 제품 이름을 기반으로 Azure Database for PostgreSQL 유연한 서버의 인스턴스를 프로비전할 때 계산됩니다. 유연한 서버를 지원하는 컴퓨팅에 대한 제품 선택의 후속 변경 내용은 해당 인스턴스의 서버 매개 변수에 대한 기본값에 shared_buffers 영향을 주지 않습니다.

인스턴스에 할당된 제품을 변경할 때마다 다음 수식의 shared_buffers 값에 따라 매개 변수 값도 조정해야 합니다.

최대 2GiB의 메모리가 있는 가상 머신의 경우 값을 shared_buffers 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 16384.

2GiB를 초과하는 가상 머신의 shared_buffers 경우 값을 계산하는 데 사용되는 수식은 다음과 입니다 memoryGib * 32768.

이전 수식에 따라 다음 표에서는 프로비전된 메모리 양에 따라 이 서버 매개 변수가 설정되는 값을 나열합니다.

메모리 크기 shared_buffers
2GiB 32768
4GiB 131072
8GiB 262144
16GiB 524288
32GiB 1048576
48GiB 1572864
64GiB 2097152
80GiB 2621440
128GiB 4194304
160GiB 5242880
192GiB 6291456
256GiB 8388608
384GiB 12582912
432GiB 14155776
672GiB 22020096

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. 이 메서드를 통해 값을 확인한 후에는 운영 요구 사항에 맞게 전역적으로 또는 보다 세부적인 수준에서 적용할 수 있습니다(앞에서 설명한 대로).