我已经阅读了关于提高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
这些variables按照文档中的规定以字节为单位进行测量。 我认为查看postgresqlconfiguration参数更为重要。 您需要查看SHMALL / SHMMAX值。 例如,如果要增加最大连接数,则可能需要增加这些限制。
调整数据库服务器取决于您的使用模式,例如同时连接数和数据库大小。 增加一个configuration参数并不总是好的。