윈 토토 : 문서 : 9.4 : 윈 토토 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.4 : 데이터베이스 토토 사이트 순위 시작 | 젠 토토 : 문서 : 9.4 : 서버 설정 및 작동 | 17 장. 서버 설정 및 작동 | PostgreSQL : 문서 : 9.4 : 서버 스포츠 토토 결과 |
postgresql때때로 특히 서버의 여러 사본이 동일한 시스템에서 또는 매우 큰 설치에서 실행될 때 때때로 다양한 운영 체제 자원 제한을 소진 할 수 있습니다. 이 섹션은에 사용 된 토토 리소스를 설명합니다.PostgreSQL토토 자원 소비와 관련된 문제를 해결하기 위해 취할 수있는 단계
공유 메모리 및 세마포어는 총체적으로라고합니다."System V IPC"(메시지 대기열과 함께postgresql). 을 제외하고Windows, 여기서PostgreSQL이 시설의 자체 교체 구현을 제공합니다. 이러한 시설은 운영을 위해 필요합니다PostgreSQL.
이러한 시설의 완전한 부족은 일반적으로에 의해 나타납니다.불법 시스템 호출서버 시작시 오류. 이 경우 토토을 재구성하는 것 외에는 대안이 없습니다.PostgreSQL그들 없이는 작동하지 않습니다. 그러나이 상황은 현대 운영 체제들 사이에서 드물다.
언제PostgreSQL다양한 하드 중 하나를 초과IPC제한, 서버는 시작을 거부하고 문제를 설명하는 유익한 오류 메시지를 남겨 두어야합니다. (참조섹션 17.3.1.) 관련 토토 매개 변수는 다른 시스템에서 일관되게 이름을 지정합니다.표 17-1개요를 제공합니다. 그러나 설정하는 방법은 다양합니다. 일부 플랫폼에 대한 제안은 다음과 같습니다.
참고 :이전PostgreSQL9.3, 서버를 시작하는 데 필요한 시스템 v 공유 메모리의 양이 훨씬 컸습니다. 이전 버전의 서버를 실행중인 경우 서버 버전의 문서를 참조하십시오.
표 17-1.System V IPC매개 변수
Name | 설명 | 합리적인 값 |
---|---|---|
Shmmax | 공유 메모리 세그먼트의 최대 크기 (바이트) | 적어도 1KB (서버의 많은 사본을 실행하는 경우 더 자세) |
Shmmin | 공유 메모리 세그먼트의 최소 크기 (바이트) | 1 |
Shmall | 사용 가능한 공유 메모리의 총 금액 (바이트 또는 페이지) | 바이트 인 경우Shmmax; if pages,CEIL (shmmax/page_size) |
SHMSEG | 프로세스 당 최대 공유 메모리 세그먼트 수 | 1 세그먼트 만 필요하지만 기본값은 훨씬 높습니다 |
shmmni | 공유 메모리 세그먼트의 최대 수 시스템 전체 | 좋아요SHMSEG다른 응용 프로그램을위한 공간 |
semmni | 최대 세마포어 식별자 수 (즉, 세트) | 적어도CEIL ((max_Connections + autovacuum_max_workers + max_worker_processes + 5) / 16) |
SEMMNS | 시스템 전체의 세마포르 수의 최대 수 | CEIL ((max_Connections + autovacuum_max_workers + max_worker_processes + 5) / 16) * 17다른 응용 프로그램을위한 공간 |
SEMMSL | 세트 당 최대 세부 수 | 최소 17 |
SEMMAP | 세마포어 맵의 항목 수 | 텍스트 참조 |
SEMVMX | 세마포어의 최대 값 | 1000 이상 (기본값은 종종 32767입니다. 필요하지 않으면 변경하지 마십시오) |
PostgreSQL서버의 각 사본에 대해 시스템 v 공유 메모리 (일반적으로 48 바이트, 64 비트 플랫폼에서 48 바이트)가 필요합니다. 대부분의 최신 운영 체제 에서이 금액을 쉽게 할당 할 수 있습니다. 그러나 서버의 많은 사본을 실행 중이거나 다른 응용 프로그램이 System v 공유 메모리를 사용하는 경우 증가해야 할 수도 있습니다.Shmmax, 공유 메모리 세그먼트의 바이트의 최대 크기, 또는Shmall, 시스템 v 공유 메모리 시스템 전체의 총 금액. 참고Shmall많은 시스템의 바이트가 아닌 페이지에서 측정됩니다.
문제를 일으킬 가능성이 적은 것은 공유 메모리 세그먼트의 최소 크기입니다 (Shmmin).postgresql(보통 1). 시스템 전체의 세그먼트 최대 수 (shmmni) 또는 프로세스 당 (SHMSEG) 시스템이 0으로 설정되지 않으면 문제를 일으키지 않을 것입니다.
postgresql허용 된 연결 당 하나의 세마포어를 사용합니다 (max_connections), 허용 Autovacuum 작업자 프로세스 (autovacuum_max_workers) 허용 배경 프로세스 (max_worker_processes), 16 세트."매직 번호", 다른 응용 프로그램에서 사용하는 세마포어 세트와의 충돌을 감지합니다. 시스템의 최대 세마포어 수는에 의해 설정됩니다.SEMMNS, 결과적으로 적어도만큼 높아야합니다.max_connectionsplusautovacuum_max_workersplusmax_worker_processes, 16 개의 허용 된 연결과 작업자마다 추가로 1 개의 추가로 1 개의 추가로 1 개의 추가 정보가 있습니다 (공식 참조표 17-1). 매개 변수SEMMNI한 번에 시스템에 존재할 수있는 세마포어 세트 수에 대한 제한을 결정합니다. 따라서이 매개 변수는 적어도CEIL ((max_Connections + autovacuum_max_workers + max_worker_processes + 5) / 16). 허용 연결 수를 낮추는 것은 실패에 대한 임시 해결 방법이며, 일반적으로 혼란스럽게 말합니다"장치에 남은 공간 없음", 함수에서Semget
.
In some cases it might also be necessary to increaseSEMMAP최소한 순서에 있어야SEMMNS. 시스템 에이 매개 변수가있는 경우 (많은 사람들은 그렇지 않음), 이용 가능한 세마포어의 각각의 연속 블록에 항목이 필요한 세마포어 리소스 맵의 크기를 정의합니다. 세마포어 세트가 해제되면 자유 블록에 인접한 기존 항목에 추가되거나 새 맵 항목에 등록됩니다. 지도가 가득 차면 해방 된 세마포어가 손실됩니다 (재부팅 될 때까지). 세마포 공간의 단편화는 시간이 지남에 따라 필요한 것보다 적은 수의 세마포르를 초래할 수 있습니다.
theSEMMSL매개 변수는 세트에 몇 개의 세마포어가있을 수 있는지 결정하는 매개 변수는 17 이상이어야합니다PostgreSQL.
관련된 다양한 기타 설정"세마포어 undo":SEMMNUandSemume, 영향을 미치지 마십시오PostgreSQL.
적어도 버전 5.1에서, 그러한 매개 변수에 대한 특별 구성을 수행 할 필요는 없어야합니다.Shmmax, 이것은 모든 메모리를 공유 메모리로 사용할 수 있도록 구성됩니다. 그것은와 같은 다른 데이터베이스에 일반적으로 사용되는 일종의 구성입니다.DB/2.
그러나 글로벌 수정이 필요할 수 있습니다ulimit정보/etc/security/limits, 파일 크기의 기본 하드 제한 (로서 기본 하드 제한fsize) 및 파일 번호 (nofiles) 너무 낮을 수 있습니다.
기본 IPC 설정은를 사용하여 변경할 수 있습니다.sysctl또는로더인터페이스. 다음 매개 변수는를 사용하여 설정할 수 있습니다.sysctl:
# sysctl kern.ipc.shmall = 32768 # sysctl kern.ipc.shmmax = 134217728
이러한 설정을 재부팅보다 계속 유지하려면 수정/etc/sysctl.conf.
이 세마포어 관련 설정은까지 읽기 전용입니다.sysctl관련이 있지만 설정할 수 있습니다/boot/loader.conf:
kern.ipc.semmni = 256 kern.ipc.semmns = 512
해당 파일을 수정 한 후 새 설정이 적용하려면 재부팅이 필요합니다.
공유 메모리를 RAM에 잠그고 교환으로 인해 정지되지 않도록 토토을 구성 할 수도 있습니다. 이것은를 사용하여 달성 할 수 있습니다.sysctl설정kern.ipc.shm_use_phys.
활성화하여 freebsd 교도소에서 달리는 경우sysctl'ssecurity.jail.sysvipc_allowed, Postmaster다른 교도소에서 달리는 것은 다른 운영 체제 사용자가 운영해야합니다. 이는 뿌리가 아닌 사용자가 다른 교도소의 공유 메모리 또는 세마포어를 방해하지 않기 때문에 보안을 향상 시키며 PostgreSQL IPC 정리 코드가 올바르게 작동 할 수 있습니다. (FreeBsd 6.0 이상에서 IPC 정리 코드는 다른 교도소의 과정을 제대로 감지하지 않아 다른 교도소에서 동일한 항구에서 우체국 장을 운영하지 못합니다.).
freebsd4.0 전의 버전은 오래된 것처럼 작동합니다OpenBSD(아래 참조).
innetbsd5.0 이상, IPC 매개 변수를 사용하여 조정할 수 있습니다sysctl, 예 :
# sysctl -w kern.ipc.semmni = 100
이러한 설정을 재부팅보다 계속 유지하려면 수정/etc/sysctl.conf.
일반적으로 증가하고 싶을 것입니다kern.ipc.semmniandkern.ipc.semmns, asnetbsd이들에 대한 기본 설정은 불편하게 작습니다.
공유 메모리를 RAM에 잠그고 교환으로 인해 정지되지 않도록 토토을 구성 할 수도 있습니다. 이것은를 사용하여 달성 할 수 있습니다.sysctl설정kern.ipc.shm_use_phys.
netbsd5.0 전의 버전은 오래된 것처럼 작동합니다OpenBSD(아래 참조), 커널 매개 변수를 키워드로 설정해야한다는 점을 제외하고옵션not옵션.
inOpenBSD3.3 이상, IPC 매개 변수를 사용하여 조정할 수 있습니다sysctl, 예 :
# sysctl kern.seminfo.semmni = 100
이러한 설정을 재부팅보다 유지하려면 수정/etc/sysctl.conf.
일반적으로 증가하고 싶을 것입니다kern.seminfo.semmni및Kern.seminfo.semmns, asOpenBSD이들에 대한 기본 설정은 불편하게 작습니다.
나이OpenBSD버전은 IPC 매개 변수를 변경하려면 사용자 정의 커널을 빌드해야합니다. 옵션을 확인하십시오SYSVSHM및SYSVSEM도 활성화되어 있습니다. 다음은 토토 구성 파일에서 다양한 매개 변수를 설정하는 방법의 예를 보여줍니다.
옵션 sysvshm 옵션 shmmaxpgs = 4096 옵션 shmseg = 256 옵션 sysvsem 옵션 semmni = 256 옵션 SEMMNS = 512 옵션 semmnu = 256
기본 설정은 일반 설치에 충분한 경향이 있습니다. 에hp-ux10, 공장 기본값SEMMNSis 128, 더 큰 데이터베이스 사이트에서는 너무 낮을 수 있습니다.
IPC매개 변수를 설정할 수 있습니다시스템 토토 토토자(SAM) 아래토토 구성-구성 가능한 매개 변수. 선택하다새 토토 만들기완료되면.
기본 최대 세그먼트 크기는 32MB이고 기본 최대 총 크기는 2097152 페이지입니다. 페이지는 거의 항상 4096 바이트입니다."거대한 페이지"(사용getConf Page_Size확인하려면).
공유 메모리 크기 설정은를 통해 변경할 수 있습니다.sysctl인터페이스. 예를 들어, 16GB를 허용하려면 :
$ sysctl -w kernel.shmmax = 17179869184 $ sysctl -w kernel.shmall = 4194304
또한 파일의 재부팅 사이에 이러한 설정을 보존 할 수 있습니다/etc/sysctl.conf. 그렇게하는 것이 좋습니다.
고대 분포가 없을 수도 있습니다sysctl프로그램이지만 동등한 변경 사항을 조작하여 동등한 변경을 수행 할 수 있습니다./Proc파일 시스템 :
$ echo 17179869184/proc/sys/kernel/shmmax $ echo 4194304/proc/sys/kernel/shmall
나머지 기본값의 크기는 매우 관대하며 일반적으로 변경이 필요하지 않습니다.
OS X에서 공유 메모리를 구성하기위한 권장되는 방법은 이름이 지정된 파일을 작성하는 것입니다/etc/sysctl.conf, 다음과 같은 가변 할당을 포함하는
kern.sysv.shmmax = 4194304 kern.sysv.shmmin = 1 kern.sysv.shmmni = 32 kern.sysv.shmseg = 8 kern.sysv.shmall = 1024
일부 OS X 버전에서모두 5공유 메모리 매개 변수를 설정해야합니다/etc/sysctl.conf, 그렇지 않으면 값이 무시됩니다.
OS X의 최근 릴리스가 설정 시도를 무시한다고 조심하십시오Shmmax4096의 정확한 배수가 아닌 값으로.
Shmallis measured in 4 kB pages on this platform.
이전 OS X 버전에서는 공유 메모리 매개 변수를 변경하려면 재부팅해야합니다. 10.5 현재 모든 것을 바꿀 수 있습니다shmmni즉시sysctl. 그러나 여전히 선호하는 값을 설정하는 것이 가장 좋습니다/etc/sysctl.conf, 값이 재부팅에 걸쳐 유지되도록합니다.
파일/etc/sysctl.confOS X 10.3.9 이상에서만 영광입니다. 이전 10.3.x 릴리스를 실행중인 경우 파일을 편집해야합니다/etc/rc그리고 다음 명령에서 값을 변경하십시오.
sysctl -w kern.sysv.shmmax sysctl -w kern.sysv.shmin sysctl -w kern.sysv.shmmni sysctl -w kern.sysv.shmseg sysctl -w kern.sysv.shmall
참고/etc/rc는 일반적으로 OS X 시스템 업데이트에 의해 덮어 쓰기 때문에 각 업데이트 후에 이러한 편집을 다시해야 할 것으로 예상됩니다..
OS X 10.2 이상에서 파일 에서이 명령을 편집/System/Library/StartUpitems/SystemTuning/SystemTuning.
기본 구성에서는 512 kb의 공유 메모리 자당 세그먼트 만 허용됩니다. 설정을 늘리려면 먼저 디렉토리로 변경/etc/conf/cf.d. 의 현재 값을 표시하려면Shmmax, run :
./configure -y shmmax
새 값을 설정하려면Shmmax, run :
./configure shmmax =value
여기서value(바이트)를 사용하려는 새 값입니다. 설정 후Shmmax, 토토 재건 :
./link_unix
및 재부팅.
관련 설정을 변경할 수 있습니다/etc/system, 예 :
SET SHMSYS : SHMINFO_SHMMAX = 0X2000000 SHMSS를 설정하십시오 : SHMINFO_SHMMIN = 1 SHMSS를 설정하십시오 : SHMINFO_SHMMNI = 256 SHMSS를 설정하십시오 : SHMINFO_SHMSEG = 256 SEMSYS 세트 : SEMINFO_SEMMAP = 256 SEMSYS 세트 : SEMINFO_SEMMNI = 512 SEMSYS 세트 : SEMINFO_SEMMNS = 512 SEMSYS 세트 : SEMINFO_SEMMSL = 32
변경 사항을 발효하려면 재부팅해야합니다. 참조 참조http : //sunsite.uakom.sk/sunworldonline/swol-09-1997/swol-09-insidesolaris.htmlSolaris의 이전 버전에서 공유 메모리에 대한 정보.
Solaris 10 이후에서, 그리고 OpenSolaris에서, 기본 공유 메모리 및 세마포어 설정은 대부분의 경우 충분합니다PostgreSQL응용 프로그램. Solaris는 이제 a에 기본값을Shmmax시스템의 1/4RAM. 이 설정을 추가로 조정하려면와 관련된 프로젝트 설정을 사용하십시오.Postgres사용자. 예를 들어 다음을로 실행합니다.루트:
projadd -c "postgresql db user"-k "project.max -shm -memory = (권한, 8gb, 거부)"-u postgres -g postgres user.postgres
이 명령은를 추가합니다.user.postgres프로젝트 및 공유 메모리를 최대로 설정하고Postgres사용자가 8GB로, 다음에 사용자 로그인 할 때 또는 다시 시작할 때PostgreSQL(not reload). The above assumes thatPostgreSQLPostgres사용자Postgres그룹. 서버 재부팅이 필요하지 않습니다.
다른 권장 커널 설정 데이터베이스 서버의 변경 사항이 많을수록 많은 수의 연결이 있습니다.
project.max-shm-ids = (priv, 32768, deny) project.max-sem-ids = (priv, 4096, deny) project.max-msg-ids = (priv, 4096, deny)
추가로 실행중인 경우PostgreSQL영역 내부에서도 영역 자원 사용 제한을 높여야 할 수도 있습니다. "2 장 : 프로젝트 및 작업"을 참조하십시오시스템 토토자 안내서자세한 내용은프로젝트및prctl.
onunixware7, 기본 구성에서는 공유 메모리 세그먼트의 최대 크기가 512kb입니다. 의 현재 값을 표시하려면Shmmax, run :
/etc/conf/bin/idtune -g shmmax
현재, 기본값, 최소 및 최대 값을 표시합니다. 새로운 값을 설정하려면Shmmax, run :
/etc/conf/bin/idtune shmmaxvalue
여기서value(바이트)를 사용하려는 새 값입니다. 설정 후Shmmax, 토토을 재건 :
/etc/conf/bin/idbuild -B
및 재부팅.
ifSystemD사용 중이며, 운영 체제에 의해 IPC 리소스 (공유 메모리 및 세마포어)가 조기에 제거되지 않도록주의해야합니다. 이것은 소스에서 PostgreSQL을 설치할 때 특히 문제가됩니다. PostgreSQL의 배포 패키지 사용자는에 영향을 줄 가능성이 적습니다.Postgres사용자는 일반적으로 시스템 사용자로 생성됩니다.
설정removeipcinlogind.conf사용자가 완전히 로그 아웃 할 때 IPC 객체가 제거되는지 여부를 제어합니다. 시스템 사용자는 면제됩니다. 이 설정은 기본값으로 켜짐SystemD이지만 일부 운영 체제 배포판이 꺼져 있습니다.
이 설정이 켜져있을 때 일반적인 관찰 된 효과는 PostgreSQL 서버에서 사용하는 세마포어 개체가 명백히 임의의 시간에 제거되어 서버가 로그 메시지와 같은 로그 메시지로 충돌한다는 것입니다.
로그 : SEMCTL (1234567890, 0, IPC_RMID, ...) 실패 : 잘못된 인수
다른 유형의 IPC 객체 (공유 메모리 vs. 세마포어, 시스템 V 대 Posix)는 약간 다르게 처리됩니다SystemD, 따라서 일부 IPC 리소스가 다른 IPC 리소스가 다른 방식으로 제거되지 않음을 알 수 있습니다. 그러나 이러한 미묘한 차이에 의존하는 것은 권장하지 않습니다.
a"사용자 로그 아웃"토토자가 유지 보수 작업의 일부로 발생하거나 토토자가로 로그인 할 때 수동으로 발생할 수 있습니다.Postgres사용자 또는 이와 유사한 것이므로 일반적으로 예방하기가 어렵습니다.
A"시스템 사용자"에서 결정됩니다SystemDSYS_UID_MAX설정에서/etc/login.defs.
포장 및 배포 스크립트는 신중해야합니다.Postgres사용하여 시스템 사용자로서의 사용자userAdd -r, AddUser -시스템또는 동등한.
또는 사용자 계정을 잘못 만들거나 변경할 수없는 경우 설정하는 것이 좋습니다
removeipc = no
in/etc/systemd/logind.conf또는 다른 적절한 구성 파일.
주의 |
이 두 가지 중 하나 이상을 보장해야합니다. 그렇지 않으면 PostgreSQL 서버는 매우 신뢰할 수 없습니다. |
UNIX와 유사한 운영 체제는 귀하의 운영을 방해 할 수있는 다양한 종류의 리소스 제한을 시행합니다PostgreSQL서버. 특히 중요한 것은 사용자 당 프로세스 수, 프로세스 당 열린 파일 수 및 각 프로세스에 사용할 수있는 메모리 량에 대한 제한입니다. 이들 각각은를 가지고 있습니다."하드"및 A"소프트"제한. 소프트 한계는 실제로 중요하지만 사용자는 하드 제한까지 변경할 수 있습니다. 단단한 제한은 루트 사용자 만 변경할 수 있습니다. 시스템 호출setRlimit
이 매개 변수를 설정할 책임이 있습니다. 쉘의 내장 명령ulimit(Bourne Shells) 또는Limit(CSH)는 명령 줄에서 자원 제한을 제어하는 데 사용됩니다. BSD 유래 시스템에서 파일/etc/login.conf로그인 중에 설정된 다양한 자원 제한을 제어합니다. 자세한 내용은 운영 체제 문서를 참조하십시오. 관련 매개 변수는입니다.MaxProc, OpenFiles및DataSize. 예를 들어:
기본값 : \ ... : datasize-cur = 256m : \ : maxproc-cur = 256 : \ : OpenFiles-Cur = 256 : \ ...
(-cur는 소프트 한계입니다. 부록-max하드 제한을 설정하려면)
토토은 일부 리소스에 시스템 전체 제한을 가질 수 있습니다.
onLinux /proc/sys/fs/file-max커널이 지원할 최대 열린 파일 수를 결정합니다. 파일에 다른 숫자를 쓰거나에 할당을 추가하여 변경할 수 있습니다./etc/sysctl.conf. 프로세스 당 파일의 최대 한계는 커널이 컴파일 될 때 고정됩니다. 보다/usr/src/linux/documentation/proc.txt자세한 내용은
thePostgreSQL서버는 연결 당 하나의 프로세스를 사용하므로 다른 시스템의 나머지 부분에 필요한 것 외에도 허용되는 연결만큼 많은 프로세스를 제공해야합니다. 이것은 일반적으로 문제가되지 않지만 하나의 컴퓨터에서 여러 서버를 실행하면 상황이 빡빡해질 수 있습니다.
열린 파일의 공장 기본 제한이 종종 설정됩니다"사회적으로 친절한"많은 사용자가 부적절한 시스템 리소스의 일부를 사용하지 않고 기계에 공존 할 수있는 값. 컴퓨터에서 많은 서버를 실행하면 아마도 원하는 것이지만 전용 서버에서는이 제한을 높이고 싶을 수도 있습니다.
동전의 반대편에서 일부 시스템은 개별 프로세스가 많은 파일을 열도록 허용합니다. 몇 가지 이상의 프로세스가 그렇게되면 시스템 전체의 한계를 쉽게 초과 할 수 있습니다. 이런 일이 발생하고 시스템 전체의 한계를 변경하고 싶지 않다면 설정할 수 있습니다PostgreSQL'smax_files_per_process개방형 파일의 소비를 제한하기위한 구성 매개 변수.
Linux 2.4 이상에서 기본 가상 메모리 동작이 최적이 아닙니다PostgreSQL. 토토이 메모리 오버 커뮤지트를 구현하는 방식으로 인해 토토이 종료 될 수 있습니다.PostgreSQL메모리가 어느 쪽이든 요구하는 경우 postmaster (마스터 서버 프로세스)PostgreSQL또는 다른 프로세스는 시스템이 가상 메모리가 부족하게됩니다.
이런 일이 발생하면 이와 같은 토토 메시지가 표시됩니다 (해당 메시지를 찾을 위치에 대한 시스템 문서 및 구성을 참조하십시오) :.
메모리 밖으로 : 죽인 프로세스 12345 (Postgres).
이것은임을 나타냅니다.Postgres메모리 압력으로 인해 프로세스가 종료되었습니다. 기존 데이터베이스 연결은 정상적으로 계속 작동하지만 새로운 연결은 허용되지 않습니다. 회복하려면PostgreSQL다시 시작해야합니다.
이 문제를 피하는 한 가지 방법은 실행하는 것입니다PostgreSQL다른 프로세스가 메모리에서 기계를 실행하지 않도록 할 수있는 기계에서. 메모리가 단단 해지면 운영 체제의 스왑 공간을 늘리는 것이 문제를 피하는 데 도움이 될 수 있습니다. OOM (Memory of Memory) 킬러는 물리적 메모리와 스왑 공간이 소진 될 때만 호출되기 때문입니다..
ifPostgreSQL자체는 메모리가 부족한 시스템의 원인이므로 구성을 변경하여 문제를 피할 수 있습니다. 경우에 따라 메모리 관련 구성 매개 변수를 낮추는 데 도움이 될 수 있습니다.shared_buffers및work_mem. 다른 경우에는 데이터베이스 서버 자체에 너무 많은 연결을 허용함으로써 문제가 발생할 수 있습니다. 많은 경우에, 줄이는 것이 더 낫다max_connections대신 외부 연결-풀링 소프트웨어를 사용하십시오.
Linux 2.6 이상에서 커널의 동작을 수정하여 그렇지 않도록"Overcommit"메모리. 이 설정은를 방지하지는 않지만OOM 킬러완전히 호출되지 않으면 기회가 크게 줄어들어 더 강력한 시스템 동작으로 이어질 것입니다. 이것은 엄격한 오버 커미트 모드를 통해를 선택하여 수행됩니다.sysctl:
sysctl -w vm.overcommit_memory = 2
또는 동등한 항목 배치/etc/sysctl.conf. 관련 설정을 수정하고 싶을 수도 있습니다vm.overcommit_ratio. 자세한 내용은 커널 문서 파일을 참조하십시오.Documentation/VM/Overcommit-Accounting.
변경 유무에 관계없이 사용할 수있는 또 다른 접근법vm.overcommit_memory, 프로세스 별을 설정하는 것입니다OOM_SCORE_ADJ포스트 마스터 프로세스에 대한 가치-1000, 이에 따라 OOM 킬러의 대상이되지 않을 것이라고 보장합니다. 이것을하는 가장 간단한 방법은 실행하는 것입니다
echo -1000/proc/self/oom_score_adj
Postmaster의 시작 스크립트에서 우체국을 호출하기 직전. 이 조치는 근본으로 수행되어야합니다. 그렇지 않으면 효과가 없습니다. 따라서 루트 소유의 스타트 업 스크립트가 가장 쉬운 곳입니다. 이렇게하면 구축을 원할 수도 있습니다PostgreSQLwith-dlinux_oom_score_adj = 0추가CPPFLAGS. 이로 인해 우체국 마스터 아동 프로세스가 정상으로 실행됩니다OOM_SCORE_ADJ0의 값, OOM 킬러가 여전히 필요에 따라 목표를 목표로 삼을 수 있습니다.
오래된 Linux 커널은 제공하지 않습니다/proc/self/oom_score_adj이지만 이전 버전의 동일한 기능이를 가질 수 있습니다./proc/self/oom_adj. 이것은 비활성화 값이를 제외하고 동일하게 작동합니다.-17not-1000. 해당 빌드 플래그PostgreSQLis-dlinux_oom_adj = 0.
참고 :일부 공급 업체의 Linux 2.4 커널은 2.6 오버 커미트의 초기 버전이있는 것으로보고되었습니다sysctl매개 변수. 그러나 설정vm.overcommit_memory43366_43546
vm_enough_memory
파일에서mm/mmap.c) to verify what is supported in your kernel before you try this in a 2.4 installation. 의 존재오버 커미트 계정문서화 파일not기능이 있다는 증거로 간주됩니다. 의심 할 여지없이 커널 전문가 또는 커널 공급 업체를 참조하십시오.
거대한 페이지를 사용하면 큰 연속 메모리 덩어리를 사용할 때PostgreSQL특히 큰 값을 사용할 때.shared_buffers. 이 기능을 사용하려면PostgreSQLconfig_hugetlbfs = y및config_hugetlb_page = y. 커널 설정을 조정해야합니다vm.nr_hugepages. 필요한 거대한 페이지의 수를 추정하려면 시작PostgreSQL거대한 페이지가 활성화되지 않고 우체국 장 마스터를 확인하십시오vmpeak값과 시스템의 거대한 페이지 크기를 사용하여/Proc파일 시스템. 이것은 다음과 같습니다 :
$헤드 -1 $ pgdata/postmaster.pid4170 $grep ^vmpeak/proc/4170/statusVMPEAK : 6490428 KB $grep ^mugypagesize /proc /meminfo거대한 파지즈 : 2048 KB
6490428 / 2048대략 제공3169.154,이 예에서는 최소한 필요합니다3170거대한 페이지.
$sysctl -w vm.nr_hugepages = 3170
기계의 다른 프로그램에도 큰 페이지가 필요한 경우 더 큰 설정이 적절할 것입니다. 이 설정을 추가하는 것을 잊지 마십시오/etc/sysctl.conf재부팅 후에 다시 적용됩니다.
때로는 커널이 원하는 거대한 페이지를 즉시 할당 할 수 없으므로 명령을 반복하거나 재부팅해야 할 수도 있습니다. (재부팅 직후, 대부분의 기계 메모리는 거대한 페이지로 변환 할 수 있어야합니다.) 거대한 페이지 할당 상황을 확인하려면 다음을 사용하십시오.
$grep mgy /proc /meminfo
데이터베이스 서버의 운영 체제 사용자 권한을 설정하여 거대한 페이지를 사용할 수있는 권한을 부여해야 할 수도 있습니다vm.hugetlb_shm_groupviasysctl,/또는 메모리 잠금 허가를ulimit -l.
거대한 페이지의 기본 동작PostgreSQL가능하면 그것들을 사용하고 실패 할 때 일반 페이지로 돌아가는 것입니다. 거대한 페이지의 사용을 시행하려면 설정할 수 있습니다MAGIN_PAGEStooninpostgresql.conf. 이 설정으로PostgreSQL충분한 페이지를 사용할 수 없으면 시작하지 못할 것입니다.
에 대한 자세한 설명은Linux거대한 페이지 기능을 살펴보십시오https : //www.kernel.org/doc/documentation/vm/hugetlbpage.txt.