【问题标题】:Do blocked queries in Snowflake complete完成 Snowflake 中的阻塞查询
【发布时间】:2021-12-11 21:36:43
【问题描述】:
我正在雪花中运行合并查询,但每当我在 10-15 秒后运行该查询时,它都会将查询的状态显示为“已阻止”。
所以我的问题是如果我让这个查询运行它会完成吗?或者是查询已被阻止并且永远不会完成。
我目前的理解是,当查询显示阻塞状态时,这意味着资源(表)被阻塞,我们不能在同一个表上运行另一个查询,直到该查询完成。 TIA :)
【问题讨论】:
标签:
sql
snowflake-cloud-data-platform
snowflake-schema
【解决方案1】:
没错,但可能存在其他情况导致查询被阻止。
在 Snowflake Web 界面的“历史记录”页面上,您可能会注意到其中一个查询的状态为 BLOCKED。该状态表明查询正在尝试获取已被另一个事务锁定的表或分区上的锁定。
帐户管理员(ACCOUNTADMIN 角色)可以查看所有锁、事务和会话:
在帐户中显示锁定;
此命令显示所有锁定的对象,以及所有等待锁定的查询。您应该看到被阻止的查询的状态为 WAITING,以及它试图锁定的表。查找具有 HOLDING 状态的事务,并在目标表上锁定。记下该锁的会话和事务 ID。
您可以通过过滤会话 ID 在“历史记录”页面上查看该会话的查询历史记录。
如果会话仍然可用,您可以执行 COMMIT 或 ROLLBACK 语句来结束事务并释放锁。如果会话不再可用,您可以使用 SHOW LOCKS 命令执行的事务 ID 来释放意外锁定:
SELECT SYSTEM$ABORT_TRANSACTION();
帐户管理员可以对任何用户的交易执行此语句。
【解决方案2】:
查询显然无法运行,直到它被解除阻塞。查询最终将被运行还是被取消(一旦表被解除阻塞)取决于 STATEMENT_QUEUED_TIMEOUT_IN_SECONDS 参数。这个链接给出了合理的解释:link