เบ›เบฑเบšเบ•เบปเบงเป€เบฅเบทเบญเบ Linux Kernel เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš PostgreSQL

เบ›เบฑเบšเบ•เบปเบงเป€เบฅเบทเบญเบ Linux Kernel เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš PostgreSQL เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” PostgreSQL เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ OS kernel เบ—เบตเปˆเบšเปเปˆเบ”เบตเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเบ”เบต. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบญเบตเบ‡เบ•เบฒเบกเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบกเบฑเบ™. เปƒเบ™เบšเบปเบ”เบ‚เบฝเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบเปˆเบฝเบงเบเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ Linux kernel เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบžเบงเบเบกเบฑเบ™.

SHMMAX / SHMALL

SHMMAX เปเบกเปˆเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ kernel เบ—เบตเปˆเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบ‚เบฐเบซเบ™เบฒเบ”เบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบชเปˆเบงเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เบ”เบฝเบงเบ—เบตเปˆเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ Linux เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบชเบฑเบ™. เบเปˆเบญเบ™เป€เบงเบตเบŠเบฑเบ™ 9.2, PostgreSQL เปƒเบŠเป‰ System V (SysV), เป€เบŠเบดเปˆเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ SHMMAX. เบซเบผเบฑเบ‡เบˆเบฒเบ 9.2, PostgreSQL เป„เบ”เป‰เบ›เปˆเบฝเบ™เป„เบ›เปƒเบŠเป‰เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™ POSIX. เบชเบฐเบ™เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบˆเบณเบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบš V เปœเป‰เบญเบเบฅเบปเบ‡.

เบเปˆเบญเบ™เป€เบงเบตเบŠเบฑเบ™ 9.3, SHMMAX เปเบกเปˆเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ kernel เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”. เบ„เปˆเบฒ SHMMAX เบ–เบทเบเบฅเบฐเบšเบธเป€เบ›เบฑเบ™เป„เบšเบ•เปŒ.

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, SHMALL เปเบกเปˆเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ kernel เบญเบทเปˆเบ™เบ—เบตเปˆเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”
เบ›เบฐเบฅเบดเบกเบฒเบ™เบ—เบปเปˆเบงเบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เปœเป‰เบฒเบ„เบงเบฒเบกเบˆเบณเบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™. เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบ„เปˆเบฒ SHMMAX, SHMALL, เบซเบผเบท SHMMIN เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ ipcs.

SHM* เบฅเบฒเบเบฅเบฐเบญเบฝเบ” - Linux

$ ipcs -lm

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 1073741824
max total shared memory (kbytes) = 17179869184
min seg size (bytes) = 1

SHM* เบฅเบฒเบเบฅเบฐเบญเบฝเบ” - MacOS X

$ ipcs -M
IPC status from  as of Thu Aug 16 22:20:35 PKT 2018
shminfo:
	shmmax: 16777216	(max shared memory segment size)
	shmmin:       1	(min shared memory segment size)
	shmmni:      32	(max number of shared memory identifiers)
	shmseg:       8	(max shared memory segments per process)
	shmall:    1024	(max amount of shared memory in pages)

PostgreSQL เปƒเบŠเป‰ เบฅเบฐเบšเบปเบš V IPC เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบชเบฑเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™. เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ kernel เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”. เป€เบกเบทเปˆเบญเปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบกเบฑเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบต PostgreSQL เบฎเบธเปˆเบ™เป€เบเบปเปˆเบฒเปเบฅเบฐเบ„เปˆเบฒ SHMMAX เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบกเปˆเบ™เบ•เปเปˆเบฒเบซเบผเบฒเบ. เบœเบนเป‰เปƒเบŠเป‰เบ„เบฒเบ”เบงเปˆเบฒเบˆเบฐเบ›เบฑเบšเปเบฅเบฐเป€เบžเบตเปˆเบกเบกเบนเบ™เบ„เปˆเบฒเบ•เบฒเบกเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ•เบฑเป‰เบ‡เปƒเบˆเบˆเบฐเปƒเบŠเป‰.

เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰

เบ–เป‰เบฒ SHMMAX เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบฐเบเบฒเบเบฒเบกเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบธเปˆเบก PostgreSQL เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡. initdb.

initdb เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบง
DETAIL: Failed system call was shmget(key=1, size=2072576, 03600).

HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. 
You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 2072576 bytes),
reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.

If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter,
in which case raising the request size or reconfiguring SHMMIN is called for.

The PostgreSQL documentation contains more information about shared memory configuration. child process exited with exit code 1

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ PostgreSQL เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ pg_ctl.

pg_ctl เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบง
DETAIL: Failed system call was shmget(key=5432001, size=14385152, 03600).

HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.

You can either reduce the request size or reconfigure the kernel with larger SHMMAX.; To reduce the request size (currently 14385152 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.

If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter,
in which case raising the request size or reconfiguring SHMMIN is called for.

The PostgreSQL documentation contains more information about shared memory configuration.

เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบ™เบดเบเบฒเบก

เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต SHMMAX/SHMALL เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™ Linux เปเบฅเบฐ MacOS X:

  • Linux: kernel.shmmax, kernel.shmall
  • MacOS X: kern.sysv.shmmax, kern.sysv.shmall

เบ—เบตเบกเบ‡เบฒเบ™ sysctl เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เบ„เปˆเบฒเบŠเบปเปˆเบงเบ„เบฒเบง. เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆ, เปƒเบซเป‰เป€เบžเบตเปˆเบกเบฅเบฒเบเบเบฒเบ™เปƒเบชเปˆ /etc/sysctlconf. เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบขเบนเปˆเบฅเบธเปˆเบกเบ™เบตเป‰.

เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Kernel เปƒเบ™ MacOS X

# Get the value of SHMMAX
sudo sysctl kern.sysv.shmmax
kern.sysv.shmmax: 4096

# Get the value of SHMALL
sudo sysctl kern.sysv.shmall 
kern.sysv.shmall: 4096

# Set the value of SHMMAX
sudo sysctl -w kern.sysv.shmmax=16777216
kern.sysv.shmmax: 4096 -> 16777216

# Set the value of SHMALL 
sudo sysctl -w kern.sysv.shmall=16777216
kern.sysv.shmall: 4096 -> 16777216

เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ Kernel เปƒเบ™ Linux

# Get the value of SHMMAX
sudo sysctl kernel.shmmax
kernel.shmmax: 4096

# Get the value of SHMALL
sudo sysctl kernel.shmall
kernel.shmall: 4096

# Set the value of SHMMAX
sudo sysctl -w kernel.shmmax=16777216
kernel.shmmax: 4096 -> 16777216

# Set the value of SHMALL 
sudo sysctl -w kernel.shmall=16777216
kernel.shmall: 4096 -> 16777216

เบขเปˆเบฒโ€‹เบฅเบทเบก: เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ–เบฒเบงเบญเบ™, เป€เบžเบตเปˆเบกเบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบชเปˆ /etc/sysctl.conf

เบซเบ™เป‰เบฒเปƒเบซเบเปˆ

Linux เปƒเบŠเป‰เบซเบ™เป‰เบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ 4 KB เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, BSD เปƒเบŠเป‰เบซเบ™เป‰เบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ XNUMX KB. เปœเป‰เบฒ Super, เปเบฅเบฐเปƒเบ™ Windows - เบซเบ™เป‰เบฒเปƒเบซเบเปˆ. เบซเบ™เป‰เบฒเปเบกเปˆเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ RAM เบ—เบตเปˆเบˆเบฑเบ”เบชเบฑเบ™เปƒเบซเป‰เบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเบฒเบกเบฒเบ”เบกเบตเบซเบผเบฒเบเบซเบ™เป‰เบฒเบ‚เบถเป‰เบ™เบเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเปƒเบ”, เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™เบซเบผเบฒเบเปœเป‰เบฒ. OS เบฎเบฑเบเบชเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบˆเบฑเบ”เบชเบฑเบ™เบซเบ™เป‰เบฒเบชเปเบฒเบฅเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ™เป‰เบญเบเบฅเบปเบ‡, เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบซเบเปˆเบเบงเปˆเบฒ, เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบเบงเปˆเบฒเป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบซเบ™เป‰เบฒเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบซเบ™เป‰เบฒเบ™เบฑเป‰เบ™. เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡ overhead; เบเบฒเบ™เป€เบšเบดเปˆเบ‡เปœเป‰เบฒเปœเป‰เบญเบเบฅเบปเบ‡, เบ„เบงเบฒเบกเบœเบดเบ”เบ‚เบญเบ‡เปœเป‰เบฒเปœเป‰เบญเบเบฅเบปเบ‡, เบเบฒเบ™เบ”เบณเป€เบ™เบตเบ™เบเบฒเบ™เบญเปˆเบฒเบ™/เบ‚เบฝเบ™เป„เบงเบเบงเปˆเบฒ buffers เบ—เบตเปˆเปƒเบซเบเปˆเบเบงเปˆเบฒ. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

PostgreSQL เบฎเบญเบ‡เบฎเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปƒเบ™ Linux. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, Linux เปƒเบŠเป‰เบซเบ™เป‰เบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ 4 KB, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบฑเป‰เบ‡เบซเบ™เป‰เบฒเปƒเบซเบเปˆเบเบงเปˆเบฒ. เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบกเปˆเบ™เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เป€เบกเบทเปˆเบญเปƒเบŠเป‰เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ 2 MB เปเบฅเบฐเบชเบนเบ‡เป€เบ–เบดเบ‡ 1 GB. เบ‚เบฐเบซเบ™เบฒเบ”เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบเปเบฒเบ™เบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบšเบนเบ”. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡ Linux เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ cat /proc/meminfo | grep -i huge.

เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ (Linux เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™)

Note: This is only for Linux, for other OS this operation is ignored$ cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ‚เบฐเบซเบ™เบฒเบ”เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™ 2048 (2 MB), เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™ 0. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ–เบทเบเบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™.

Script เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ

script เบ‡เปˆเบฒเบเป†เบ™เบตเป‰เบชเบปเปˆเบ‡เบ„เบทเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™. เปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบšเบขเบนเปˆเปƒเบ™เป€เบŠเบตเบšเป€เบงเบต Linux เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ PostgreSQL เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆ. เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก $PGDATA เป„เบ”เป€เบฃเบฑเบเบ—เปเบฃเบตเบ‚เปเป‰เบกเบนเบ™ PostgreSQL เบ–เบทเบเบฅเบฐเบšเบธ.

เป„เบ”เป‰เบฎเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™

#!/bin/bash
pid=`head -1 $PGDATA/postmaster.pid`
echo "Pid:            $pid"
peak=`grep ^VmPeak /proc/$pid/status | awk '{ print $2 }'`
echo "VmPeak:            $peak kB"
hps=`grep ^Hugepagesize /proc/meminfo | awk '{ print $2 }'`
echo "Hugepagesize:   $hps kB"
hp=$((peak/hps))
echo Set Huge Pages:     $hp

เบœเบปเบ™เบญเบญเบเบกเบฒเบ‚เบญเบ‡เบชเบฐเบ„เบฃเบดเบšเป€เบšเบดเปˆเบ‡เบ„เบทเบ”เบฑเปˆเบ‡เบ™เบตเป‰:

เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบชเบฐเบ„เบฃเบดเบš

Pid:            12737
VmPeak:         180932 kB
Hugepagesize:   2048 kB
Set Huge Pages: 88

เบ„เปˆเบฒเบ—เบตเปˆเปเบ™เบฐเบ™เปเบฒเบชเปเบฒเบฅเบฑเบšเบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปเบกเปˆเบ™ 88, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบ„เบงเบ™เบ•เบฑเป‰เบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™ 88.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ

sysctl -w vm.nr_hugepages=88

เบเบงเบ”เป€เบšเบดเปˆเบ‡เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒเบซเบ™เป‰เบฒเป€เบงเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ (HugePages_Free = HugePages_Total).

เปœเป‰เบฒเปƒเบซเบเปˆเบ—เบตเปˆเบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™ (Linux เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™)

$ cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:      88
HugePages_Free:       88
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

เบ•เบญเบ™เบ™เบตเป‰เบ•เบฑเป‰เบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต huge_pages เป€เบ›เบฑเบ™ "on" เปƒเบ™ $PGDATA/postgresql.conf เปเบฅเบฐเป€เบ›เบตเบ”เป€เบŠเบตเบšเป€เบงเบตเบ„เบทเบ™เปƒเปเปˆ.

เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ (Linux เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™)

$ cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:      88
HugePages_Free:       81
HugePages_Rsvd:       64
HugePages_Surp:        0
Hugepagesize:       2048 kB

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบซเบ™เป‰เบฒเป€เบงเบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบซเบผเบฒเบเปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบ•เบญเบ™เบ™เบตเป‰เบฅเบญเบ‡เป€เบžเบตเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบšเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเบ™เปเบฒเบกเบฒเปƒเบŠเป‰เปƒเบซเบกเปˆเบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ

postgres=# CREATE TABLE foo(a INTEGER);
CREATE TABLE
postgres=# INSERT INTO foo VALUES(generate_Series(1,10000000));
INSERT 0 10000000

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เบซเบ™เป‰เบฒเป€เบงเบฑเบšเบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบเบงเปˆเบฒเปƒเบ™เบ•เบญเบ™เบ™เบตเป‰.

เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ (Linux เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™)

$ cat /proc/meminfo | grep -i huge
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
HugePages_Total:      88
HugePages_Free:       18
HugePages_Rsvd:        1
HugePages_Surp:        0
Hugepagesize:       2048 kB

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰.

เบซเบกเบฒเบเป€เบซเบ”: เบกเบนเบ™เบ„เปˆเบฒเบ„เบฒเบ”เบ„เบฐเป€เบ™เบชเปเบฒเบฅเบฑเบš HugePages เบ—เบตเปˆเปƒเบŠเป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ•เปเปˆเบฒเบซเบผเบฒเบ, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเปเบกเปˆเบ™เบ„เปˆเบฒเบ›เบปเบเบเบฐเบ•เบดเบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™. เบเบฐโ€‹เบฅเบธโ€‹เบ™เบฒโ€‹เบ›เบฐโ€‹เป€เบกเบตเบ™โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เปเบฅเบฐโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ•เบฒเบกโ€‹เบ„เบงเบฒเบกโ€‹เป€เบซเบกเบฒเบฐโ€‹เบชเบปเบกโ€‹เป‚เบ”เบโ€‹เบญเบตเบ‡โ€‹เปƒเบชเปˆโ€‹เบเบฒเบ™โ€‹เป‚เบซเบผเบ”โ€‹เปเบฅเบฐโ€‹เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™โ€‹.

vm. swappiness

vm. swappiness เป€เบ›เบฑเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ kernel เบญเบทเปˆเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ•เบปเบงเป€เบฅเบทเบญเบเบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ„เบงเบšเบ„เบธเบกเบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡ swappiness (เปเบฅเบเบ›เปˆเบฝเบ™เบซเบ™เป‰เบฒเปƒเบ™เปเบฅเบฐเบญเบญเบเบˆเบฒเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ) เปƒเบ™ Linux. เบกเบนเบ™เบ„เปˆเบฒเบ•เบฑเป‰เบ‡เปเบ•เปˆ 0 เบซเบฒ 100. เบกเบฑเบ™เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เบˆเบฐเบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเบซเบ™เป‰เบฒเบซเบผเบทเบญเบญเบเบซเบ™เป‰เบฒ. เบชเบนเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบšเปเปˆเบกเบตเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เปเบฅเบฐ 100 เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบฎเบธเบเบฎเบฒเบ™.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบ”เบตเป‚เบ”เบเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเบ•เปˆเปเบฒ.

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰เป€เบ›เบฑเบ™ 0 เปƒเบ™เปเบเปˆเบ™เปƒเบซเบกเปˆเบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰ OOM Killer (เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เปเบฒเบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡ Linux) เป€เบžเบทเปˆเบญเบ‚เป‰เบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบ›เบญเบ”เป„เบžเบ—เบตเปˆเบˆเบฐเบ•เบฑเป‰เบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™ 1 เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เบชเบฐเบซเบผเบฑเบš. เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™ Linux เปเบกเปˆเบ™ 60. เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบนเบ‡เบเบงเปˆเบฒเป€เบฎเบฑเบ”เปƒเบซเป‰ MMU (เบซเบ™เปˆเบงเบเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ) เปƒเบŠเป‰เบžเบทเป‰เบ™เบ—เบตเปˆ swap เบซเบผเบฒเบเบเบงเปˆเบฒ RAM, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ„เปˆเบฒเบ•เปˆเปเบฒเบˆเบฐเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™ / เบฅเบฐเบซเบฑเบ”เบซเบผเบฒเบเป„เบงเป‰เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ.

เบกเบนเบ™เบ„เปˆเบฒเบ•เปˆเปเบฒเปเบกเปˆเบ™เบเบฒเบ™เป€เบ”เบตเบกเบžเบฑเบ™เบ—เบตเปˆเบ”เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ PostgreSQL.

vm.overcommit_memory / vm.overcommit_ratio

เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเปเบฅเบฐเบ›เปˆเบญเบเบกเบฑเบ™เป€เบกเบทเปˆเบญเบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™. เปเบ•เปˆเปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบต, เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เปเบฅเบฐเบšเปเปˆเบ›เปˆเบญเบเบกเบฑเบ™. เบญเบฑเบ™เบ™เบตเป‰เบญเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบœเบนเป‰เบ‚เป‰เบฒ OOM เป„เบ”เป‰. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ vm.overcommit_memory เบกเบตโ€‹เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ„เบปเบ™โ€‹:

  1. Heuristic overcommit (เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™); heuristic เบ—เบตเปˆเบญเบตเบ‡เปƒเบชเปˆ kernel
  2. เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ overcommit เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก
  3. เบขเปˆเบฒ overdo เบกเบฑเบ™, เบšเปเปˆเป€เบเบตเบ™เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™ overcommit.

เบญเป‰เบฒเบ‡เบญเบตเบ‡: https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

vm.overcommit_ratio โ€” เบญเบฑเบ”โ€‹เบ•เบฒโ€‹เบชเปˆเบงเบ™โ€‹เบ‚เบญเบ‡ RAM เบ—เบตเปˆโ€‹เบกเบตโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™ overloadโ€‹. เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡ 50% เปƒเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเบกเบต 2 GB เบ‚เบญเบ‡ RAM เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบชเบฑเบ™เป„เบ”เป‰เป€เบ–เบดเบ‡ 3 GB เบ‚เบญเบ‡ RAM.

เบ„เปˆเบฒเบ‚เบญเบ‡ 2 เบชเปเบฒเบฅเบฑเบš vm.overcommit_memory เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบš PostgreSQL. เบกเบนเบ™เบ„เปˆเบฒเบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เปƒเบŠเป‰ RAM เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบŠเบตเบšเป€เบงเบตเบชเบนเบ‡เบชเบธเบ”เป‚เบ”เบเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ•เปเปˆเบเบฒเบ™เบ–เบทเบเบ‚เป‰เบฒเบ•เบฒเบเป‚เบ”เบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™ OOM killer. เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบˆเบฐเบชเบฒเบกเบฒเบ”เป‚เบซเบผเบ”เป„เบ”เป‰, เปเบ•เปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™ overrun, เป€เบŠเบดเปˆเบ‡เบซเบผเบธเบ”เบœเปˆเบญเบ™เบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ•เปเปˆเบเบฒเบ™เบ‚เป‰เบฒ OOM killer เบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ„เปˆเบฒเบ‚เบญเบ‡ 2 เปƒเบซเป‰เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ”เบตเบเบงเปˆเบฒเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ 0. เปเบ™เบงเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบทเบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ›เบธเบ‡เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ™เบญเบเบ‚เบญเบšเป€เบ‚เบ”เบšเปเปˆเป€เบเบตเบ™. เบ™เบตเป‰เบเปเบฒเบˆเบฑเบ”เบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบ–เบทเบเบ‚เป‰เบฒเบ•เบฒเบเป‚เบ”เบ killer OOM.

เปƒเบ™เบฅเบฐเบšเบปเบšเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™, เบšเบฑเบ™เบซเบฒเบเบฑเบš vm.overcommit_memory เป€เบ—เบปเปˆเบฒเบเบฑเบš 2 เบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™.

https://www.postgresql.org/docs/current/static/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT

vm.dirty_background_ratio / vm.dirty_background_bytes

vm.dirty_background_ratio เปเบกเปˆเบ™เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเบซเบ™เป‰เบฒเป€เบ›เบทเป‰เบญเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เปƒเบชเปˆเปเบœเปˆเบ™. Flush to disk เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบžเบทเป‰เบ™เบซเบผเบฑเบ‡. เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เบ•เบฑเป‰เบ‡เปเบ•เปˆ 0 เบซเบฒ 100; เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ„เปˆเบฒเบ•เปˆเปเบฒเบเบงเปˆเบฒ 5 เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบฅเบฐเบšเบฒเบ‡เปเบเปˆเบ™เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบกเบฑเบ™. 10 เปเบกเปˆเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบฅเบฐเบšเบปเบš Linux เบชเปˆเบงเบ™เปƒเบซเบเปˆ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เบฝเบ™เบซเบผเบฒเบเป‚เบ”เบเบ›เบฑเบ”เปƒเบˆเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบเบงเปˆเบฒ, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ Linux เบˆเบฐเบฅเป‰เบฒเบ‡เบซเบ™เป‰เบฒเป€เบ›เบทเป‰เบญเบ™เปƒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡.

เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”เบกเบนเบ™เบ„เปˆเบฒ vm.dirty_background_bytes เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เป„เบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เบšเปเปˆเบกเบตเบ„เปˆเบฒ "เบ”เบต" เบชเปเบฒเบฅเบฑเบšเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเป‰เบญเบ™เบงเปˆเบฒเบ—เบฑเบ‡เบชเบญเบ‡เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบฎเบฒเบ”เปเบง. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ vm.dirty_background_ratio เป€เบ›เบฑเบ™ 5 เปเบฅเบฐ vm.dirty_background_bytes เป€เบ›เบฑเบ™ 25% เบ‚เบญเบ‡เบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡เปเบœเปˆเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป€เบ›เบฑเบ™ ~ 25% เปƒเบ™เบเปเบฅเบฐเบ™เบตเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”.

vm.dirty_ratio/dirty_bytes

เบกเบฑเบ™เบ„เบทเบเบฑเบ™เบเบฑเบš vm.dirty_background_ratio/dirty_background_bytes, เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹เปเบ•เปˆโ€‹เบงเปˆเบฒโ€‹เบเบฒเบ™โ€‹เบ›เบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เปƒเบ™โ€‹เบเบญเบ‡โ€‹เบ›เบฐโ€‹เบŠเบธเบกโ€‹เบžเบฐโ€‹เบ™เบฑเบโ€‹เบ‡เบฒเบ™โ€‹, เบเบฒเบ™โ€‹เบ›เบดเบ”โ€‹เบšเบฑเบ‡โ€‹เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ vm.dirty_ratio เบ„เบงเบ™เบˆเบฐเบชเบนเบ‡เบเบงเปˆเบฒ vm.dirty_background_ratio. เบ™เบตเป‰เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ™เบตเป‰เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เป‚เบซเบผเบ”เบ‚เบญเบ‡เปเบœเปˆเบ™ I/O.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบญเบทเปˆเบ™เป†เป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš, เปเบ•เปˆเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบˆเบฐเบซเบ™เป‰เบญเบเปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเบฐเบšเปเปˆเป€เบซเบฑเบ™เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบ. เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบšเปเปˆเปเบกเปˆเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบ—เบธเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ. เบšเบฒเบ‡เปเบญเบฑเบšเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบเบงเปˆเบฒเป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ›เบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบšเบฒเบ‡เบญเบฑเบ™, เปเบฅเบฐเบšเบฒเบ‡เบญเบฑเบ™เบšเปเปˆเป€เบฎเบฑเบ”. เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบ„เบงเบฒเบกเบชเบปเบกเบ”เบนเบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰เปเบฅเบฐเบ›เบฐเป€เบžเบ”เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™, เปเบฅเบฐเบ—เปˆเบฒเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡ OS เปƒเบ™เป€เบงเบฅเบฒเบ›เบฑเบš. เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ kernel เบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‡เปˆเบฒเบเบ„เบทเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™; เบกเบฑเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเปเบ™เบฐเบ™เปเบฒ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™