PostgreSQL最多可扩展至64个内核?


10

在《计算机世界》的这篇文章中,它指定PostgreSQL最多可以扩展到64个内核。这是否意味着一个64核的多核处理器?还是拥有更少内核的多个处理器?

我之所以这样问,是因为我试图找到PostgreSQL可以扩展到多少处理器,但是当然可能仅限于处理器类型。但是,我一直在其他数据库中找到其他统计信息(例如,Microsoft SQL Server 在这里说明它可以扩展到320个逻辑处理器),并且它们没有指定其内核数。这是一个非常模糊的统计吗?

任何想法将不胜感激。谢谢!


1
PostgreSQL不在乎它是8个8核CPU,32个2核CPU还是其他。它只关心逻辑处理器。此外,大约是64核,具体取决于您的其余硬件。如果7200rpm SATA硬盘上的1TB数据库只有4GB RAM,那么64核对您没有任何好处。有核心数没有硬性技术限制,它只是它最近被测试,证明了很好地扩展到64
克雷格林格

Answers:


7

不,这是一个非常精确的统计信息。“逻辑处理器”是核心。核心是,它们在物理处理器上的分布方式无关紧要。

而且,如果您要处理的内核数量超过支持的内核数量,那么PostgreSQL应该不会有问题。每个连接本质上都是单线程 *,因此无论您拥有多少内核,都将限制并发连接的效率和功效。

不用说,这也意味着您应该把钱花在比核心数量快的核心上,除非您想用更复杂的方法将事物聚类。

* 2017更新:某些查询(或子查询)可能会并行执行


1
Needless to say this also means you should put your money in faster cores than quantity of cores unless you want to cluster things in a more complicated method.<-我仅在内核数大于并发客户端数且并发客户端数不太可能增加的情况下同意此声明。对于每个Postgres后端都有一个可用的内核,对于性能来说非常重要...
voretaq7

@ voretaq7我大都同意,但是具有较高TPS的CPU可以(显然)在给定时间内处理更多事务,因此有更多客户端。取决于您的负载类型和预算,会有一个最佳选择。
奥利(Oli)2012年

1
逻辑进程是最小的逻辑执行单元,就目前的技术而言,它不是核心,而是线程。
dyasny 2012年

2
@ voretaq7:通过某种连接池机制连接到postgresql并不少见。除其他外,这是因为连接到postgresql相对昂贵。池化可以极大地减少与数据库的并发连接数。因此,我倾向于使用快速CPU而不是内核数量。但还是一如既往:这取决于许多因素……
m.sr 2012年

2
@ m.sr同意-连接池机制非常普遍。其中最“聪明”的将建立与Postgres的多个连接,并在它们之间保持平衡(我们内部的应用程序之一是通过为每个Apache进程赋予其自身与Postgres的连接来实现的-对于我们的用例而言,这是一个非常方便的映射,具有合理的后端-用户比例)。恕我直言,如果您的连接池使查询排队而不是产生后端,它并没有给您任何好处,但是深入了解数据库管理员的好处和缺点将更加有趣。所以我问!
voretaq7

12

Postgres可以扩展到要安装的处理器数量,并且您的OS可以有效地处理/管理。您可以将Postgres安装在128核计算机上(甚至是具有128个物理处理器的计算机上),它将可以正常工作。如果OS调度程序可以处理那么多内核,它甚至可能比64核计算机上的性能更好。

Postgres的已经显示出扩展 线性多达64个内核(带警告:我们正在谈论的读取性能,在特定的配置(磁盘,内存,操作系统等) - 罗伯特·哈斯有一个漂亮的图的博客文章,其我转载如下:

在此处输入图片说明

此图重要什么?

只要“客户数”小于或等于“核心数”,该关系就呈线性关系(或接近线性关系),然后开始出现性能大约呈对数线性下降的趋势,因为客户端连接数多于您做核心以运行Postgres后端,因为后端开始争夺CPU(平均负载超过1.0等)。

虽然仅针对多达64个内核进行了演示,但您可以概括地说,可以继续添加内核(和客户端)并不断提高性能,直至不再需要进程的某些其他子系统(磁盘,内存,网络)的限制有CPU争用问题,但正在等待其他事情。

Haas还发表了另一篇文章,他们证明了32核的线性可扩展性,这在可扩展性方面通常具有很好的参考资料-强烈建议您阅读背景知识!)


2
顺便提一下,在Oli的答案中提到了这种线性可伸缩性的原因:Postgres为每个客户端连接使用单独的后端过程。因此,如果您仅使用一个连接,则对于多个核不会有太多好处(如果有)-您需要并行请求才能利用多个核。
voretaq7

2

其他人澄清说,逻辑处理器通常指的是CPU内核,但是我想对以下声明发表评论:内核在CPU上的分布方式无关紧要。

您可以在CPU裸片上具有在内核之间共享或专用于单个或子组内核的缓存。例如,一个通用配置是专用L1缓存和共享L2缓存。在这种情况下,单个双核CPU的可扩展性可能不同于两个单核CPU。

这些可伸缩性影响持续到主存储器中,NUMA机器表现出与非NUMA不同的行为。

我指出这些只是因为OP在讨论可伸缩性问题,而可伸缩性的答案通常比“程序X可以使用Y CPU内核”更加细微。


1

在这种情况下,它们意味着多个处理器具有更少的内核...某些讨论是面向未来的。有些在市场营销方面。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.