【问题标题】:OperationalError & ConnectTimeoutError When running multiple queries in snowflake (From many cloud run instances)OperationalError & ConnectTimeoutError 在雪花中运行多个查询时(来自许多云运行实例)
【发布时间】:2021-07-02 02:40:45
【问题描述】:

我的平台在 gcp 云上运行。我们使用的数据库是雪花。

每周一次,我们安排(使用 Cloud Schedule)一个实际上触发多达 200 个任务的作业(目前,将来可能会增长)。所有任务都被添加到某个队列中。

每个任务实际上都是将调用后推送到云运行实例。

每个云运行实例都在处理一个请求(另请参阅环境设置),这意味着 - 一次执行一项任务。此外,每个云运行都有 2 个活动会话,连接到雪花中的 2 个数据库(每个数据库一个)。第一个会话用于“global_db”,另一个会话用于特定的“person_id”数据库(注意:来自不同云运行实例的同一 person_id 数据库可能有 2 个活动会话)

问题:

1 - 将任务队列“最大并发调度”设置为 1000 时,我得到 503(“请求失败,因为实例未通过就绪检查。”) 问题可能是 gcp 自动缩放能力 - 已解决,方法是将“最大并发调度”降低到 gcp 可以处理的合理数量。

2- 将任务队列“Max concurrent dispatches”设置为 10 以上时, 我收到多个 ConnectTimeoutError 和 OperationalError,并带有以下消息(我删除了长 ID 并只放了 {} 以使消息更短):

sqlalchemy.exc.OperationalError: (snowflake.connector.errors. ) 250003: Failed to execute request: HTTPSConnectionPool(host='*****.us-central1.gcp.snowflakecomputing.com', port=443): Max retries exceeded with url: /session/v1/login-request?request_id={REQUEST_ID}&databaseName={DB_NAME}&warehouse={NAME}&request_guid={GUID} (Caused by ConnectTimeoutError(<snowflake.connector.vendored.urllib3.connection.HTTPSConnection object at 0x3e583ff91550>, 'Connection to *****.us-central1.gcp.snowflakecomputing.com timed out. (connect timeout=60)'))

(此错误的背景:http://sqlalche.me/e/13/e3q8

snowflake.connector.vendored.urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='*****.us-central1.gcp.snowflakecomputing.com', port=443): Max retries exceeded with url: /session/v1/login-request?request_id={ID}&databaseName={NAME}&warehouse={NAME}&request_guid={GUID}(Caused by ConnectTimeoutError(<snowflake.connector.vendored.urllib3.connection.HTTPSConnection object at 0x3eab877b3ed0>, 'Connection to *****.us-central1.gcp.snowflakecomputing.com timed out. (connect timeout=60)'))

有什么想法可以解决吗? 问你有什么问题,我会详细说明

环境设置 -

  • 云任务队列 - 检查“最大并发调度”的多个配置,从 10 到 1000 并发。最大尝试次数为 1,最大分派次数为 500。
  • 云运行 - 5 个热实例,每个实例 1 个请求。可以自动扩展至最多 1000 个实例。
  • snowflake - ACCOUNT 参数是默认的(MAX_CONCURRENCY_LEVEL=8 和 STATEMENT_QUEUED_TIMEOUT_IN_SECONDS=0)并更改为(为了处理这些错误):
    • MAX_CONCURRENCY_LEVEL - 32
    • STATEMENT_QUEUED_TIMEOUT_IN_SECONDS - 600

【问题讨论】:

  • 如果“Max concurrent dispatches”小于10,效果好吗?
  • 是的,我用 5 试过了,效果很好
  • 该错误表明您的登录请求超时,因此您甚至没有达到运行查询的阶段。由于它的工作时间不到 10 个,我正在考虑来自云端的一些限制/并发。
  • 你的意思是 gcp 还是雪花?
  • 我认为是 GCP,但很难说。在 Snowflake 方面,您甚至没有达到使用 MAX_CONCURRENCY_LEVEL 因为您仍在登录请求中,所以从我的角度来看,这不是 Snowflake 的并发问题。另一方面,我不会触及 MAX_CONCURRENCY_LEVEL。当您达到 MAX_CONCURRENCY_LEVEL 查询被排队,而不是被丢弃,所以这个参数肯定不是这里的原因。

标签: google-cloud-platform snowflake-cloud-data-platform google-cloud-run google-cloud-tasks


【解决方案1】:

我想通知我们,我们已经发现了问题 - 当项目开始时,我们已经创建了一个具有静态 IP 到云运行实例的 VPC。

很遗憾,单个 VPC 网络的最大连接数为 25..

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2020-08-19
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多