在Snowflake完成阻塞查询



我正在snowflake中运行合并查询,但每当我在10-15秒后运行该查询时,它都会显示查询的状态为"Blocked"

所以我的问题是,如果我让这个查询运行,它会完成吗?或者查询已经被阻塞并且永远不会完成。

我目前的理解是,当一个查询显示阻塞状态时,这意味着资源(表)被阻塞,我们不能在同一表上运行另一个查询,直到这个查询完成。蒂雅:)

这是正确的,但可能还有其他情况由于查询被阻止。

在Snowflake web界面的History页面上,你可以注意到你的一个查询有一个BLOCKED状态。该状态表明查询正在尝试获取已被另一个事务锁定的表或分区上的锁。

帐户管理员(ACCOUNTADMIN角色)可以查看所有的锁、事务和会话:

SHOW LOCKS IN ACCOUNT;该命令显示所有锁定的对象,以及所有等待锁定的查询。您应该看到阻塞查询的状态为WAITING,以及它试图锁定的表。查找具有HOLDING状态的事务,并在目标表上加锁。请注意该锁的会话id和事务id。

在"历史记录"页面中,可以通过过滤会话ID来查看该会话的查询历史。

如果会话仍然可用,则可以执行COMMIT或ROLLBACK语句来结束事务并释放锁。如果会话不再可用,可以通过使用SHOW LOCKS命令中的事务ID来执行:

选择系统ABORT_TRANSACTION美元(& lt; transaction_id>;

帐户管理员可以对任何用户的事务执行此语句。

查询显然不能运行,直到它被解除阻塞。查询最终是运行还是取消(一旦表被解除阻塞)取决于STATEMENT_QUEUED_TIMEOUT_IN_SECONDS参数。这个链接提供了一个合理的解释:link

最新更新