Npgsql 和 PgBouncer 轮询
Npgsql and PgBouncer polling
我们目前正在使用 Pgbouncer(安装在数据库服务器上)进行数据库连接池。同时我们使用 Npgsql 库,它有自己的连接池。我读过建议我们应该在 Npgsql 中禁用池并仅使用 Pgbouncer。
当我们在 Npgsql 中禁用连接池时出现性能问题。
根据我的测试,连接到 pgbouncer 需要 100 毫秒。使用 PgBouncer 的服务器延迟小于 1 毫秒。
用 5 个连接执行 5 个查询将花费超过 500 毫秒,这太多了。
我们使用正确吗?连接延迟正在扼杀我的表现。
我试图从网络中的不同服务器连接到 pgbouncer,它用了 8 到 22 毫秒。我假设,这是一些网络问题。
没有理由在 Npgsql 中禁用连接池,除非你有错误或兼容性问题。
PGBouncer 通过一次处理更多并发连接而不会使 Postgres 过载(为每个新连接创建一个进程)来帮助实现可扩展性。这并不意味着创建新连接会更快,因此最好重用现有连接池。
Npgsql 将维护一个从您的应用程序到 pgbouncer 的连接池,而 pgbouncer 将拥有一个从其自身到 Postgres 的连接池。这工作正常,将确保两个网络跃点尽可能高效。
我们目前正在使用 Pgbouncer(安装在数据库服务器上)进行数据库连接池。同时我们使用 Npgsql 库,它有自己的连接池。我读过建议我们应该在 Npgsql 中禁用池并仅使用 Pgbouncer。
当我们在 Npgsql 中禁用连接池时出现性能问题。 根据我的测试,连接到 pgbouncer 需要 100 毫秒。使用 PgBouncer 的服务器延迟小于 1 毫秒。
用 5 个连接执行 5 个查询将花费超过 500 毫秒,这太多了。
我们使用正确吗?连接延迟正在扼杀我的表现。
我试图从网络中的不同服务器连接到 pgbouncer,它用了 8 到 22 毫秒。我假设,这是一些网络问题。
没有理由在 Npgsql 中禁用连接池,除非你有错误或兼容性问题。
PGBouncer 通过一次处理更多并发连接而不会使 Postgres 过载(为每个新连接创建一个进程)来帮助实现可扩展性。这并不意味着创建新连接会更快,因此最好重用现有连接池。
Npgsql 将维护一个从您的应用程序到 pgbouncer 的连接池,而 pgbouncer 将拥有一个从其自身到 Postgres 的连接池。这工作正常,将确保两个网络跃点尽可能高效。