Kubernetes 上带有 Pgbouncer 的 Npgsql - 高延迟
Posted
技术标签:
【中文标题】Kubernetes 上带有 Pgbouncer 的 Npgsql - 高延迟【英文标题】:Npgsql with Pgbouncer on Kubernetes - hight latency 【发布时间】:2021-05-24 12:30:02 【问题描述】:我有一个身份api,该项目或多或少是具有Aspnet核心身份的入门模板。它部署在 GKE 集群上,并使用 Google Cloud sql PostgresSql 作为数据库。
我的 jmeter 测试:在 api Account/LogIn
上 30 秒内有 6000 个请求;拥有 500 万 用户的数据库
使用 npgsql 的内部轮询器和连接字符串Pooling=true;Minimum Pool Size=100;Maximum Pool Size=500
P99 | P95 | AVG |
---|---|---|
700 ms | 80 ms | 40 ms |
结果很好,但是在测试过程中 pod 的 cpu 接近 100%
在与Pooling=false
的连接字符串中使用一个PgBouncer
P99 | P95 | AVG |
---|---|---|
53.22s | 48.39s | 9s |
数字不言自明
查看 postgres 日志,查询解析和绑定似乎花费了 256 毫秒,查询执行后连接在 589 毫秒后关闭。
我是否缺少一些 npgsql 配置? 为什么每个查询都有解析和绑定?
[2186] => queryPerProcess Object
(
[numQuery] => 4
[pidProcess] => 6030
[processStartTime] => 2021-02-17 16:07:10.437
[totalQueryTime] => 0.338
[lastQueryTime] => 2021-02-17 16:07:10.438
[discardQueryTime] => 2021-02-17 16:07:12.006
[closeTimeDiff] => 568
[lines] => Array
(
[0] => 6030 2021-02-17 16:07:10.437 UTC identity Identity LOG: duration: 0.112 ms parse <unnamed>: SELECT a."Id" ... etc"
[1] => 6030 2021-02-17 16:07:10.438 UTC identity Identity LOG: duration: 0.144 ms bind <unnamed>: SELECT a."Id" .. etc "
[2] => 6030 2021-02-17 16:07:10.438 UTC identity Identity LOG: duration: 0.039 ms execute <unnamed>: SELECT a."Id" .. etc"
[3] => 6030 2021-02-17 16:07:12.006 UTC identity Identity LOG: duration: 0.043 ms statement: DISCARD ALL
)
)
【问题讨论】:
【参考方案1】:那里似乎有多个问题...
首先,Npgsql 的池是一个进程内池,其中打开和关闭的开销极小。使用 PgBouncer,您的应用程序仍然必须建立 TCP 连接(甚至可能是 SSL 连接),这是不可忽略的开销。因此,即使您还打算使用 pg_bouncer(它可以用作服务器端池),通常也建议您保留 Npgsql 的池。
其次,如果你不准备你的语句,Npgsql 会为每个查询发送 Parse/Bind/Describe/Execute/Sync。你可能想看看Npgsql docs on preparation。
【讨论】:
感谢谢伊的回答,我问这个问题是因为,正如我所说,我正在使用具有 aspnet 核心身份的默认网络核心项目,所以登录管理器会完成所有工作。除了使用所有可用连接之外,使用 Npgsql 池的负载测试具有很高的 CPU 消耗。你是说我可以在连接字符串中使用 pgbouncer 作为主机,让轮询为真吗?我的配置就像这个问题***.com/questions/57759603/…中的配置一样。如果一个 api 占用所有连接,我将永远无法扩展 是的:让 Npgsql 的池保持打开 - 按照您发布的链接中的建议 - 如果您需要,请连接到 pg_bouncer。以上是关于Kubernetes 上带有 Pgbouncer 的 Npgsql - 高延迟的主要内容,如果未能解决你的问题,请参考以下文章