【问题标题】:Airflow sql alchemy pool size ignored气流 sql 炼金术池大小被忽略
【发布时间】:2019-08-02 22:28:24
【问题描述】:

我正在使用 postgres 数据库运行 airlfow 本地执行程序,我得到一个:(psycopg2.OperationalError) FATAL: remaining connection slots are reserved

我的配置:

sql_alchemy_pool_size = 5 sql_alchemy_pool_recycle = 1800 sql_alchemy_reconnect_timeout = 300

我仍然可以看到气流始终保持比池大小更多的连接打开。

我们如何限制 Airflow 以实际使用池限制?

airflow_version = 1.10.2; postgres_version = 9.6

【问题讨论】:

  • 您在使用 SubDag 运算符吗?那些不尊重连接池,并且可以产生大量与 Airflow DB 的连接。我们必须重写 DAG 以消除它们。
  • 不,我们没有使用 subdags

标签: postgresql psycopg2 airflow


【解决方案1】:

您有主进程的分支作为工作人员,每个工作人员管理自己的线程池。

检查LocalExecutor的实现;因为它在后台使用多处理。 SqlAlchemy 将在 fork LocalWorker 时关闭所有打开的连接;但是池的大小将等于父池的大小,因此在最大时,理论上您将拥有k * (n + 1) 连接,其中n 是您的并行度常数,k 是您的sql_alchemy_pool_size

【讨论】:

  • 除此之外,您还有 SQL_ALCHEMY_MAX_OVERFLOW ,它定义了达到限制时可以产生多少个连接。
【解决方案2】:

对 celery executor 有同样问题的人可以尝试减少 scheduler.max_threads (AIRFLOW__SCHEDULER__MAX_THREADS) 。

理论上Max no connections from scheduler = (sql_alchemy_pool_size + sql_alchemy_max_overflow) x max_threads + 1[Dag processor Manager] + 1[Main scheduler process]

查看https://stackoverflow.com/a/57411598/5860608 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多