数据库

连接管理

高效利用连接资源


连接管理

每个计算附加组件都预配置了直接连接数和Supavisor连接池大小。本指南将介绍如何有效监控和管理这些资源。

配置Supavisor连接池大小

您可以通过数据库设置中的"连接池配置"部分来调整Supavisor管理的数据库连接数量:

连接信息与证书

通用规则是:如果您大量使用PostgREST数据库API,建议谨慎地将连接池大小提升超过40%。否则,可以将80%的连接分配给连接池。这样能为认证服务器和其他工具保留足够空间。

这些数值是通用建议,实际取决于您使用的其他Supabase产品及其使用程度。具体数值应根据您的并发峰值连接使用情况而定。例如,如果一周内您只使用了80个连接,而数据库最大连接数设置为500,那么实际上您可以分配420个连接的差值(减去合理缓冲)来满足更多需求。

连接监控

记录历史使用情况

Supabase提供了Grafana仪表板,可记录并可视化200多个项目指标,包括连接数。设置说明请参阅指标文档

其中的"客户端连接"图表同时显示Supavisor和Postgres的连接情况: 客户端连接图表

监控实时连接

pg_stat_activity 是一个特殊的视图,用于追踪数据库运行的进程,包括实时连接。它特别适用于判断空闲客户端是否占用了连接槽位。

查询所有实时连接的SQL语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT pg_stat_activity.pid as connection_id, ssl, datname as database, usename as connected_role, application_name, client_addr as IP, query, query_start, state, backend_startFROM pg_stat_sslJOIN pg_stat_activityON pg_stat_ssl.pid = pg_stat_activity.pid;

查询结果字段说明:

列名描述
connection_id连接ID
ssl是否使用SSL加密
database连接的数据库名称(通常是postgres
usename连接用户的角色
application_name连接应用的名称
client_addr连接服务器的IP地址
query连接执行的最后一条查询
query_start最后一条查询的执行时间
state查询状态:active(活跃)或idle(空闲)
backend_start连接建立的时间戳

通过用户名可以识别连接来源:

角色对应的API/工具
supabase_adminSupabase监控系统和Realtime服务使用
authenticator数据API (PostgREST)
supabase_auth_admin认证服务
supabase_storage_admin存储服务
supabase_replication_admin同步读取副本
postgresSupabase仪表板及外部工具(如Prisma、SQLAlchemy、PSQL等)
用户定义的自定义角色外部工具(如Prisma、SQLAlchemy、PSQL等)