16.5. �����ں���Դ

һ�δ���PostgreSQL��װ������׺ľ����ֲ���ϵͳ����Դ���ޡ� ������Щϵͳ�ϣ��������õ͵��㶼����һ��"����"��װ���� ����������������⣬������Ķ���

16.5.1. �����ڴ���źŵ�

�����ڴ���źŵƵ���ȷ�з���"System VIPC" ��������Ϣ���У���������PostgreSQL����ûʲô��ϵ���� ���������ִ�����ϵͳ���ṩ������ԣ�������������ϵͳȱʡ�������������㹻����Դ���������� BSD ��Դ��ϵͳ�� ������QNX��BeOS��ֲ��PostgreSQL�Լ��ṩ���׻��Ƶ��滻ʵ�֡���

��ȫȱ����Щ���Ƶı���ͨ�����ڷ�����������ʱ��� Illegal system call���� ��ʱ�������������ں�����ûʲô�����ġ� PostgreSQL û���Ǹɲ��˻

��� PostgreSQL ��������ЩIPC ��Դ��Ӳ����֮һ��ʱ��ͻ�ܾ�������������һ���൱�������ԵĴ�����Ϣ��������������ʲô�����Լ���ҪΪ����Щʲô�� ���ּ� Section 16.3.1���� ��ص��ں˲����ڲ�ͬϵͳ֮��������Թ̶������Table 16-2 ��һ���ſ��� �������������ǵķ���ȴ���ֶ���������Ҫע����ǣ�������������������Ļ��������߻�Ҫ���±����ں����޸���Щ���á�

Table 16-2. System V IPC����

������������ȡֵ
SHMMAX������ڴ�γߴ磨�ֽڣ�250kB + 8.2 kB * shared_buffers + 14.2 kB * 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�����DZ��ȣ�����Ҫ�޸ģ�

����Ҫ�Ĺ����ڴ������ SHMMAX�� ���ֽڼǵĹ����ڴ�ο�ӵ�е����ߴ硣 ������յ�����shmget������Invalid argument �����Ĵ�����Ϣ����ô���п������㳬�������ˡ� Ҫ��Ĺ����ڴ����������Ļ�����������-Bѡ������������������-Nѡ��ı仯���仯�� ����ǰ��������Ҫ�����ء� ����ˣ���Ϊһ����ʱ�Ľ������������Խ�����Щ�������ƹ�ʧ�ܡ��� ������Եع��ƣ�����Թ�������Ҫ�Ķγߴ磬�� Table 16-2 ���н��顣 �κ���õ��Ĵ�����Ϣ�����������ʧ�ܵijߴ硣

��Щϵͳ��ϵͳ���湲���ڴ��������SHMALL���������ơ� ��ע�������ֵ�����㹻�󣬴�PostgreSQL ��������ʹ�ù����ڴ�ε�Ӧ�õ��ܺ͡� ��ע�⣺SHMALL �ںܶ�ϵͳ������ҳ�������������ֽ���������ġ���

��̫���ܳ�������ǹ����ڴ�ε���С�ߴ磨SHMMIN���� �� PostgreSQL��˵��Լ�� 256 kB ���ң�ͨ��ֻ�� 1���� ��ϵͳ��Χ��SHMMNI����ÿ���̣�SHMSEG�� ������ڴ��������Ӧ�û�������⣬�������ϵͳ����������㡣

PostgreSQL ÿ�����������ʹ��һ���źŵƣ�-Nѡ��� �� 16 ��Ϊһ�ס�ÿ���źŵƻ�������ʮ�߸��źŵƣ� ������洢һ��"magic number����־���֣�"�� �Լ�������Ӧ��ʹ�õ��źŵƼ���ͻ�� ϵͳ�������źŵ���Ŀ����SEMMNS���õģ� ������ֵӦ�����ٺ� max_connections ����һ���󣬲���ÿʮ�������ӻ�Ҫ�����һ���� ������Table 16-2 ����Ĺ�ʽ���� ����SEMMNI����ϵͳ��һ�ο��Դ��ڵ��źŵƼ�����Ŀ�� ��������������Ӧ��Ϊ ceil(max_connections % 16)�� ���������������Ŀ��һ����ʱ���ƿ�ʧ�ܵķ������������ʧ��ͨ�������Ժ���semget �Ĵ�����Ӧ No space left on device ��ú������Ի�

