Python 小烧瓶SQLAlchemy查询在芹菜任务中占用900Mb内存(Kubernetes群集)

Python 小烧瓶SQLAlchemy查询在芹菜任务中占用900Mb内存(Kubernetes群集),python,flask,kubernetes,celery,flask-sqlalchemy,Python,Flask,Kubernetes,Celery,Flask Sqlalchemy,我有一个非常简单的查询,在一个非常简单的表中: def get_默认值(域): defaults=BaseDefaults.query.filter_by(domain=domain).first() 返回默认值 该表有(不是开玩笑的)3行,34列,1 PK,1 Unique,2 FK。属于以下类型: Timestamp: 2 Cols Integer: 5 Cols Booleans: 8 Cols VarChar(100) & Varchar(250): 19 Cols 通常,这

我有一个非常简单的查询,在一个非常简单的表中:

def get_默认值(域):
defaults=BaseDefaults.query.filter_by(domain=domain).first()
返回默认值
该表有(不是开玩笑的)3行,34列,1 PK,1 Unique,2 FK。属于以下类型:

Timestamp: 2 Cols
Integer: 5 Cols
Booleans: 8 Cols
VarChar(100) & Varchar(250): 19 Cols
通常,这些列中大约有5-8列具有空值。 此函数在芹菜任务的上下文中运行,芹菜任务的内存急剧膨胀(1.2Gb),而另一个正在运行的任务的内存约为110Mb

因此,我用
内存分析器
分析了代码,结果发现这个特定函数
defaults=get\u defaults(domain)
消耗了大约800-900Mb的RAM,这完全没有意义

我在本地看不到同样的行为——它只发生在Kubernetes集群内(托管在DigitalOcean上),因此很难理解可能发生的情况

该函数查询托管在RDS上的Postgres DB,该数据库似乎工作正常(来自本地pc或SQL客户端的查询在不到200ms的时间内工作正常)

我还发现,大部分高内存消耗发生在第一次运行查询时,在第二次运行查询时(另一个任务运行),同一行增加了约120Mb的使用量,这似乎更合理。因此,芹菜炼金术中的会话管理也可能成为阻碍

它在集群中消耗大量RAM,并威胁节点的健康。如果我将吊舱的消耗限制在512Mb,吊舱会被创建,但随后就会死亡


关于如何排除故障、优化和修复此问题,有什么想法吗?

对于遇到类似问题的任何人,我在
backref
模型声明中修复了我的问题,即
lazy=True

在数据库中一个完全不同的表开始快速增长之前,这不是一个问题-我们使用的是
lazy='joined'
,它将自动连接所有与
bsaedfaults
声明了关系的表

使用
lazy=True
只加载查询的表,因此pod中的内存消耗从1.2Gb降至140Mb