Pymssql:每次运行第六个查询时都会出现“DBPROCESS 已死亡或未启用”错误,无论我一天内重新运行多少次

问题描述 投票:0回答:1

问题

我有一个 AWS Glue 作业,该作业将标准分析库集与 Python Shell 结合使用。特别值得注意的是,它使用

SQLAlchemy
连接到我们的 Microsoft SQL Server。为此,我们还特意导入了
pymssql
2.3.1。在此 Glue 作业中,我们按顺序运行同一存储过程的多个副本六次。 看似随机,从 SQL Server 的角度来看,第六个(也是最后一个)存储过程将运行完成,但在其
pandas.read_sql
调用中失败。据我所知,错误消息来自 FreeTDS,是

操作错误(“pymssql.exceptions.OperationalError)(20047,b'DB-lib错误消息20047,严重性9: DBPROCESS 已死亡或未启用 ')

它的类型是

sqlalchemy.exc.OperationalError

我们的 SQL 框上的数据每天只更改一次,但奇怪的是:当我收到此错误时,我在当天剩下的时间里都会收到它。我重新运行 Glue 作业多少次并不重要。

我该如何调试这个?

我尝试过或排除了什么

抱歉这么长,但我已经尝试了很多:

  • 我确信 SQL 框没有问题。从它的角度来看,最终查询运行完成。扩展事件、
    sp_WhoIsActive
    和 SQL Server 错误日志都没有显示任何有趣的内容。他们知道 Python 何时关闭连接,但这很正常。
  • 按照此处的建议
    更改
    pymssql版本没有任何作用。我已经在 2.3.0 和 2.3.1 上尝试了以下所有内容。
  • 不存在 AWS 权限问题。这在一年中的大部分时间都很好用。
  • stream_results
    添加到我的连接选项中没有任何效果,无论是
    True
    还是
    False
    。该文档不清楚 Microsoft SQL Server 是否支持它。
  • 我已将
    echo="debug", echo_pool="debug"
    添加到我的引擎选项中。他们添加的额外日志记录没有任何价值。我什至懒得在这里分享。它完美地运行,直到我们得到与我上面提到的相同的错误。
  • pool_pre_ping = True
    迄今为止建议的解决方案。它并不能解决问题。我可以在上面讨论的附加日志中看到预 ping,但作业仍然以同样的方式失败。 禁用连接池 (
  • poolclass=NullPool
  • ) 并没有解决问题,
    pool_reset_on_return
    也没有解决问题。
    鉴于上述情况,我认为池化问题已被排除。但我确实发现有趣的是,默认池数是 5,而我在查询 6 上失败了。
  • 我在 Google 上
  • 非常深入地寻找这个错误。我已经阅读了
  • Google 结果的每一页“20047 db-lib 错误消息 dbprocess 已死亡”。这包括 Python 之外的项目(Ruby 似乎也有这个问题)。没有任何效果。 这不是数据太多的问题。我们还有另一个 Glue 作业,它收集这些数据的超集,今天效果很好。除了存储过程名称发生更改之外,其他作业的代码在所有方面都完全相同。
  • 我没有看到任何迹象表明这是一个超时问题。
  • Spark 不是一个选择。事实并非如此。我愿意尝试
  • pyobdc
  • ,但我从未让它与我们正在使用的 Windows EC2 一起工作。
  • 添加更多对存储过程的调用可以解决问题(例如,我可以在一次运行中覆盖整个 2024 年,或者通过执行 2024 年的一半,然后再执行另一半),但由于性能原因,我不想这样做成本。这也感觉像是作弊而不是找到根本原因。

您被安全措施(很可能是防火墙)阻止,这就是为什么当您收到此错误时,您将在当天剩余的时间内收到该错误,然后 24 小时后,当您(或您的计算即时)获得新的 IP 地址时您将能够再次重新运行它。 检查为什么您的胶水工作可能看起来像安全威胁,然后从那里开始工作。
python sql-server amazon-web-services aws-glue pymssql
1个回答
1
投票
通话之间尽量等待,有时短时间内频繁通话会触发防火墙)。

更新:

docs.aws.amazon.com/glue/latest/dg/security.html,您可以从 docs.aws.amazon.com/glue/latest/dg/infrastruct-security.html 对其进行一些控制

另请查看此链接:Assigning static IP to AWS Glue jobs dev.to/chuac/assigning-static-ip-to-aws-glue-jobs-300d

祝你好运,希望你能指出问题

© www.soinside.com 2019 - 2024. All rights reserved.