对于 READ 繁重的应用程序,PostgreSQL 是否受益于更多内核或更快的内核?

0 postgresql performance union blob

我一直在试图弄清楚如何配置一个具有 64GB 内存(远大于数据库)的 PostgreSQL 实例,以及我是否应该选择更多内核或更快的内核。(假设通行证总数在 15- 20% 的差异)

一些额外的细节:最密集的 READ 将是通过大量 UNION 的 JSONB。本例中的操作系统是 CentOS 6。

Chr*_*ris 8

内存相关设置

您已经解决了读取繁重应用程序的关键瓶颈,即有足够的 RAM 用于缓存。只是确保你已经设置了适当的高值shared_buffereswork_memmaintenance_work_mem,和effective_cache_size你的内部postgresql.conf文件。

实际上,在这个 DBA.SE 线程中有一连串的好信息

此外,这里是有关这些设置的Postgres 文档的链接,等等。

处理器选择

至于处理器的选择,重要的是要记住 Postgres 不能为每个数据库进程使用一个以上的 CPU。如果将有许多并发连接的用户,多核 CPU 可以将用户查询分散到内核之间,但不能在每个查询的基础上并行化。实际上,只有当有多个连接的用户时,您才能真正利用多核的优势。

我想,简而言之,如果您只有一个(或少数)用户,则更喜欢更快的内核,而如果您有许多并发用户,则可以从两者中受益。

请参阅此 DBA.SE 线程,其中涵盖了其中的一些信息。

如果您要同时拥有许多用户,我建议您也查看连接池

  • 同意。几乎完全取决于工作量。大型复杂查询:更少的更快内核。许多并发的简单查询:更快的内核。如果有疑问,请选择更少的更快内核,因为您可以通过 PgBouncer 之类的工具将高查询速率的工作负载排队,但您不能(不幸的是)使一个查询在 PostgreSQL 中使用多个内核。(是的,我知道 PL/Proxy,但您必须非常渴望这样做)。 (3认同)
  • 9.6 及更高版本可以使用多个 CPU 进行一次查询。https://www.postgresql.org/docs/9.6/static/parallel-query.html (2认同)