了解连接处理方法

已完成

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

连接状态

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

  • 活动 - 当前正在运行查询的活动连接
  • 空闲 - 未使用的开放连接
  • 事务中空闲 - 连接等待,不执行任何工作。 使用 pg_stat_activity 了解连接正在执行的工作,以及连接处于此状态的时间。
  • 事务中空闲(中止)- 之前在事务中空闲但现在已中止的连接

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

最大连接数

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

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

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 功能将丢失。