Postgresql 性能 - 调整 SHMMAX 和 SHMALL

Postgresql 性能 - 调整 SHMMAX 和 SHMALL

我几乎读完了网上关于提高 postgres 性能的所有内容,但 SHMMAX 和 SHMALL 的“正确”值仍然让我困惑。

共识似乎是 SHMMAX = total_memory/4 和 SHMALL = total_memory/2 是安全的起始值。

但是,SHMALL 可以按页面或字节来衡量,并且我找不到有关在 Ubuntu 上使用哪种方式的任何信息。

Ubuntu(或更普遍的 Debian)对 SHMALL 使用页面还是字节?

答案1

对于我使用的所有 Linux 系统,其SHMALL单位都是页数,SHMMAX单位是字节。我认为您可以使用ipcs命令检查您的系统,该命令在输出时始终将上述参数转换为 KB 为单位,并将其与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

答案2

这些变量以字节为单位,如文档中所述。我认为查看 postgresql 配置参数更重要。您需要在需要时查看 SHMALL/SHMMAX 值。例如,如果您想增加最大连接数,则可能需要增加这些限制。

调整数据库服务器取决于您的使用模式,例如同时连接的数量和数据库大小。增加配置参数并不总是好的。

相关内容