대형PostgreSQL설치로 인해 다양한 운영 체제가 빠르게 소진될 수 있음 자원 제한. (일부 시스템에서는 공장 기본값이 다음과 같습니다. 정말 필요하지 않을 정도로 낮습니다."대형"설치.) 이런 종류의 문제는 계속 읽으세요.
공유 메모리와 세마포어를 총칭하여 다음과 같이 지칭합니다."시스템 V IPC"(함께 관련 없는 메시지 대기열포스트그레SQL). 거의 모든 현대 운영 시스템은 이러한 기능을 제공하지만 모든 시스템에 이러한 기능이 있는 것은 아닙니다. 기본적으로 켜져 있거나 충분한 크기, 특히 시스템 BSD 유산으로. (에 대한QNX그리고BeOS포트,포스트그레SQL자체 대체품 제공 이러한 시설을 구현합니다.)
이러한 시설의 완전한 부족은 일반적으로 나타납니다 에 의해잘못된 시스템 호출오류 서버 시작 시. 그렇다면 할 수 있는 일은 아무것도 없지만 토토 커뮤니티을 재구성합니다.PostgreSQL그들 없이는 작동하지 않습니다.
언제포스트그레SQL1을 초과함 다양한 하드 중IPC제한, 서버는 시작을 거부하고 발생한 문제를 설명하는 유익한 오류 메시지 그리고 그것에 대해 무엇을 해야할지. (또한 참조섹션 16.3.1.) 관련 커널 매개변수의 이름은 다음과 같습니다. 다양한 시스템에서 일관되게;표 16-2제공 개요. 그러나 설정 방법은 다양합니다. 일부 플랫폼에 대한 제안 사항은 다음과 같습니다. 주의하세요 컴퓨터를 재부팅해야 하는 경우가 종종 있습니다. 이러한 설정을 변경하려면 커널을 다시 컴파일하세요.
표 16-2.시스템 뷔 IPC매개변수
| 이름 | 설명 | 합리적인 값 |
|---|---|---|
| SHMMAX | 공유 메모리 세그먼트의 최대 크기(바이트) | 250KB + 8.2KB *shared_buffers+ 14.2KB *max_connections무한대까지 |
| SHMMIN | 공유 메모리 세그먼트의 최소 크기(바이트) | 1 |
| SHMALL | 사용 가능한 공유 메모리의 총량(바이트 또는 페이지) | 바이트인 경우 다음과 동일SHMMAX; 페이지인 경우,ceil(SHMMAX/PAGE_SIZE) |
| SHMSEG | 최대 공유 메모리 세그먼트 수 프로세스 | 1개의 세그먼트만 필요하지만 기본값은 훨씬 더 많습니다. 더 높은 |
| SHMMNI | 공유 메모리 세그먼트의 최대 수 시스템 전체 | 좋아요SHMSEG추가 공간 다른 응용 프로그램 |
| SEMMNI | 세마포어 식별자의 최대 수(예: 세트) | 적어도ceil(max_connections / 16) |
| SEMMNS | 시스템 전체의 최대 세마포어 수 | ceil(max_connections / 16) * 17다른 응용 프로그램을 위한 공간 추가 |
| SEMMSL | 세트당 세마포어의 최대 수 | 최소 17 |
| SEMMAP | 세마포어 맵의 항목 수 | 텍스트 보기 |
| SEMVMX | 세마포어의 최대값 | 최소 1000(기본값은 대개 32767입니다. 그렇지 않음) 강제로 변경하지 않는 한 변경) |
가장 중요한
공유 메모리 매개변수는SHMMAX,
공유 메모리 세그먼트의 최대 크기(바이트)입니다. 당신이 얻을 경우
의 오류 메시지shmget좋아요잘못된 인수아마도
이 한도를 초과했다는 것입니다. 필요한 크기
공유 메모리 세그먼트는 요청된 개수에 따라 달라집니다.
버퍼(-B옵션) 및 개수
허용된 연결(-N옵션),
전자가 가장 중요하지만. (당신은 할 수 있습니다
임시 해결책인 경우 이러한 설정을 낮추어
실패.) 대략적인 근사치로 추정할 수 있습니다.
제안된 대로 필요한 세그먼트 크기표 16-2. 모두
나타날 수 있는 오류 메시지에는 실패한 파일의 크기가 포함됩니다.
할당을 요청합니다.
일부 시스템에는 총 공유량에도 제한이 있습니다. 시스템의 메모리(SHMALL). 확인 확실히 이것은 충분히 큽니다.PostgreSQL및 기타 응용프로그램 공유 메모리 세그먼트를 사용하고 있습니다. (주의:SHMALL바이트가 아닌 페이지 단위로 측정됩니다. 많은 시스템.)
공유 파일의 최소 크기는 문제를 일으킬 가능성이 적습니다. 메모리 세그먼트(SHMMIN), 이는 최대 약 256kB이어야 합니다.PostgreSQL(보통 1입니다). 는 시스템 전체의 최대 세그먼트 수(SHMMNI) 또는 프로세스별(SHMSEG)은 다음과 같은 경우를 제외하고는 문제를 일으킬 가능성이 없습니다. 귀하의 시스템에서는 0으로 설정되어 있습니다.
PostgreSQL하나를 사용합니다
허용된 연결당 세마포어(-N옵션), 16개 세트. 각 세트에는 17번째 항목도 포함됩니다.
a를 포함하는 세마포어"마법
번호", 다음에서 사용하는 세마포어 세트와의 충돌을 감지합니다.
다른 응용 프로그램. 최대 세마포어 수
시스템은 다음에 의해 설정됩니다.SEMMNS,
결과적으로 최소한 다음만큼 높아야 합니다.max_connections16개당 1개 추가
허용된 연결(공식 참조표 16-2). 는
매개변수SEMMNI한계를 결정합니다
시스템에 존재할 수 있는 세마포어 세트의 수
한 번. 따라서 이 매개변수는 최소한ceil(max_connections / 16). 숫자 낮추기
허용된 연결 수는 오류에 대한 임시 해결 방법입니다.
일반적으로 혼란스럽게 표현됩니다.아니요
기기에 남은 공간, 함수에서semget.
어떤 경우에는 증가가 필요할 수도 있습니다SEMMAP적어도 다음 순서에 해당함SEMMNS. 이 매개변수는 각각의 인접한 세마포어 리소스 맵의 크기 사용 가능한 세마포어 블록에는 항목이 필요합니다. 세마포어일 때 세트가 해제되면 기존 항목에 추가되거나 해제된 블록에 인접하거나 새 지도에 등록된 블록 입장. 맵이 가득 차면 해제된 세마포어는 손실됩니다( 재부팅). 시간이 지남에 따라 세마포어 공간의 단편화가 발생할 수 있음 있어야 할 것보다 더 적은 수의 세마포어를 사용할 수 있게 됩니다.
더SEMMSL매개변수, 이는 한 세트에 얼마나 많은 세마포어가 포함될 수 있는지 결정합니다. 17개 이상PostgreSQL.
기타 관련 설정"세마포 실행 취소", 예를 들어SEMMNU그리고SEMUME, 걱정하지 마세요포스트그레SQL.
공유 메모리.기본적으로 4MB만 공유 메모리가 지원됩니다. 공유했다는 사실을 명심하세요 메모리는 페이징할 수 없습니다. RAM에 잠겨 있습니다. 받는 사람 지원되는 공유 메모리의 양을 늘리십시오. 시스템, 커널에 다음과 같은 것을 추가하십시오 구성 파일:
옵션 "SHMALL=8192" 옵션 "SHMMAX=\(SHMALL*PAGE_SIZE\)"
SHMALL4KB로 측정됩니다. 페이지이므로 값 1024는 4MB의 공유 공간을 나타냅니다. 기억. 따라서 위의 최대값이 증가합니다. 공유 메모리 영역을 32MB로 늘립니다. 4.3 이상을 실행하는 사용자의 경우 나중에는 아마도 증가해야 할 것입니다.KERNEL_VIRTUAL_MB위 기본값248. 모두 변경되면 토토 커뮤니티을 다시 컴파일하고 재부팅하세요.
4.0 및 이전 릴리스를 실행하는 경우 다음을 사용하세요.bp패치찾기 위해sysptsize현재 커널의 값입니다. 이는 부팅 시 동적으로 계산됩니다.
$ bpatch -r sysptsize 0x9 = 9
다음, 추가SYSPTSIZE로 토토 커뮤니티 구성 파일에 하드 코딩된 값입니다. 다음을 사용하여 찾은 값을 늘립니다.bpatch. 4MB가 추가될 때마다 1을 추가합니다. 당신이 원하는 공유 메모리.
옵션 "SYSPTSIZE=16"
sysptsize변경될 수 없습니다 으로sysctl.
세마포어.당신은 아마도 다음을 원할 것입니다 세마포어 수도 늘리십시오. 기본값 시스템 총 60개는 약 50개만 허용됩니다.포스트그레SQL연결. 토토 커뮤니티에서 원하는 값을 설정하십시오. 구성 파일, 예:
옵션 "SEMMNI=40" 옵션 "SEMMNS=240"
옵션SYSVSHM그리고SYSVSEM다음 경우에 활성화해야 합니다. 커널이 컴파일되었습니다. (기본값입니다.) 공유 메모리의 최대 크기는 옵션에 따라 결정됩니다.SHMMAXPGS(페이지 단위). 는 다음은 다양한 설정 방법의 예를 보여줍니다. 매개변수:
옵션 SYSVSHM 옵션 SHMMAXPGS=4096 옵션 SHMSEG=256 옵션 SYSVSEM 옵션 SEMMNI=256 옵션 SEMMNS=512 옵션 SEMMNU=256 옵션 SEMMAP=256
(켜기OpenBSD열쇠 실제로는 말이야옵션단수.)
또한 커널을 잠그도록 구성할 수도 있습니다 메모리를 RAM으로 공유하고 페이징을 방지합니다. 교환하러 나감. 다음을 사용하세요.sysctl설정kern.ipc.shm_use_phys.
기본 설정은 일반 환경에 충분한 경향이 있습니다. 설치. 켜짐HP-UX10, 공장 기본값:SEMMNS은 128입니다. 이는 너무 낮을 수 있습니다. 더 큰 데이터베이스 사이트.
IPC매개변수는 에서 설정하세요.시스템 관리 관리자 (샘) 아래토토 커뮤니티 구성-구성 가능한 매개변수. 히트새 토토 커뮤니티 생성언제 넌 끝났어.
기본 공유 메모리 제한(둘 다SHMMAX그리고SHMALL)은 2.2 토토 커뮤니티에서 32MB이지만 에서 변경할 수 있습니다.proc파일 시스템(재부팅하지 않음). 예를 들어 128을 허용하려면 MB:
$ 에코 134217728 /proc/sys/kernel/shmall $ 에코 134217728 /proc/sys/kernel/shmmax
다음 명령을 다음에서 실행되는 스크립트에 넣을 수 있습니다. 부팅 시간.
또는 다음을 사용할 수도 있습니다.sysctl, 사용 가능한 경우 이를 제어하려면 매개변수. 라는 파일을 찾으세요./etc/sysctl.conf그리고 다음과 같은 줄을 추가하세요 따라가세요:
kernel.shmall = 134217728 kernel.shmmax = 134217728
이 파일은 일반적으로 부팅 시 처리되지만sysctl또한 호출될 수 있습니다 나중에 명시적으로.
다른 매개변수의 크기는 어떤 용도에도 충분합니다. 신청. 직접 보고 싶다면 살펴보세요./usr/src/linux/include/asm-xxx/shmparam.h그리고/usr/src/linux/include/linux/sem.h.
OS X 10.2 이하에서는 파일을 편집하세요./시스템/라이브러리/StartupItems/SystemTuni토토 커뮤니티/SystemTuni토토 커뮤니티다음 명령의 값을 변경합니다.
sysctl -w kern.sysv.shmmax sysctl -w kern.sysv.shmmin sysctl -w kern.sysv.shmmni sysctl -w kern.sysv.shmseg sysctl -w kern.sysv.shmall
OS X 10.3에서는 이 명령이 다음으로 이동되었습니다./etc/rc편집해야 함 거기. 변경 사항을 적용하려면 재부팅해야 합니다. 참고하세요/etc/rc보통은 OS X 업데이트(예: 10.3.6~10.3.7)로 덮어쓰여지므로 각 작업 후에 편집을 다시 실행해야 할 것으로 예상됩니다. 업데이트합니다.
SHMALL4KB로 측정됩니다. 이 플랫폼의 페이지입니다.
기본 구성에서는 512kB만 공유됩니다. 세그먼트당 메모리가 허용됩니다. 이 정도면 충분합니다.-B 24 -N 12. 증가시키기 위해 설정, 먼저 디렉토리로 변경/etc/conf/cf.d. 현재를 표시하려면 값SHMMAX, 실행
./configure -y SHMMAX
새 값을 설정하려면SHMMAX, 실행
./SHMMAX 구성=값
어디에서값새로운 것입니다 사용하려는 값(바이트 단위)입니다. 설정 후SHMMAX, 토토 커뮤니티을 다시 빌드합니다:
./link_unix
그리고 재부팅하세요.
적어도 버전 5.1부터는 필요하지 않습니다. 다음과 같은 매개변수에 대해 특별한 구성을 수행하려면SHMMAX, 보이는 대로 이것은 모든 메모리를 공유 메모리로 사용할 수 있도록 구성됨 기억. 일반적으로 사용되는 구성입니다. 다음과 같은 다른 데이터베이스의 경우DB/2.
그러나 전역을 수정해야 할 수도 있습니다.ulimit정보/etc/보안/제한, 기본 하드로 파일 크기 제한(fsize) 및 파일 수(노파일) 너무 낮을 수도 있습니다.
적어도 버전 2.6에서는 기본 최대 크기 공유 메모리 세그먼트가 너무 적습니다.PostgreSQL. 관련 설정 에서 변경될 수 있습니다./etc/시스템, 예를 들면:
shmsys:shminfo_shmmax=0x2000000 설정 shmsys:shminfo_shmmin=1로 설정 shmsys:shminfo_shmmni=256으로 설정 shmsys: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.html공유 메모리에 대한 정보는 아래솔라리스.
켜기유닉스웨어7, 공유 메모리 세그먼트의 최대 크기는 512kB입니다. 기본 구성. 이 정도면 약-B 24 -N 12. 표시하려면 현재 가치SHMMAX, 실행
/etc/conf/bin/idtune -g SHMMAX
현재, 기본값, 최소값 및 최대값. 에 대한 새 값을 설정하려면SHMMAX, 실행
/etc/conf/bin/idtune SHMMAX값
어디에서값새로운 것입니다 사용하려는 값(바이트 단위)입니다. 설정 후SHMMAX, 토토 커뮤니티을 다시 빌드합니다:
/etc/conf/bin/idbuild -B
그리고 재부팅하세요.
유닉스 계열 운영체제는 다양한 종류의
귀하의 운영을 방해할 수 있는 리소스 제한포스트그레SQL서버. 의
특히 중요한 점은 프로세스 수에 대한 제한입니다.
사용자, 프로세스당 열린 파일 수,
각 프로세스에서 사용할 수 있는 메모리 이들 각각에는"단단한"그리고"소프트"한계. 소프트 한도는 실제로
개수로 계산되지만 하드 제한까지 사용자가 변경할 수 있습니다.
하드 제한은 루트 사용자만 변경할 수 있습니다. 시스템
전화setrlimit다음을 담당합니다.
이러한 매개변수를 설정합니다. 셸의 내장 명령ulimit(본 쉘) 또는한계 (csh)은
명령줄에서 리소스 제한을 제어하는 데 사용됩니다. 켜기
BSD 파생 시스템 파일/etc/login.conf다양한 자원을 제어합니다
로그인 중에 설정된 제한. 운영 체제 설명서를 참조하세요.
자세한 내용은. 관련 매개변수는 다음과 같습니다.maxproc, 열린 파일및데이터 크기. 예를 들면:
기본값:\
...
:datasize-cur=256M:\
:maxproc-cur=256:\
:openfiles-cur=256:\
...
(-현재소프트 한계입니다. 추가-최대하드 제한을 설정합니다.)
토토 커뮤니티은 일부에 대해 시스템 전체에 대한 제한을 가질 수도 있습니다. 자원.
켜기리눅스 /proc/sys/fs/file-max결정한다 커널이 지원할 최대 열린 파일 수입니다. 에 다른 번호를 적어서 변경할 수 있습니다. 파일 또는 과제를 추가하여/etc/sysctl.conf. 최대 한도 프로세스당 파일은 토토 커뮤니티이 업데이트될 때 수정됩니다. 컴파일; 참조/usr/src/linux/Documentation/proc.txt용 자세한 정보.
그포스트그레SQL서버가 사용함 연결당 하나의 프로세스를 제공하므로 최소한 허용되는 연결 수만큼의 프로세스 시스템의 나머지 부분에 필요합니다. 이것은 일반적으로 문제는 하나의 시스템에서 여러 서버를 실행하는 경우 꽉 막힐 수도 있어요.
열린 파일에 대한 공장 기본 제한은 종종 다음과 같이 설정됩니다."사회 친화적"가치 많은 사용자가 별도의 장치를 사용하지 않고도 한 컴퓨터에 공존할 수 있도록 합니다. 시스템 리소스의 부적절한 부분. 많이 달리면 머신의 서버는 아마도 여러분이 원하는 것일 수도 있지만 전용 서버에서는 이 한도를 높일 수 있습니다.
동전의 반대편에는 일부 시스템이 개인을 허용합니다. 많은 수의 파일을 여는 프로세스; 몇 개 이상이라면 프로세스가 그렇게 하면 시스템 전체의 한계가 쉽게 초과했습니다. 이런 일이 발생하고 싶지 않은 경우 시스템 전체 제한을 변경하고 설정할 수 있습니다.PostgreSQL'smax_files_per_process오픈 소비를 제한하는 구성 매개변수 파일.
Linux 2.4 이상에서는 기본 가상 메모리 동작 에 최적이 아닙니다.PostgreSQL. 토토 커뮤니티이 메모리를 구현하는 방식 때문에 오버커밋하면 토토 커뮤니티이 종료될 수 있습니다.PostgreSQL서버 (우체국장프로세스) 메모리가 필요한 경우 다른 프로세스로 인해 시스템의 가상 공간이 부족해짐 기억.
이런 일이 발생하면 다음과 같은 커널 메시지가 표시됩니다. 이와 같이(시스템 문서 및 구성을 참조하십시오. 그러한 메시지를 찾을 수 있는 곳):
메모리 부족: 프로세스 12345(포스트마스터)가 종료되었습니다.
이것은 다음을 나타냅니다.우체국장메모리 부족으로 인해 프로세스가 종료되었습니다. 비록 기존 데이터베이스 연결은 계속 작동합니다. 일반적으로 새로운 연결은 허용되지 않습니다. 회복하려면,PostgreSQL이 필요합니다 다시 시작되었습니다.
이 문제를 피하는 한 가지 방법은 다음을 실행하는 것입니다.PostgreSQL당신이 할 수 있는 기계에서 다른 프로세스에서 시스템이 실행되지 않는지 확인하십시오. 기억.
Linux 2.6 이상에서 더 나은 해결책은 다음을 수정하는 것입니다. 커널의 동작을 방지합니다."오버커밋"메모리. 이는 선택하여 수행됩니다. 엄격한 오버커밋 모드를 통해sysctl:
sysctl -w vm.overcommit_memory=2
또는 동등한 항목 배치/etc/sysctl.conf. 수정하고 싶을 수도 있습니다. 관련 설정vm.overcommit_ratio. 자세한 내용은 커널을 참조하세요. 문서 파일문서/vm/overcommit-accounting.
일부 공급업체의 Linux 2.4 토토 커뮤니티은 초기 버전인 것으로 보고되었습니다.
2.6 오버커밋 버전sysctl매개변수. 그러나 설정vm.overcommit_memory커널에서는 2로 설정
관련 코드가 없으면 상황이 좋아지기는 커녕 더 나빠질 것입니다.
실제 커널 소스를 검사하는 것이 좋습니다
코드(함수 참조vm_enough_memory파일에서mm/mmap.c)에서 지원되는 내용을 확인하려면
2.4 설치에서 이 작업을 시도하기 전에 복사하십시오. 존재과도한 커밋-회계문서 파일은 다음과 같습니다아님다음의 증거로 간주됩니다.
기능이 있습니다. 의심스러운 경우 커널 전문가에게 문의하거나
커널 공급업체.