mirror of
https://github.com/yyhuni/xingrin.git
synced 2026-01-31 11:46:16 +08:00
优化:增强数据库连接稳定性
This commit is contained in:
@@ -16,6 +16,7 @@ def setup_django_for_prefect():
|
||||
1. 添加项目根目录到 Python 路径
|
||||
2. 设置 DJANGO_SETTINGS_MODULE 环境变量
|
||||
3. 调用 django.setup() 初始化 Django
|
||||
4. 关闭旧的数据库连接,确保使用新连接
|
||||
|
||||
使用方式:
|
||||
from apps.common.prefect_django_setup import setup_django_for_prefect
|
||||
@@ -36,6 +37,25 @@ def setup_django_for_prefect():
|
||||
# 初始化 Django
|
||||
import django
|
||||
django.setup()
|
||||
|
||||
# 关闭所有旧的数据库连接,确保 Worker 进程使用新连接
|
||||
# 解决 "server closed the connection unexpectedly" 问题
|
||||
from django.db import connections
|
||||
connections.close_all()
|
||||
|
||||
|
||||
def close_old_db_connections():
|
||||
"""
|
||||
关闭旧的数据库连接
|
||||
|
||||
在长时间运行的任务中调用此函数,可以确保使用有效的数据库连接。
|
||||
适用于:
|
||||
- Flow 开始前
|
||||
- Task 开始前
|
||||
- 长时间空闲后恢复操作前
|
||||
"""
|
||||
from django.db import connections
|
||||
connections.close_all()
|
||||
|
||||
|
||||
# 自动执行初始化(导入即生效)
|
||||
|
||||
@@ -114,15 +114,20 @@ DATABASES = {
|
||||
# - 60-120: 推荐值(平衡性能和资源占用)
|
||||
# - 300+: 适合长时间任务(减少连接重建开销)
|
||||
# - None: 永久连接(仅适合专用连接池,不推荐)
|
||||
'CONN_MAX_AGE': int(os.getenv('DB_CONN_MAX_AGE', '300')), # 远程数据库使用 300 秒,减少重连开销
|
||||
'CONN_MAX_AGE': int(os.getenv('DB_CONN_MAX_AGE', '60')), # 降低到 60 秒,更快检测失效连接
|
||||
|
||||
# Django 4.1+ 连接健康检查:每次使用前验证连接是否有效
|
||||
# 解决 "server closed the connection unexpectedly" 问题
|
||||
'CONN_HEALTH_CHECKS': True,
|
||||
|
||||
# PostgreSQL 特定选项 - 针对远程数据库优化
|
||||
'OPTIONS': {
|
||||
'connect_timeout': 30, # 连接超时 30 秒(远程数据库需要更长时间)
|
||||
'options': '-c statement_timeout=60000 -c idle_in_transaction_session_timeout=300000', # SQL 语句超时 60 秒,事务空闲超时 5 分钟
|
||||
'keepalives_idle': 600, # TCP keepalive 空闲时间 10 分钟
|
||||
'keepalives_interval': 30, # TCP keepalive 间隔 30 秒
|
||||
'keepalives_count': 3, # TCP keepalive 重试次数
|
||||
'keepalives': 1, # 启用 TCP keepalive
|
||||
'keepalives_idle': 30, # TCP keepalive 空闲时间 30 秒(更积极地检测断连)
|
||||
'keepalives_interval': 10, # TCP keepalive 间隔 10 秒
|
||||
'keepalives_count': 5, # TCP keepalive 重试次数
|
||||
# 性能优化参数
|
||||
'sslmode': 'disable', # 禁用SSL以减少连接延迟(如果网络安全可控)
|
||||
'application_name': 'xingrin_scanner', # 标识应用名称,便于监控
|
||||
|
||||
Reference in New Issue
Block a user