web-dev-qa-db-ja.com

Postgresqlのパフォーマンス-SHMMAXとSHMALLの調整

Postgresのパフォーマンスの向上についてオンライン上にあるすべてのものについて読みましたが、SHMMAXおよびSHMALLの「適切な」値はまだ私にはわかりません。

コンセンサスはSHMMAX = total_memory/4であり、SHMALL = total_memory/2は安全な開始値です。

ただし、SHMALLはページまたはバイト単位で測定でき、Ubuntuで使用されているものに関する情報を見つけることができません。

Ubuntu(またはより一般的にはDebian)はSHMALLにページまたはバイトを使用しますか?

9
Enrico

私が使用したすべてのLinuxシステムでは、SHMALLはページ単位で測定され、SHMMAXはバイト単位で測定されます。出力中に常に上記のパラメーターをキロバイト単位で変換するipcsコマンドを使用してシステムをチェックし、それをsysctl値と比較するとよいでしょう。

[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

11

これらの変数は、ドキュメントに記載されているようにバイト単位で測定されます。 postgresql構成パラメーターを確認することがより重要だと思います。必要に応じて、SHMALL/SHMMAX値を確認する必要があります。たとえば、接続の最大数を増やしたい場合は、これらの制限を増やす必要があるかもしれません。

データベースサーバーのチューニングは、同時接続数やデータベースサイズなどの使用パターンによって異なります。設定パラメータを増やすことは常に良いとは限りません。

2
Khaled