Configurans Linux Kernel Options ad Optimize PostgreSQL

Configurans Linux Kernel Options ad Optimize PostgreSQL Optimal PostgreSQL effectus pendet a parametris systematis operandi recte definitis. Male occasus nuclei OS configurari potest in effectus servo pauperis database. Ideo necesse est ut hae occasus configurantur secundum servitorem datorum et eius quod inposuit. In hac statione disseremus aliquas parametris nucleos magni Linux qui afficere possunt servo datorum perficiendi et quomodo illos configurare.

SHMMAX / SHMALL

SHMMAX parameter nucleus est usus ad magnitudinem maximam portionis unius memoriae communis communis quam processus Linux collocare potest. Praecedunt versiones 9.2, PostgreSQL usus System V (SysV), quod postulat SHMMAX occasum. Post 9.2, PostgreSQL switched ad POSIX memoriam communicavit. Itaque nunc pauciores bytes Systematis V memoriae communicatae requiruntur.

Ante versionem 9.3, SHMMAX nucleus maximi momenti fuit. SHMMAX valor in bytes specificatur.

Et similiter, SHALL est alius nucleus parametri ad determinare
systema amplissimum volumen paginarum memoriae communicavit. SHMMAX, SHMAX, SHAMALL, vel SHMMIN valores videre, utere imperio ipcs'.

SHM* Singula - 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* Details - 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 usus V ratio IPC memoriae communicant. Hic modulus unus e maximis parametris nucleus est. Cum sequentes epistulas erroris accipis, significat te maiorem versionem PostgreSQL habere ac valorem SHMMAX tuum nimis humilem esse. Users expectantur valorem accommodare et augere secundum communem memoriam uti intendunt.

Possibile est errorum misconfiguration

Si SHMMAX non recte conformatus est, errorem recipere potes cum conetur initialize in botro postgreSQL utens imperio. initdb.

initdb culpa
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

Item, errorem recipere possis cum servo PostgreSQL inito mandato pg_ctl.

pg_ctl culpa
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.

Differentiae intellectus in definitionibus

SHMMAX/SHMMAX parametri definiens paulo aliter est in Linux et MacOS X:

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

bigas sysctl potest ad tempus mutare valorem. Ad valores constantes adde ingressum to /etc/sysctl.conf. Singula infra sunt.

Mutans Kernel Occasus in 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

Mutans Parametri Kernel in 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

Noli oblivisci: Mutationes permanentes facere, valores hos addere ad /etc/sysctl.conf

Paginae ingentes

Linux 4 KB paginis memoriae defaltis utitur, BSD ad XNUMX KB paginas memoriae utitur. super Pageset in Fenestra - Paginae magnae. Pagina particula RAM processui partita est. Processus potest habere plures paginas secundum memoriam requisitorum. Quo plus processus memoriae requirit, eo plures paginae sunt datum. OS pagina destinatio tabulae pro processibus conservat. Quo minor magnitudo paginae, eo maior mensa, eo longiorem paginam in illa pagina reperire capit. Magnae igitur paginae magnae memoriae pondus in capite deminuto usurpentur; pauciores paginae opiniones, vitia pagina pauciora, citius legere/scribere operationes in maioribus buffers. Effectus melioris effectus est.

PostgreSQL solum paginas magnas in Linux sustinet. Defalta Linux paginas memoriae 4 KB utitur, cum in casibus ubi nimis multae sunt operationes memoriae, necesse est ut paginas maiores explices. Lucrum euismod observatur cum in magnis paginis 2 MB et usque ad 1 GB utens. Magnitudo magna paginae tabernus tempus apponi potest. Facile reprehendo paginas magnas parametri et usum eorum in machina Linux utens imperio tuo cat /proc/meminfo | grep i ingens.

