Snowflake中的运行队列是如何工作的?有概念时间片吗



我是Snowflake的新手,文档不清楚。

  1. 假设我使用一个最大有5个并发查询的大型仓库
  2. 有5个用户触发了繁重的查询,可能需要几分钟才能完成
  3. 第6个用户有一个简单的查询要执行
  4. 运行这5个查询的进程在任何时间点都会产生结果吗?或者它们会一直运行到完成吗
  5. 第六个用户是否必须等待,直到达到超时限制,然后尝试使用不同的虚拟仓库

谢谢!

与大多数(所有?(其他数据库一样,队列是一个先进先出的队列。如果一个查询由于其他查询正在消耗集群的所有资源而被排队,那么它必须等到其他查询完成(或超时(才能运行。Snowflake不会暂停正在运行到";潜入";较小的查询。

不过,您总是可以调整仓库的大小来推动查询。以下是文档中的一行:

单集群或多集群(在最大化模式下(:语句排队,直到释放已分配的资源或提供额外的资源,这可以通过增加仓库的大小来实现。

这实际上是一个很好的问题,了解它在雪花中的工作原理将帮助您更好地使用雪花。正如您已经知道的,snowflake使用虚拟仓库进行计算,这些虚拟仓库只是计算节点的集群。每个节点有8个核心。因此,当您向虚拟仓库提交查询时,每个查询都由一个或多个核心处理(取决于查询是否可以并行化(。因此,如果虚拟仓库没有任何核心来执行第六个查询,它就会排队。如果您登录雪花UI并单击仓库选项卡,您将通过条形图上的黄色看到排队。如果查询query_HISTORY视图,也可以在"QUEUED_OVERLOAD_TIME"下看到它。

现在,对于查询一致排队来说,这不是一件好事。因此,最佳实践是采用多仓库策略。为每个唯一的工作负载组提供一个专用仓库,以便您可以根据给定工作负载的查询负载水平/垂直扩展它们。

最新更新