数据库连接池配置指南
配置参数
最大空闲时间 (maxIdleTime)
- 当连接在池中空闲的时间超过这个配置值时,连接将被回收。
- 示例:
maxIdleTime=300000(单位:毫秒)
最大存活时间 (maxLifetime)
- 当连接在池中的总存活时间超过这个配置值时,连接将被回收,即使它不是空闲的。
- 示例:
maxLifetime=1800000(单位:毫秒)
最小空闲连接数 (minIdle)
- 确保在池中始终有一定数量的连接是空闲的。
- 示例:
minIdle=10
连接池大小 (maxPoolSize)
- 设置连接池的最大连接数。
- 示例:
maxPoolSize=50
- 内存占用计算
首先,估算每个数据库连接的内存占用。这个值可以通过监控工具或数据库文档获取。假设每个连接占用 10 MB 内存。
plaintext 纯文本输入
每个连接的内存占用 = 10 MB
然后,根据服务器的总内存估算可以支持的最大连接数。
plaintext 纯文本输入
服务器总内存 = 32 GB = 32 * 1024 MB = 32768 MB
最大连接数 = 32768 MB / 10 MB = 3276
2. CPU 核心数计算
一个常见的经验法则是,每个 CPU 核心可以处理 10 到 20 个并发连接。根据这个经验法则计算最大连接数。
plaintext 纯文本输入
服务器 CPU 核心数 = 8
每个核心的连接数 = 15(取一个中间值)
最大连接数 = 8 核心 * 15 = 120
综合考虑
综合内存和 CPU 的计算结果,选择一个较小的值作为最大连接数。这里,我们选择 120:
plaintext 纯文本输入
max_connections = 120
设置docker-compose里面 添加参数,然后env也添加参数
services:
API service
api:
image: langgenius/dify-api:${VERSION}
restart: always
environment:
# Use the shared environment variables.
<<: shared-api-worker-env
# Startup mode, 'api' starts the API server.
MODE: api
SENTRY_DSN: ${API_SENTRY_DSN:-}
SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
** NUMEXPR_MAX_THREADS: ${NUMEXPR_MAX_THREADS:-12}*
.env 添加
threads max
NUMEXPR_MAX_THREADS=12
提高性能: worker 可以设置搞一些。
POSTGRES_MAX_CONNECTIONS=3000
SQLALCHEMY_POOL_SIZE=150
Default is false (i.e., autoscaling is disabled).
Example:
CELERY_AUTO_SCALE=true
CELERY_AUTO_SCALE=true
The maximum number of Celery workers that can be autoscaled.
This is optional and only used when autoscaling is enabled.
Default is not set.
CELERY_MAX_WORKERS=10
The minimum number of Celery workers that can be autoscaled.
This is optional and only used when autoscaling is enabled.
Default is not set.
CELERY_MIN_WORKERS=3
The number of API server workers, i.e., the number of workers.
Formula: number of cpu cores x 2 + 1 for sync, 1 for Gevent
Reference: https://docs.gunicorn.org/en/stable/design.html#how-many-workers
SERVER_WORKER_AMOUNT=27
浙公网安备 33010602011771号