Questus notitias de paginis magnis (tantum 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

In hoc exemplo, quamvis magna magnitudo paginae ad 2048 posita sit (2 MB), numerus magnarum paginarum ad 0. Hoc significat magnas paginas erret.

Scriptor ad determinandum numerum paginarum magnarum

Haec scriptura simplex numerum magnarum paginarum requisitum refert. Curre scriptum in servo tuo Linux dum PostgreSQL currit. Fac ut pro ambitu variabilis $PGDATA PostgreSQL data directorio specificatur.

Questus numerus requiritur magnas paginas

#!/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

Scriptum output similis est:

Scriptor output

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

Valor commendatus pro magnis paginis 88 est, ergo debet eam ponere ad 88 .

Paginae magnae installing

sysctl -w vm.nr_hugepages=88

Paginas magnas nunc reprehendo, videbis paginas magnas non esse adhibitas (HugePages_Free = HugePages_Total).

Paginae magnae revisit (tantum 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

Nunc ingentes_pages parametri constitue ad "in" in $PGDATA/postgresql.conf ac servo sileo.

Iterum, informationes de paginis magnis (tantum 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

Nunc videre potes quod perpaucae paginae magnae utuntur. Nunc conemur addere aliquas notitias database.

Aliquae database operationes ad magnas paginas redivivus

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

Videamus an maioribus paginis nunc quam ante utamur.

Plus info in magnis paginis (Linux tantum)

$ 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

Nunc videre potes plerasque paginas magnas adhiberi.

Nota: Aestimatio pretii HugePages hic usus valde humilis est, quae non est valor ordinarius machinae cursus producti environment. Quaeso, numerum paginarum pro tuo systemate inquisitum aestima et eas secundum onus et facultates pone.

vm.swappiness

vm.swappiness est alius modulus nucleus qui afficit datorum effectum. Haec optio ad mores swapitatis (pervolutas paginas et e memoria) in Linux regere adhibetur. Valitudo vagatur ab 0 ad 100. Decernit quantum memoria paginae vel paginatae erunt. Nulla significat commutationem et C significat ultro commutationem.

Bene facere potes ponendo valores inferiores.

Hoc ad 0 in recentioribus nucleis constituendum potest OOM Interfectorem (in memoriam purgationis processus Linux) processum interficere. Ita tutum est ut eam 1 ponas, si voles permutando obscurare. Valor defectus in Linux est 60. Melior valor MMU (administratio memoriae unitatis facit) ut plus spatii permutet quam RAM, dum minor valor plus notitiae / codicis in memoria retinet.

Minor valor bonus est sponsio ad meliorationem faciendam in PostgreSQL.

vm.overcommit_memory / vm.overcommit_ratio

Applicationes memoriam acquirunt et eam remittunt, cum opus non est. Sed in quibusdam nimis applicatio memoriam accipit, nec eam dimittit. Hoc potest facere OOM interfectorem. Hic sunt valores possibilis parametri vm.overcommit_memory cum singula descriptione;

  1. Heuristic overcommit (default); nucleus-fundatur heuristica
  2. Liceat overcommit usquam
  3. Noli superabundare, ne excedant rationem ementiendi.

Бсылка: https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

vm.overcommit_ratio β€” recipis RAM available pro cultro. Valor 50% in systematis cum 2 GB of RAM potest usque ad 3 GB ipsius RAM collocare.

Valor 2 pro vm.overcommit_memory melius perficiendi pro PostgreSQL praebet. Haec valor maximizat usus processus servo RAM sine ullo insigni periculo ut ab OOM interfectore interficiatur. Applicatio reload poterit, sed solum intra limites vexatorum, quae in periculo processus occidentis OOM occidentis minuit. Ergo valor 2 melioris effectus quam valoris defectus dat 0. Tamen, fides emendari potest ut ex-range memoria non cumulatur. Hoc periculum processus excludit ab occiso OOM interfecto.

De systematibus sine permutando, quaestio cum vm.overcommit_memory = 2 evenire potest.

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 recipis memoriae repletus est paginis sordidis quae scribenda sunt in disco. Rubor ad disci occurrit in curriculo. Valor huius moduli ab 0 ad C vagatur; valor autem infra 100 inefficax esse potest et quaedam nucleos non adiuvant. 5. defalta est in systematibus maxime Linux. Meliorem reddere potes ad operationes intensivas scribendas per factorem minorem, quae Linux significabit paginas sordidas in curriculo rubescere.

Vos postulo ut valorem vm.dirty_background_bytes fretus velocitate tua coegi.

Valores "boni" non sunt pro his duobus parametris cum utraque ferramenta dependens. Nihilominus instituens vm.dirty_background_ratio ad 5 et vm.dirty_background_bytes ad 25% orbis celeritatem melioris effectus ad ~25% in pluribus.

vm.dirty_ratio/dirty_bytes

Hoc est idem quod vm.dirty_background_ratio/dirty_background_bytesnisi quod in sessione operariorum retexere, claudendo applicatio. Ergo vm.dirty_ratio altior erit vm.dirty_background_ratio. Hoc efficit ut processus background prius incidat ut applicationes quam maxime intercludat. Discrimen inter has duas rationes pendere potes in orbis I/O onere.

exitum

Alios occasus ad emendare effectus tweak potes, sed emendationes minimas erunt et multum beneficium non videbis. Meminisse debemus non omnes bene applicari ad omnia genera applicationum. Quaedam apps melius operantur cum aliquas occasus componimus, quaedam non minus. Rectam stateram invenire debes inter hos uncinos configurantes pro exspectatione inposuit et applicationis generis, et etiam debes considerare OS mores cum tuning. Parametri figurantes nucleos non tam facile quam parametri datorum configurantes, difficilius est commendationes facere.

Source: www.habr.com