gpt4 book ai didi

sql - 了解 Snowflake 中的锁和查询状态(对单个表的多次更新)

转载 作者:行者123 更新时间:2023-12-04 10:06:58 24 4
gpt4 key购买 nike

将 python 连接器用于带有表单查询的雪花时

UPDATE X.TABLEY SET STATUS = %(status)s, STATUS_DETAILS = %(status_details)s WHERE ID = %(entry_id)s

,有时我会收到以下消息:

 (snowflake.connector.errors.ProgrammingError) 000625 (57014): Statement 'X' has locked table 'XX' in transaction 1588294931722 and this lock has not yet been released.

不久之后

Your statement X' was aborted because the number of waiters for this lock exceeds the 20 statements limit

这通常发生在多个查询试图更新单个表时。我不明白的是,当我在 Snowflake 中看到查询历史记录时,它说查询成功完成(成功状态)但实际上,更新从未发生过,因为表没有改变。

所以根据https://community.snowflake.com/s/article/how-to-resolve-blocked-queries我用过

SELECT SYSTEM$ABORT_TRANSACTION(<transaction_id>);

释放锁,但仍然没有任何反应,甚至在成功状态下查询似乎根本没有执行。所以我的问题是,这到底是如何工作的以及如何在不丢失查询执行的情况下释放锁(另外,由于锁而排队的其他 20 多个查询会发生什么情况,有时似乎当锁被释放,下一个获得锁并且也必须被中止)。

如果你能帮助我,我将不胜感激。谢谢!

最佳答案

不确定 Sergio 是否得到了答案。在这种情况下,问题不在于表格。根据我对雪花的经验,以下是我的理解。

在雪花中,每个表操作还涉及元表的更改,该元表跟踪微分区,最小值和最大值。默认情况下,此元表仅支持 20 个并发 DML 语句。因此,如果一个表不断更新并在同一个分区上被命中,则有可能超过此限制。在这种情况下,我们应该考虑重新设计表更新/插入逻辑。在我们的一个用例中,在与雪花支持团队交谈后,我们将限制增加到 50

关于sql - 了解 Snowflake 中的锁和查询状态(对单个表的多次更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61537147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com