我们目前正在使用Pgbouncer(安装在数据库服务器上)进行数据库连接池。同时我们使用Npgsql Library,它有自己的连接池。我已经阅读过建议,我们应该在Npgsql中禁用池并仅使用Pgbouncer。
在Npgsql中禁用连接池时存在性能问题。 根据我的测试,连接到pgbouncer需要100毫秒。使用PgBouncer的服务器延迟小于1毫秒。
使用5个连接执行5个查询将花费超过500毫秒,这太多了。
我们使用它是否正确?这种连接延迟正在扼杀我的表现。
答案 0 :(得分:0)
我尝试从网络中的不同服务器连接到pgbouncer,耗时8到22毫秒。我假设,这是一些网络问题。
答案 1 :(得分:0)
除非有错误或兼容性问题,否则没有理由在Npgsql中禁用连接池。
PGBouncer通过一次处理更多的并发连接而不会使Postgres过载(为每个新连接创建一个进程),从而提高了可伸缩性。这并不意味着创建新连接会更快,因此最好重用现有池。
Npgsql将维护一个从您的应用程序到pgbouncer的连接池,而pgbouncer将会拥有一个从其自身到Postgres的连接池。这样可以很好地工作,并确保两个网络跃点都尽可能高效。