Postgresql 为什么100个客户端连接到postgres后,请求处理速度开始下降?

Postgresql 为什么100个客户端连接到postgres后,请求处理速度开始下降?,postgresql,Postgresql,我读到一篇文章说,100次连接后,处理速度开始下降。Hoewever没有任何与消息来源的联系来证明这一点。但有人说,这是由于Postgres本身的特殊实施。我真的很想知道为什么,但不幸的是我的搜索没有成功,这就是为什么我要问这个问题 但有人说,这是由于Postgres本身的特殊实施 与MS SQL相比: MS SQL为每个连接分配/分配了内存,例如,PostgreSQL为每个连接分配/分配了内存。 如果您有活动的100连接,您应该为每个单独的连接分配单独的内存缓冲区 例如,在我的一个客户办公室,

我读到一篇文章说,100次连接后,处理速度开始下降。Hoewever没有任何与消息来源的联系来证明这一点。但有人说,这是由于Postgres本身的特殊实施。我真的很想知道为什么,但不幸的是我的搜索没有成功,这就是为什么我要问这个问题

但有人说,这是由于Postgres本身的特殊实施

与MS SQL相比: MS SQL为每个连接分配/分配了内存,例如,PostgreSQL为每个连接分配/分配了内存。 如果您有活动的100连接,您应该为每个单独的连接分配单独的内存缓冲区

例如,在我的一个客户办公室,我有一个解决方案,其中10个工作站连接到大约14个数据库, 所有工作站可以同时容纳大约100个不同的连接,如果我们想分配大约100MB/连接,这意味着我们只需要大约10GB的RAM用于PostgreSQL连接。
但您必须知道,即使每个工作站都在搜索相同的数据,那么您仍然需要为每个连接分配单独的RAM,这意味着SQL引擎更频繁地需要从磁盘而不是从RAM读取数据。

这句话背后隐藏着一些事实,但这是错误的,在这里,它是以简单的形式陈述

建立到PostgreSQL数据库的第千个连接不会比建立第一个连接慢多少

只要连接处于空闲状态,它们的危害就很小:

  • 每一个都将消耗几MB内存来保存数据,如目录缓存

  • <> >某些操作,比如在查询开始时创建快照,需要更长的时间,因为它们必须考虑每个数据库连接。

最大的问题是您无法控制这些连接,它们可能会突然成为活动的处理查询。这将杀死你有两个原因:

  • CPU或I/O子系统(或两者)都将完全过载,并且由于操作系统忙于上下文切换或I/O等待,每个人的处理都将陷入爬行状态

  • 每个连接都可以多次使用
    work\u mem
    内存来处理排序、散列等,因此除非您想耗尽内存,否则必须非常谨慎地配置
    work\u mem
    ,即使系统没有负载,这也会影响查询性能


出于这些原因,建议保持
max_connections
较低,并将连接池用作瓶颈。

一般规则:-每个打开的连接都必须在RDBMS服务器上分配资源。服务器的资源是有限的。100个连接已被确定为打开连接数的良好默认值。当然,如果您的服务器有更多的资源(CPU、内存、硬盘),那么您的服务器可以处理更多的连接。如果您有一台低端服务器,即使是20台也可能太难使用: