Postgresのパフォーマンスの向上についてオンライン上にあるすべてのものについて読みましたが、SHMMAXおよびSHMALLの「適切な」値はまだ私にはわかりません。
コンセンサスはSHMMAX = total_memory/4であり、SHMALL = total_memory/2は安全な開始値です。
ただし、SHMALLはページまたはバイト単位で測定でき、Ubuntuで使用されているものに関する情報を見つけることができません。
Ubuntu(またはより一般的にはDebian)はSHMALLにページまたはバイトを使用しますか?
私が使用したすべての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
これらの変数は、ドキュメントに記載されているようにバイト単位で測定されます。 postgresql構成パラメーターを確認することがより重要だと思います。必要に応じて、SHMALL/SHMMAX値を確認する必要があります。たとえば、接続の最大数を増やしたい場合は、これらの制限を増やす必要があるかもしれません。
データベースサーバーのチューニングは、同時接続数やデータベースサイズなどの使用パターンによって異なります。設定パラメータを増やすことは常に良いとは限りません。