雪花多集群仓库性能与大型仓库的单个仓库相比



我是Snowflake的新手,在使用Snowflake时,我在以下两个选项之间发生了冲突。

  1. 单个仓库,大小X-Large(16学分/小时)
  2. 多集群(最大集群=2,最小集群=2),大小(8学分/小时)

考虑到以上两个选项
性能方面,选择第二个选项有什么优势吗

注意:我知道多集群相对于单个仓库的优势。请分享您对此特定场景的答案(当min=max时)。

因此,运行查询时会发生以下情况。

我只想用single表示单个实例,用"multi"表示多实例集群,当我们运行查询时,它只在一个实例上。

从存储层读取\写入IO:

在这里,单个的IO是多个的两倍,因此如果您的查询是IO饱和的,那么单个是更好的选择。

并行步骤:

因此,如果在高基数列上有一个GROUP BY,那么single和multi应该同样好。如果基数很低,但有几十亿行,那么较小的实例可能会给出更好的结果,因为这些复杂的步骤无法在单个实例的较大集群大小上分解。但是,如果您有许多并发查询,那么这很可能会丢失。

许多查询/嘈杂的邻居:

如果有数百个查询一波接一波地出现,那么较大的单个实例启动这些查询的能力较差,因为它一次的并发任务较少,而单个非常大的查询可以刷新缓存,或者只是主导集群,这意味着您将停止处理普通/小型查询。在具有多个簇允许的情况下;"超重型";查询进入时,您只暂停了正常查询的一半。

其他想法这实际上也取决于您的负载模式,在我的上一份工作中,我们有一个自动扩展的小型实例集群,用于回答我们对仪表板、报告的读取查询,我们允许它运行得有点过度,所以事情很快。当我们的数据加载在第二个自动扩展的MEDIUM实例集群上运行时,我们故意超载,因为我们试图以最快/最便宜的速度加载数据。在非高峰时段,我们通过编程降低了自动缩放MAX,几乎耗尽了负载。但是将通过那些保存在"中的信用对LARGE实例进行一些昂贵的再处理;"半夜";此外,我们的装载任务还能够建立专门的大型仓库进行一次性重建,因为这都是与IO相关的工作,因此"仓库"的窗口越小;中断";系统越好,IO规模线性,因此总成本相同。

也就是说;什么是最好的";这真的取决于你在做什么,你的预算,以及你准备的权衡。雪花的黄金之处在于,它不像一个经典的DB,你必须选择尺寸并把它做好,选择一个,然后观看,如果它正在努力改变它的话。我们多次这样做,当我们的代码或雪花的发布改变了一些关键SQL的性能时,我们会跳进去,将实例数或大小增加一倍或三倍,以克服这种情况,同时尝试修复或解决SF问题,或等待SF回滚发布。对于几个小时来说,通常花更多的学分并不是预算制动。这种灵活性也意味着你可以只是试验,";如果我们尝试4个较小的实例会发生什么"quot;哦,没什么。。。看,我们刚刚省了一大笔钱;。。

如果最小值=最大值=2,则永久有2个仓库在运行(只要它们没有挂起)。如果您这样配置您的多集群仓库,那么您将失去很多优势,但对于您的特定用例,这可能是有意义的,我想

根据您的评论,以下是我的答案:

在这两种情况下,您将拥有相同的资源来处理查询。重要的区别在于运行单个重查询。正如您所知,单个查询还不能生成多个集群,因此当您在多集群仓库中运行查询时,它将在其中一个大型仓库上进行处理(最多使用8个节点)。

如果您在单个XL仓库上运行相同的查询,它可以由(最多)16个节点执行。因此,如果您将运行需要更多内存和CPU的繁重查询,那么使用单个XL仓库会更好。

关于并发性,有一个名为"并发"的参数;MAX_CONCURRENCY_LEVEL";。它的默认值是8,它限制了每个仓库并发执行的最大数量。如果您不更改它,您的单个XL仓库将同时执行最多8个查询,而您的多集群仓库可以同时执行16个查询。

https://docs.snowflake.com/en/sql-reference/parameters.html#max-并发级别

您可以增加这个参数,并在单个XL和多集群L仓库上提供相同的并发性。但在这种情况下,当您同时运行重查询和轻查询时,应该小心。因为一个查询可能会使用仓库的大部分资源,而您的轻量级查询可能会占用更少的资源和更长的时间。所以我建议使用多集群仓库,如果你有;相对";轻量级/并发查询。

相关内容

最新更新