运行队列如何在 Snowflake 中工作?是不是有概念时间片?
Posted
技术标签:
【中文标题】运行队列如何在 Snowflake 中工作?是不是有概念时间片?【英文标题】:How does run queue work in Snowflake? Is there a concept timeslice at all?运行队列如何在 Snowflake 中工作?是否有概念时间片? 【发布时间】:2020-09-28 20:13:04 【问题描述】:我是 Snowflake 的新手,文档不清楚。
-
假设我使用一个大型仓库,最大并发查询数为 5 个
有 5 位用户发起了可能需要几分钟才能完成的繁重查询
第 6 个用户有一个简单的查询要执行
运行这 5 个查询的进程是在任何时间点产生还是运行到完成?
第 6 个用户是否必须等到达到超时限制并尝试使用不同的虚拟仓库
谢谢!
【问题讨论】:
【参考方案1】:这实际上是一个很好的问题,了解它在雪花中的工作原理将帮助您更优化地使用雪花。正如您已经知道的那样,雪花使用虚拟仓库进行计算,这些虚拟仓库只不过是计算节点的集群。每个节点有 8 个核心。因此,当您向虚拟仓库提交查询时,每个查询都由一个或多个核心处理(基于查询是否可以并行化)。因此,如果虚拟仓库没有任何核心来执行第 6 次查询,它将排队。如果您登录到雪花 UI 并单击仓库选项卡,您将通过条形图上的黄色看到这个队列。如果您查询 QUERY_HISTORY 视图,您也可以在“QUEUED_OVERLOAD_TIME”下看到它。
现在,查询始终排队并不是一件好事。因此,最佳实践是拥有多仓库策略。为每组独特的工作负载分配一个专用仓库,以便您可以根据给定工作负载的查询负载水平/垂直扩展它们。
【讨论】:
我觉得这里还有两点。 #1 - 仅仅因为您有一个最大并发数为 5 的仓库,并不意味着 5 个大型查询将实际执行。 Snowflake 可能会确定第一个查询正在使用所有资源,因此会将其余资源排队。 #2 - 如前所述,这就是为什么你应该多集群你的仓库!这允许 Snowflake 在需要时启动额外的计算,而您仍然只需为使用的内容付费!【参考方案2】:与大多数(所有?)其他数据库一样,队列是先进先出队列。如果一个查询因为其他查询正在消耗集群的所有资源而排队,那么它必须等到其他查询完成(或超时)才能运行。 Snowflake 不会暂停正在运行的查询以“潜入”较小的查询。
您可以随时调整仓库的大小来推送查询。这是来自the documentation 的一句好话:
单集群或多集群(在最大化模式下):语句排队,直到释放已分配的资源或提供额外的资源,这可以通过增加仓库的大小来完成.
【讨论】:
以上是关于运行队列如何在 Snowflake 中工作?是不是有概念时间片?的主要内容,如果未能解决你的问题,请参考以下文章
WebRequest.CachePolicy 是不是应该在 IIS 中运行的代码中工作?
启动 Laravel Artisan 命令队列的最佳方式:在共享主机中工作