如何限制Hasura在Docker Compose环境中打开的数据库连接数?
问题描述
我在Docker Compose搭建的E2E测试环境中运行Hasura,服务配置如下:
hasura: restart: always build: context: . dockerfile: hasura.Dockerfile ports: - "8080:8080" depends_on: - postgres - postgres-second environment: HASURA_GRAPHQL_DATABASE_URL: postgresql://username:password@postgres:5432/client__dev?application_name=hasura HASURA_GRAPHQL_ENABLE_CONSOLE: "true" HASURA_GRAPHQL_DEV_MODE: "true" # wait for postgres to be online # `graphql-engine serve` was discovered by running `docker inspect hasura/graphql-engine:v2.6.0` command: /bin/sh -c "./wait-for-it.sh postgres:5432 && ./wait-for-it.sh postgres-second:5432 && graphql-engine serve"
我发现它会打开大量Postgres数据库连接,执行以下查询:
select application_name, count(*) from pg_stat_activity group by application_name order by 2 desc
得到结果:
+---------------------+-----+ |application_name |count| +---------------------+-----+ |hasura-enterprise |35 | |hasura |35 | |graph-node-enterprise|13 | |graph-node |13 | | |5 | |IntelliJ IDEA 2023.2 |1 | |api-server-prisma |1 | |postgres_fdw |1 | |api-database-url |1 | +---------------------+-----+
背景:我正在执行的测试用例使用Hasura的webhook交付功能处理高吞吐量表。请问是否可以限制Hasura为HASURA_GRAPHQL_DATABASE_URL定义的数据库打开的连接数?
解决方案
可以通过Hasura的环境变量限制数据库连接数,具体配置方式如下:
- 限制主数据库连接池大小:添加
HASURA_GRAPHQL_DATABASE_CONNECTION_POOL_SIZE环境变量,设置允许的最大连接数。比如要把连接池限制为15,在Docker Compose的environment块中新增:HASURA_GRAPHQL_DATABASE_CONNECTION_POOL_SIZE: "15" - 多数据库场景适配:如果是通过环境变量配置的其他数据库(比如你的
postgres-second),可以用HASURA_GRAPHQL_DATABASE_<NAME>_CONNECTION_POOL_SIZE格式的变量,其中<NAME>为数据库别名(需大写,特殊字符替换为下划线);如果是控制台添加的数据库,可在数据库配置界面直接指定连接池大小。
注意事项:
- 连接池大小不能超过Postgres的
max_connections参数(默认通常为100),避免耗尽数据库连接资源。 - 高吞吐量场景下,连接池过小可能导致请求排队,需要结合实际测试调整数值,平衡资源占用与请求响应速度。
内容的提问来源于stack exchange,提问作者Paymahn Moghadasian
相关产品推荐
相关产品推荐