��ʱ�򻹿����б�Ҫ����SEMMAP��ʹ֮���ٰ��� SEMMNS���á�������������źŵ���Դӳ��ijߴ磬 ���õ�ÿ���������źŵƿ������ӳ���д��һ����¼�� ÿ��һ���źŵƱ��ͷţ���ô��Ҫô����뵽��ӳ����һ�����������ͷŵĿ������У�Ҫôע���һ���µ���ڡ����ӳ����������Ƭ�� ��ô���ͷŵ��źŵƾͶ�ʧ�ˣ��������𣩡����ʱ�䳤�źŵƿռ����Ƭ�˻ᵼ�¿��õ��źŵƱ�Ӧ���е��źŵ��١�

SEMMSL ����������һ���źŵ�������ж����źŵƣ����� PostgreSQL����Ӧ�������� 17��

��������� "semaphore undo���źŵƻָ���"�йأ����� SEMMNU �� SEMUME����Щ�� PostgreSQL �޹ء�

BSD/OS

�����ڴ�. ȱʡʱ��ֻ֧�� 4 MB �Ĺ����ڴ档���ס�����ڴ��Dz��ܷ�ҳ�ģ��������� RAM ����ġ� Ҫ�������ϵͳ֧�ֵĹ���������Ŀ��������ں������ļ�������������У�

options "SHMALL=8192"
options "SHMMAX=\(SHMALL*PAGE_SIZE\)"

SHMALL �� 4KB ҳΪ��λ���㣬���� 1024 ҳ����� 4 M �����ڴ档 ��������Ķ����ѹ����ڴ��������ӵ� 32 MB�� �������� 4.3 ���߸��°汾���ˣ��������Ҫ���� KERNEL_VIRTUAL_MB�� ����ȱʡ�� 248������������޸�֮��Ȼ������ں˲�����

�������� 4.0 ���߸���İ汾�ģ� ���� bpatch �ҳ���ǰ�ں˵� sysptsizeֵ������������ʱ��̬����ġ�

$ bpatch -r sysptsize
0x9 = 9

Ȼ�󣬰� SYSPTSIZE�޸�Ϊ���ں������ļ����һ��Ӳ����ֵ�� �� bpatch �������ֵ������Ϊ����Ҫ��ÿ������� 4 MB �����ڴ��ټ� 1��

options "SYSPTSIZE=16"

sysptsize������ sysctl �޸ġ�

�źŵ�. ����ܻ���Ҫ�����źŵƵ�������ϵͳȱʡ������ 60 ֻ�������� 50 �� PostgreSQL ���ӡ� ���ں������ļ�����������Ҫ��ֵ�����磺

options "SEMMNI=40"
options "SEMMNS=240"

FreeBSD
NetBSD
OpenBSD

�����ں�ʱ��Ҫ��ѡ�� SYSVSHM �� SYSVSEM�򿪡� ��ȱʡ�Ǵ򿪵ġ��������ڴ�����ߴ�����ѡ��SHMMAXPGS����ҳ�ƣ��� ������ʾ��һ�����������Щ���������ӣ�

options         SYSVSHM
options         SHMMAXPGS=4096
options         SHMSEG=256

options         SYSVSEM
options         SEMMNI=256
options         SEMMNS=512
options         SEMMNU=256
options         SEMMAP=256

���� NetBSD �� OpenBSD� �ؼ���ʵ�����ǵ����� option��

�����ԭ��ʹ�� sysctl ���ý������ڴ����� RAM ���Ա������DZ�������ȥ��Ҳ����kern.ipc.shm_use_phys��

HP-UX

ȱʡ���ÿ�������ͨ��װ���㹻���ˡ� �� HP-UX 10��SEMMNS�ij���ȱʡ�� 128�� ���ܶԴ�����ݿ�ڵ���˵̫С�ˡ�

