了解连接处理

已完成

Postgres 使用基于进程的连接模型。 建立连接涉及操作系统和少量内存的分配。 每个 SQL 查询都使用当前连接执行。

连接状态

连接可能处于以下四种状态之一:

  • 活跃 - 正在运行查询的活动连接。
  • 未使用的 - 未在使用的开放连接。
  • 在事务为空闲 - 连接处于等待状态,不进行任何操作。 使用 pg_stat_activity 来了解连接正在进行的活动,以及连接处于该状态的时长。
  • 事务中空闲(已中止) - 以前在事务 空闲但现在已中止的连接。

基于进程的连接模型使得维护许多空闲连接的成本很高。

最大连接数

PostgreSQL 使用名为 max_connections的服务器参数在任何时间点限制与服务器的最大并发连接数。 在 Azure Database for PostgreSQL 中,默认值取决于计算层。 允许的值为 25 到 5000。

PostgreSQL 的本地实现为超级用户保留一些连接,以保持数据库的完整性。 此保留通常为 15% 的 max_connections 值。

Azure Database for PostgreSQL 是一种托管解决方案,可自动保留三个连接来监视灵活服务器。

注意

Azure Database for PostgreSQL 中没有用于管理 superuser_reserved_connections 的服务器参数。

连接池

频繁打开和关闭连接的客户端应用程序可能会遇到连接延迟,导致每秒事务数较低,应用程序延迟总体较高。

Azure Database for PostgreSQL 建议使用连接池,而不是频繁打开和关闭连接。 连接池技术通过重复使用现有连接来提高效率,而不是关闭和重新创建连接。 此过程可减少连接延迟,并允许服务器上的数据库每秒更高的数据库事务数。

连接池在服务器启动时建立固定的连接集,然后维护这些连接。 连接池还有助于减少服务器上不断创建新连接导致的内存碎片。

PGBouncer 是内置于 Azure Database for PostgreSQL 的连接池解决方案。 启用 pgBouncer:

  1. 在 Azure 门户中,导航到 Azure Database for PostgreSQL 服务器。
  2. 从左侧菜单中选择 服务器参数
  3. 在搜索栏中,搜索 PgBouncer
  4. pgbouncer.enabled 设置为 true 以启用 PgBouncer。 此设置不需要重启服务器。
  5. pgbouncer.default_pool_size 设置为每个用户/数据库对所需的连接数。 默认值为 50。
  6. pgBouncer.pool_mode 参数设置为 TRANSACTION。

注意

公共访问和专用访问网络中的常规用途和内存优化计算层支持 PgBouncer。 PgBouncer 不支持在可突发计算层运行。 当计算层从“常规用途”或“内存优化”更改为“可突发”时,PGBouncer 功能将丢失。