Postgresql-Leistung - Anpassen von SHMMAX und SHMALL

9

Ich habe fast alles gelesen, was es online gibt, um die Leistung von Postgres zu verbessern, aber die "richtigen" Werte für SHMMAX und SHMALL entziehen sich mir immer noch.

Der Konsens scheint zu sein, dass SHMMAX = total_memory / 4 und SHMALL = total_memory / 2 sichere Startwerte sind.

SHMALL kann jedoch in Seiten oder Bytes gemessen werden und ich kann keine Informationen darüber finden, welche unter Ubuntu verwendet werden.

Verwendet Ubuntu (oder allgemeiner Debian) Seiten oder Bytes für SHMALL?

Enrico
quelle

Antworten:

11

Für alle Linux-Systeme, die ich verwendet habe, SHMALLwird in Seiten und SHMMAXin Bytes gemessen. Ich denke, Sie können Ihr System mit einem ipcsBefehl überprüfen , der bei der Ausgabe immer die oben genannten Parameter in KByte konvertiert, und ihn mit sysctlWerten vergleichen :

[aseryozhin@centos ~]$ ipcs -l

------ Shared Memory Limits --------
max number of segments = 4096               // SHMMNI   
max seg size (kbytes) = 524288              // SHMMAX
max total shared memory (kbytes) = 8388608  // SHMALL
min seg size (bytes) = 1

[aseryozhin@centos ~]$ sysctl -e kernel.shmmax
kernel.shmmax = 536870912

[aseryozhin@centos ~]$ sysctl -e kernel.shmall
kernel.shmall = 2097152

[aseryozhin@centos ~]$ getconf PAGE_SIZE
4096

SHMMAX: 524288 * 1024 = 536870912

SHMALL: 8388608 * 1024/4096 = 2097152

Alexander Seryozhin
quelle
2

Diese Variablen werden in Bytes gemessen, wie in der Dokumentation angegeben. Ich denke, es ist wichtiger, die Postgresql-Konfigurationsparameter zu betrachten. Sie müssen sich bei Bedarf die SHMALL / SHMMAX-Werte ansehen. Wenn Sie beispielsweise die maximale Anzahl von Verbindungen erhöhen möchten, müssen Sie diese Grenzwerte möglicherweise erhöhen.

Das Optimieren des Datenbankservers hängt von Ihrem Nutzungsmuster ab, z. B. der Anzahl der gleichzeitigen Verbindungen und der Datenbankgröße. Das Erhöhen eines Konfigurationsparameters ist nicht immer gut.

Khaled
quelle
2
SHMMAX muss erhöht werden, um shared_buffers zu erhöhen. Dies ist die niedrigste hängende Frucht, wenn es um die Postgresql-Leistung geht. Können Sie der Dokumentation einen Link hinzufügen?
Enrico