IPC������ System Administration Manager��ϵͳ�������� ��SAM������� Kernel Configuration->Configurable Parameters ���á������������Ժ��� Create A New Kernelѡ�

Linux

�� 2.2 �ں���ȱʡ�Ĺ����ڴ����ƣ� SHMMAX �� SHMALL������ 32 MB�� ����������� proc �ļ�ϵͳ���޸���Щֵ���������𣩡� ���磬Ҫ���� 128 MB��

$ echo 134217728 >/proc/sys/kernel/shmall
$ echo 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.

MacOS X

�� OS X 10.2 �Լ�����汾� �༭�ļ� /System/Library/StartupItems/SystemTuning/SystemTuning ���������������޸���Щ��ֵ��

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��������ÿ�θ��º�����ܶ���Ҫ���±༭��

�����ƽ̨�ϣ�SHMALL ���� 4KB ҳ�������ġ�

SCO OpenServer

ȱʡ����ʱ��ֻ����ÿ�� 512KB �����ڴ棬���ֻ�� -B 24 -N 12�õġ� Ҫ�������ã����Ƚ��� /etc/conf/cf.dĿ¼�� Ҫ��ʾ��ǰ�����ֽڼǵ� SHMMAX������

./configure -y SHMMAX

���� SHMMAX����ֵ��

./configure SHMMAX=value

���� value ���������õ����ֽڼǵ���ֵ�� ���������Ժ�SHMMAX���������ں�

./link_unix

Ȼ������

AIX

���ٶ��ڰ汾 5.1 ���ԣ������б�ҪΪ���� SHMMAX �����IJ�������������ã� ��Ϊ���������������Ϊ�������ݶ����������ڴ�ʹ�á���������� DB/2 ���������ݿⳣ�õ����á�

���������ǿ����б�Ҫ�� /etc/security/limits �����޸�ȫ�� ulimit ulimit ��Ϣ����Ϊ�ļ���С��ȱʡӲ���ƣ�fsize���Լ��ļ�����nofiles������̫���ˡ�

Solaris

���ٵ��汾 2.6 Ϊֹ�������ڴ�ε�ȱʡ������ö� PostgreSQL ��˵��̫���ˡ���ص����ÿ�����/etc/system�����޸ģ� ���磺

set shmsys:shminfo_shmmax=0x2000000
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=256
set shmsys:shminfo_shmseg=256
set semsys:seminfo_semmap=256
set semsys:seminfo_semmni=512
set semsys:seminfo_semmns=512
set semsys:seminfo_semmsl=32

��Ҫ����ϵͳ���޸���Ч��

�ּ� http://sunsite.uakom.sk/sunworldonline/swol-09-1997/swol-09-insidesolaris.html ��ȡ���� Solaris ����Ĺ����ڴ����Ϣ��

UnixWare

�� UnixWare 7 �ϣ�ȱʡ�������������ڴ���� 512 kB�� �����ֻ��-B 24 -N 12�õġ�Ҫ��ʾSHMMAX�ĵ�ǰֵ������

/etc/conf/bin/idtune -g SHMMAX

�ͻ���ʾ���ֽڼǵĵ�ǰ��ȱʡ����С�����ֵ�� Ҫ��SHMMAX����һ����ֵ�����У�

/etc/conf/bin/idtune SHMMAX value

���� value���������õ����ֽڼǵ���ֵ�� ������SHMMAX���ؽ��ں�

/etc/conf/bin/idbuild -B

Ȼ������

16.5.2. ��Դ����

Unix ��ϵͳǿ���������Դ���ƣ���Щ���ƿ��ܸ������ PostgreSQL �����������С� ����������Ҫ�Ƕ�ÿ���û��Ľ�����Ŀ�����ƣ�ÿ�����̴��ļ���Ŀ�� �Լ�ÿ�����̿��õ��ڴ档 ��Щ������ÿ������һ��"Ӳ"���ƺ�һ��"��"���ơ� ������ʵ���ǹ��õģ����û������Լ��޸ij����ΪӲ���Ƶ���Ŀ�� ��Ӳ������ֻ���� root �û��޸ĵ����ơ� ϵͳ���� setrlimit ����������Щ������ shell ���ڽ����� ulimit��Bourne shells�� ��limit ��csh�� �����������������Ͽ�����Դ���Ƶġ� �� BSD ������ϵͳ�ϣ��ļ�/etc/login.conf �����ڵ�¼ʱ�Ը�����Դ����ʲô����������ֵ�����IJ���ϵͳ�ĵ���ȡϸ�ڡ� ��صIJ����� maxproc�� openfiles���� datasize�� ���磺

