【发布时间】:2020-09-28 20:13:04
【问题描述】:
我是 Snowflake 的新手,文档不清楚。
- 假设我使用一个大型仓库,最大并发查询数为 5 个
- 有 5 位用户发起了可能需要几分钟才能完成的繁重查询
- 第 6 个用户有一个简单的查询要执行
- 运行这 5 个查询的进程是在任何时间点产生还是运行到完成?
- 第 6 个用户是否必须等到达到超时限制并尝试使用不同的虚拟仓库
谢谢!
【问题讨论】:
标签: snowflake-cloud-data-platform
我是 Snowflake 的新手,文档不清楚。
谢谢!
【问题讨论】:
标签: snowflake-cloud-data-platform
这实际上是一个很好的问题,了解它在雪花中的工作原理将帮助您更优化地使用雪花。正如您已经知道的那样,雪花使用虚拟仓库进行计算,这些虚拟仓库只不过是计算节点的集群。每个节点有 8 个核心。因此,当您向虚拟仓库提交查询时,每个查询都由一个或多个核心处理(基于查询是否可以并行化)。因此,如果虚拟仓库没有任何核心来执行第 6 次查询,它将排队。如果您登录到雪花 UI 并单击仓库选项卡,您将通过条形图上的黄色看到这个队列。如果您查询 QUERY_HISTORY 视图,您也可以在“QUEUED_OVERLOAD_TIME”下看到它。
现在,查询始终排队并不是一件好事。因此,最佳实践是拥有多仓库策略。为每组独特的工作负载分配一个专用仓库,以便您可以根据给定工作负载的查询负载水平/垂直扩展它们。
【讨论】:
与大多数(所有?)其他数据库一样,队列是先进先出队列。如果一个查询因为其他查询正在消耗集群的所有资源而排队,那么它必须等到其他查询完成(或超时)才能运行。 Snowflake 不会暂停正在运行的查询以“潜入”较小的查询。
您可以随时调整仓库的大小来推送查询。这是来自the documentation 的一句好话:
单集群或多集群(在最大化模式下):语句排队,直到释放已分配的资源或提供额外的资源,这可以通过增加仓库的大小来完成.
【讨论】: