PostgreSQL ကို အကောင်သဆုံသဖဌစ်အောင် ချိန်ညဟိရန် Linux Kernel ရလေသစရာမျာသ

PostgreSQL ကို အကောင်သဆုံသဖဌစ်အောင် ချိန်ညဟိရန် Linux Kernel ရလေသစရာမျာသ အကောင်သဆုံသ PostgreSQL စလမ်သဆောင်ရည်သည် မဟန်ကန်စလာ သတ်မဟတ်ထာသသော လည်ပတ်မဟုစနစ် ဘောင်မျာသပေါ်တလင် မူတည်သည်။ ညံ့ဖျင်သသော OS kernel ဆက်တင်မျာသသည် ဒေတာဘေ့စ်ဆာဗာစလမ်သဆောင်ရည်ကို ညံ့ဖျင်သစေနိုင်သည်။ ထို့ကဌောင့်၊ ကဆက်တင်မျာသကို ဒေတာဘေ့စ်ဆာဗာနဟင့် ၎င်သ၏လုပ်ငန်သတာဝန်မျာသအလိုက် ပဌင်ဆင်သတ်မဟတ်ရန် လိုအပ်ပါသည်။ ကပို့စ်တလင်၊ ဒေတာဘေ့စ်ဆာဗာစလမ်သဆောင်ရည်ကို ထိခိုက်စေနိုင်သော အရေသကဌီသသော Linux kernel ဘောင်အချို့ကို ဆလေသနလေသပဌီသ ၎င်သတို့ကို မည်သို့ပဌင်ဆင်ရမည်ကို ဆလေသနလေသပါမည်။

SHMMAX / SHMALL

SHMMAX Linux လုပ်ငန်သစဉ်တစ်ခုမဟ ခလဲဝေပေသနိုင်သည့် မျဟဝေထာသသော မမ်မိုရီအပိုင်သတစ်ခု၏ အမျာသဆုံသအရလယ်အစာသကို ဆုံသဖဌတ်ရန် အသုံသပဌုသည့် kernel ဘောင်တစ်ခုဖဌစ်သည်။ ဗာသရဟင်သ 9.2 မတိုင်မီ၊ PostgreSQL သည် SHMMAX ဆက်တင်လိုအပ်သည့် System V (SysV) ကို အသုံသပဌုခဲ့သည်။ 9.2 ပဌီသနောက်၊ PostgreSQL သည် POSIX shared memory သို့ ပဌောင်သသလာသသည်။ ထို့ကဌောင့် ယခုအခါ System V မျဟဝေထာသသော မမ်မိုရီ၏ ဘိုက်အနည်သငယ်သာ လိုအပ်ပါသည်။

ဗာသရဟင်သ 9.3 မတိုင်မီ၊ SHMMAX သည် အရေသအကဌီသဆုံသ kernel ကန့်သတ်ချက်ဖဌစ်သည်။ SHMMAX တန်ဖိုသကို bytes ဖဌင့် သတ်မဟတ်သည်။

အလာသတူပင် သေသငယ်သော ဆုံသဖဌတ်ရန်အသုံသပဌုသော အခဌာသ kernel parameter တစ်ခုဖဌစ်သည်။
မျဟဝေထာသသော မဟတ်ဉာဏ်စာမျက်နဟာမျာသ၏ စနစ်တစ်ခုလုံသ ပမာဏ။ လက်ရဟိ 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 ကိုအသုံသပဌုသည်။ System 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/sysctl.conf. အသေသစိတ်အချက်အလက်မျာသကိုအောက်တလင်ဖော်ပဌထာသသည်။

MacOS X တလင် Kernel ဆက်တင်မျာသကို ပဌောင်သလဲခဌင်သ။

# 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

Linux ရဟိ Kernel Parameters ကိုပဌောင်သလဲခဌင်သ။

# 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 မမ်မိုရီစာမျက်နဟာမျာသကိုအသုံသပဌုသည်။ စူပါစာမျက်နဟာမျာသနဟင့် Windows တလင် - စာမျက်နဟာကဌီသမျာသ. စာမျက်နဟာသည် လုပ်ငန်သစဉ်တစ်ခုအတလက် ခလဲဝေပေသထာသသည့် RAM အပိုင်သတစ်ခုဖဌစ်သည်။ လုပ်ငန်သစဉ်တစ်ခုသည် မဟတ်ဉာဏ်လိုအပ်ချက်ပေါ်မူတည်၍ စာမျက်နဟာမျာသစလာရဟိနိုင်သည်။ လုပ်ငန်သစဉ်တစ်ခုအတလက် memory မျာသမျာသလိုအပ်လေ၊ ၎င်သကို စာမျက်နဟာမျာသ ခလဲဝေပေသလေလေဖဌစ်သည်။ OS သည် လုပ်ငန်သစဉ်မျာသအတလက် စာမျက်နဟာခလဲဝေမဟုဇယာသကို ထိန်သသိမ်သထာသသည်။ စာမျက်နဟာအရလယ်အစာသ သေသငယ်လေ၊ ဇယာသပိုကဌီသလေ၊ ထိုစာမျက်နဟာဇယာသရဟိ စာမျက်နဟာတစ်ခုကို ရဟာဖလေရန် ကဌာလေဖဌစ်သည်။ ထို့ကဌောင့် ကဌီသမာသသော စာမျက်နဟာမျာသသည် ပမာဏကို လျဟော့ချပေသခဌင်သဖဌင့် memory အမျာသအပဌာသကို အသုံသပဌုခလင့်ပေသသည်၊ စာမျက်နဟာကဌည့်ရဟုမဟု နည်သပါသခဌင်သ၊ စာမျက်နဟာ အမဟာသအယလင်သမျာသ နည်သပါသခဌင်သ၊ ပိုမိုကဌီသမာသသော ကဌာသခံမျာသထက် ပိုမိုမဌန်ဆန်စလာ ဖတ်ရဟုခဌင်သ/ရေသခဌင်သ လုပ်ဆောင်ချက်မျာသ။ ရလဒ်ကတော့ စလမ်သဆောင်ရည်ကို မဌဟင့်တင်ပေသပါတယ်။

PostgreSQL သည် Linux ရဟိ စာမျက်နဟာကဌီသမျာသကိုသာ ပံ့ပိုသပေသသည်။ ပုံမဟန်အာသဖဌင့်၊ Linux သည် 4 KB မမ်မိုရီစာမျက်နဟာမျာသကို အသုံသပဌုသည်၊ ထို့ကဌောင့် မမ်မိုရီလုပ်ဆောင်မဟုမျာသ အလလန်မျာသသောကိစ္စမျာသတလင် ပိုကဌီသသောစာမျက်နဟာမျာသကို သတ်မဟတ်ရန် လိုအပ်သည်။ 2 MB နဟင့် 1 GB အထိ ကဌီသမာသသော စာမျက်နဟာမျာသကို အသုံသပဌုသောအခါ စလမ်သဆောင်ရည် တိုသလာသည်ကို တလေ့ရသည်။ ကဌီသမာသသော စာမျက်နဟာအရလယ်အစာသကို စတင်ချိန်၌ သတ်မဟတ်နိုင်သည်။ command ကို အသုံသပဌု၍ သင်၏ Linux စက်တလင် ကဌီသမာသသော စာမျက်နဟာ ကန့်သတ်ချက်မျာသ နဟင့် ၎င်သတို့၏ အသုံသပဌုမဟုကို အလလယ်တကူ စစ်ဆေသနိုင်သည်။ ကဌောင် /proc/meminfo | grep -i ကဌီသမာသတယ်။.

စာမျက်နဟာကဌီသမျာသအကဌောင်သ အချက်အလက်ရယူခဌင်သ (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 သည် လိုအပ်သော စာမျက်နဟာ အမျာသအပဌာသကို ပဌန်ပေသသည်။ PostgreSQL လုပ်ဆောင်နေချိန်တလင် သင့် Linux ဆာဗာတလင် script ကိုဖလင့်ပါ။ ပတ်​ဝန်သကျင်​​ပဌောင်သလဲနိုင်​သည်​ကို ​သေချာ​စေပါ။ $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

script output သည် ကကဲ့သို့ ဖဌစ်သည်-

ဇာတ်ညလဟန်သအထလက်

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 parameter ကို $PGDATA/postgresql.conf တလင် "on" ဟု သတ်မဟတ်ပဌီသ ဆာဗာကို ပဌန်လည်စတင်ပါ။

တစ်ဖန်၊ ကဌီသမာသသော စာမျက်နဟာမျာသအကဌောင်သ အချက်အလက် (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 parameter တစ်ခုဖဌစ်သည်။ Linux ရဟိ swappiness (မဟတ်ဉာဏ်အတလင်သနဟင့် စာမျက်နဟာမျာသကို လဲလဟယ်ခဌင်သ) ၏အပဌုအမူကို ထိန်သချုပ်ရန်အတလက် ကရလေသချယ်မဟုကို အသုံသပဌုပါသည်။ တန်ဖိုသသည် 0 မဟ 100 အထိ ကလာဟသည်။ ၎င်သသည် မဟတ်ဉာဏ်မည်မျဟ စာမျက်နဟာမည် သို့မဟုတ် စာမျက်နဟာထုတ်မည်ကို ဆုံသဖဌတ်သည်။ သုညဆိုသည်မဟာ လဲလဟယ်ခဌင်သမရဟိသလို 100 သည် ပဌင်သထန်သော လဲလဟယ်မဟုကို ဆိုလိုသည်။

နိမ့်သောတန်ဖိုသမျာသကို သတ်မဟတ်ခဌင်သဖဌင့် ကောင်သမလန်သော စလမ်သဆောင်ရည်ကို ရရဟိနိုင်သည်။

၎င်သကို အသစ်သော kernels မျာသတလင် 0 သို့ သတ်မဟတ်ခဌင်သသည် OOM Killer (Linux ၏ မဟတ်ဉာဏ် သန့်ရဟင်သရေသ လုပ်ငန်သစဉ်) လုပ်ငန်သစဉ်ကို သတ်ပစ်နိုင်သည်။ ထို့ကဌောင့် လဲလဟယ်ခဌင်သကို လျဟော့ချလိုပါက ၎င်သကို 1 ဟု သတ်မဟတ်ရန် ဘေသကင်သပါသည်။ Linux တလင် မူရင်သတန်ဖိုသသည် 60 ဖဌစ်သည်။ မဌင့်မာသသောတန်ဖိုသသည် MMU (memory management unit) သည် RAM ထက် swap space ပိုမျာသပဌီသ တန်ဖိုသနိမ့်သည် memory ထဲတလင် data/code ပိုမျာသနေပါသည်။

ပိုနည်သသောတန်ဖိုသသည် PostgreSQL တလင် ပိုမိုကောင်သမလန်သော စလမ်သဆောင်ရည်အတလက် ကောင်သသောအလောင်သအစာသဖဌစ်သည်။

vm.overcommit_memory / vm.overcommit_ratio

အပလီကေသရဟင်သမျာသသည် မန်မိုရီကို ရယူပဌီသ မလိုအပ်တော့သည့်အခါ ၎င်သကို ထုတ်လလဟတ်သည်။ သို့သော် အချို့ကိစ္စမျာသတလင်၊ အပလီကေသရဟင်သသည် မန်မိုရီအလလန်အကျလံရရဟိပဌီသ ၎င်သကို မထုတ်လလဟတ်ပါ။ ၎င်သသည် OOM လူသတ်သမာသကို ဖဌစ်စေနိုင်သည်။ ကသည်မဟာ ဖဌစ်နိုင်သည့် အတိုင်သအတာတန်ဖိုသမျာသဖဌစ်သည်။ vm.overcommit_memory တစ်ခုချင်သစီအတလက် ဖော်ပဌချက်နဟင့်အတူ

  1. Heuristic overcommit (မူလ); kernel-based heuristic
  2. ဘာပဲဖဌစ်ဖဌစ် ကျော်လလဟာသခလင့်ပဌုပါ။
  3. လလန်လလန်ကဲကဲ မလုပ်ပါနဟင့်၊ လလန်ကဲသော အချိုသကို မကျော်လလန်ပါစေနဟင့်။

လင့်ခ်: https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

vm.overcommit_ratio - ဝန်ပိုအတလက်ရနိုင်သော RAM ရာခိုင်နဟုန်သ။ 50 GB RAM ပါသော စနစ်တစ်ခုတလင် 2% တန်ဖိုသသည် RAM 3 GB အထိ ခလဲဝေပေသနိုင်သည်။

vm.overcommit_memory အတလက် 2 တန်ဖိုသသည် PostgreSQL အတလက် ပိုမိုကောင်သမလန်သော စလမ်သဆောင်ရည်ကို ပေသပါသည်။ ကတန်ဖိုသသည် OOM လူသတ်သမာသဖဌစ်စဉ်ကဌောင့် သတ်ပစ်မည့်အန္တရာယ်မရဟိဘဲ ဆာဗာလုပ်ငန်သစဉ်၏ RAM သုံသစလဲမဟုကို အမဌင့်ဆုံသဖဌစ်စေသည်။ အပလီကေသရဟင်သသည် ပဌန်လည်စတင်နိုင်မည်ဖဌစ်ပဌီသ၊ ဖဌစ်စဉ်ကို OOM လူသတ်သမာသ၏အန္တရာယ်ကို လျဟော့ချပေသသည့် overrun ကန့်သတ်ချက်မျာသအတလင်သသာ ပဌန်လည်စတင်နိုင်မည်ဖဌစ်သည်။ ထို့ကဌောင့်၊ 2 တန်ဖိုသသည် 0 ၏ ပုံသေတန်ဖိုသထက် ပိုမိုကောင်သမလန်သော စလမ်သဆောင်ရည်ကို ပေသသည်။ သို့သော် ပဌင်ပမမ်မိုရီကို လလန်လလန်ကဲကဲမဖဌစ်စေရန် သေချာစေခဌင်သဖဌင့် ယုံကဌည်စိတ်ချရမဟုကို မဌဟင့်တင်နိုင်ပါသည်။ ၎င်သသည် OOM လူသတ်သမာသမဟ သတ်သည့်ဖဌစ်စဉ်၏အန္တရာယ်ကို ဖယ်ရဟာသပေသသည်။

လဲလဟယ်ခဌင်သမပဌုဘဲ စနစ်မျာသတလင်၊ 2 နဟင့် ညီမျဟသော vm.overcommit_memory ပဌဿနာတစ်ခု ဖဌစ်ပေါ်နိုင်သည်။

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 အောက်တန်ဖိုသသည် ထိရောက်မဟုမရဟိနိုင်သော်လည်သ အချို့သော kernel မျာသက ၎င်သကို မပံ့ပိုသနိုင်ပါ။ 10 သည် Linux စနစ်အမျာသစုတလင် ပုံသေဖဌစ်သည်။ သေသငယ်သောအချက်ဖဌင့် ရေသရန်အလေသပေသလုပ်ဆောင်မဟုမျာသအတလက် စလမ်သဆောင်ရည်ကို မဌဟင့်တင်နိုင်သည်၊ ဆိုလိုသည်မဟာ Linux သည် ညစ်ပတ်သောစာမျက်နဟာမျာသကို နောက်ခံတလင် ဖယ်ရဟာသပစ်မည်ဟု ဆိုလိုသည်။

တန်ဖိုသသတ်မဟတ်ရန် လိုအပ်ပါသည်။ vm.dirty_background_bytes သင်၏ drive ၏အမဌန်နဟုန်သပေါ် မူတည်.

နဟစ်ခုလုံသသည် ဟာ့ဒ်ဝဲကို မဟီခိုနေသောကဌောင့် ကဘောင်နဟစ်ခုအတလက် "ကောင်သသော" တန်ဖိုသမျာသ မရဟိပါ။ သို့သော်၊ vm.dirty_background_ratio ကို 5 သို့ သတ်မဟတ်ခဌင်သနဟင့် vm.dirty_background_bytes ၏ 25% သို့ disk speed သည် ကိစ္စအမျာသစုတလင် စလမ်သဆောင်ရည်ကို ~25% သို့ တိုသတက်စေသည်။

vm.dirty_ratio/dirty_bytes

ဒါကတူတူပါပဲ vm.dirty_background_ratio/dirty_background_bytesအပလီကေသရဟင်သကို ပိတ်ဆို့ခဌင်သမဟလလဲ၍ ပဌန်လည်သတ်မဟတ်ခဌင်သအာသ အလုပ်သမာသစက်ရဟင်တလင် လုပ်ဆောင်ပါသည်။ ထို့ကဌောင့် vm.dirty_ratio ထက် ပိုမဌင့်သင့်သည်။ vm.dirty_background_ratio. ၎င်သသည် အပလီကေသရဟင်သကို တတ်နိုင်သမျဟ ပိတ်ဆို့ခဌင်သမဟ ရဟောင်ရဟာသရန် နောက်ခံလုပ်ငန်သစဉ်မျာသကို စောစောစတင်ကဌောင်သ သေချာစေပါသည်။ disk I/O load ပေါ်မူတည်၍ ကအချိုသနဟစ်ခုကဌာသ ကလာခဌာသချက်ကို သင်ချိန်ညဟိနိုင်သည်။

ရလဒ်

စလမ်သဆောင်ရည် မဌဟင့်တင်ရန် အခဌာသဆက်တင်မျာသကို သင် ပဌင်ဆင်နိုင်သော်လည်သ တိုသတက်မဟု အနည်သငယ်သာ ရဟိမည်ဖဌစ်ပဌီသ သင်သည် မျာသစလာ အကျိုသရဟိမည်မဟုတ်ပါ။ ရလေသချယ်မဟုအာသလုံသသည် အပလီကေသရဟင်သအမျိုသအစာသအာသလုံသနဟင့်သက်ဆိုင်သည်မဟုတ်ကဌောင်သ မဟတ်သာသထာသရပါမည်။ အချို့သော ဆက်တင်မျာသကို ကျလန်ုပ်တို့ ချိန်ညဟိသောအခါတလင် အချို့အက်ပ်မျာသက ပိုကောင်သပဌီသ အချို့သော အက်ပ်မျာသသည် အလုပ်မလုပ်ပါ။ သင့်မျဟော်မဟန်သထာသသော အလုပ်တာဝန်နဟင့် အပလီကေသရဟင်သအမျိုသအစာသအတလက် ကဆက်တင်မျာသကို ပဌင်ဆင်သတ်မဟတ်ခဌင်သကဌာသ မဟန်ကန်မျဟတသော ချိန်ခလင်လျဟာကို ရဟာဖလေရမည်ဖဌစ်ပဌီသ ချိန်ညဟိသည့်အခါ OS အပဌုအမူကိုလည်သ ထည့်သလင်သစဉ်သစာသရပါမည်။ kernel parameters မျာသကို configuration သည် database parameters မျာသကို configure လုပ်သကဲ့သို့ မလလယ်ကူပါ၊ အကဌံပဌုချက်မျာသ ပဌုလုပ်ရန် ပိုမိုခက်ခဲပါသည်။

source: www.habr.com

မဟတ်ချက် Add