default:\
...
        :datasize-cur=256M:\
        :maxproc-cur=256:\
        :openfiles-cur=256:\
...

��-cur �������ƣ����渽�� -max �Ϳ�������Ӳ���ơ���

�ں�ͨ��Ҳ��һЩϵͳ��Χ����Դ���ơ�

PostgreSQL ������ÿ�����Ӷ�ʹ��һ�����̣� ������Ӧ�������������������ͬ�Ľ��������ټ������ϵͳ������������Ҫ����Ŀ�� ͨ�����������ʲô���⣬���������һ̨���������ж���������������Ҫ�������������

���ļ���Ŀ�ij���ȱʡ����ͨ������Ϊ"����Ѻ�"��ֵ������˵��������û�������һ̨������ �����ᵼ��ֻʹ��ϵͳ��Դ�IJ����������������һ̨����������������������Ҳ���������Ҫ�ģ�����������ķ������ϣ��������Ҫ���������ơ�

���������һ�ߣ�һЩϵͳ��������Ľ��̴򿪷dz�����ļ����������ô����������ô�ɣ���ϵͳ��Χ�����޾ͺ����״ﵽ�� ����㷢�����������󣬲��Ҳ����޸�ϵͳ��Χ�����ƣ� ��Ϳ��԰� PostgreSQL �� max_files_per_process ���ò��������ƴ��ļ��������ġ�

16.5.3. Linux �ڴ���ύ

�� Linux 2.4 �Լ�֮��İ汾�ȱʡ�������ڴ����Ϊ���Ƕ� PostgreSQL ���ŵġ� ԭ�����ں�ʵ���ڴ���ύ�ķ���������������̵��ڴ�������ϵͳ�ù������ڴ棬 ��ô�ں˿��ܻ���ֹ PostgreSQL ��������postmaster���̣���

������������������飬��ῴ���������������ں���Ϣ���ο����ϵͳ�ĵ������ã������������ܿ�����������Ϣ����

Out of Memory: Killed process 12345 (postmaster).

��ͱ��� postmaster ��Ϊ�ڴ�ѹ������ֹ�ˡ� �������е��������ӽ�����������ת�������µ����ӽ��޷����ܡ� Ҫ��ָ�����Ӧ������ PostgreSQL��

һ�������������ķ�������һ̨��ȷ�Ų�����Ϊ�������̶��ľ��ڴ�Ļ��������� PostgreSQL��

�� Linux 2.6 �Լ��Ժ�İ汾�һ�����õĽ���������޸��ڴ����Ϊ�� �������Ͳ�����"���ύ"�ڴ档����ͨ���� sysctl ѡȡһ���ϸ�Ĺ��ύģʽʵ�ֵģ�

sysctl -w vm.overcommit_memory=2

������ /etc/sysctl.conf ���һ����Ч����Ŀ�� ����ܻ�ϣ���޸���ص����� vm.overcommit_ratio�� ��ϸ��Ϣ������ں��ĵ��ļ� Documentation/vm/overcommit-accounting��

��Щ��Ӧ�̵� Linux 2.4 �ں��������� 2.6 ���ύ�� sysctl�� ��������û����ش�����ں������� vm.overcommit_memory Ϊ 2 ֻ����������㣬�����Ǹ��á� ���ǽ�������һ��ʵ�ʵ��ں�Դ���루�����ļ� mm/mmap.c ����� vm_enough_memory �������� ��ʵһ�����������İ汾����ڵģ�Ȼ������ 2.4 �ں���ʹ��������ԡ� �ĵ��ļ� overcommit-accounting �Ĵ������ܵ�����������Դ��ڵ�֤���� ��������⣬��ѯ������ں˹�Ӧ�̵�ר�ҡ