我正在对副本进行测试,试图诊断为什么在使用快速模式时服务器需要几分钟才能关闭。它似乎与 shmem 使用率高有关,任何人都可以推荐一个好的查询/命令来运行,这会导致 postgresql 分配/使用大量共享缓冲区(shmem)吗?
我是一名 Linux 工程师,但对 postgres 有点陌生,只从 DBA 的角度了解基础知识,但我了解系统和 Linux 以及内存/操作系统概念。我试过运行 \dt+ 并寻找合理大 (1G) 的表,关闭寻呼机并在 psql 中的表上执行 SELECT *,但它似乎并没有导致共享内存的使用量增加太多。理想情况下,我希望将占用空间增加 ~ <= 200G。
最好是一些简单的东西,实际上不会写入磁盘。我不想对实际状态进行太多修改,只是导致 shmem 的大量使用(例如:可能是一个大的选择,或者一些短暂的)。
这是在没有大页面的 Linux 系统 3.x 内核上(目前启用了 THP)并且 mmap 主要用于 shmem。Postgres 13.6。我正在尝试获得 ~ 500G 的共享内存使用量
关闭时,postgresql 创建一个检查点。如果数据库处于热备模式,则为restartpoint 。这意味着从共享缓冲区写入(使用 fsync)所有更改的数据。主数据库发生的更改越多,数据库需要写入的内容就越多。
生产数据库快速重启的通常程序是:
checkpoint
命令,等待执行checkpoint
在我们要关闭或重启的副本上运行命令pg_prewarm
一些大的关系。