【问题标题】:Snowflake database: Question on table performance which is stored in snowflake雪花数据库:关于存储在雪花中的表性能问题
【发布时间】:2022-01-17 01:45:08
【问题描述】:

我们在雪花数据库中的表中连续插入、更新和删除,这会在一段时间内减慢雪花中的表的性能吗?

【问题讨论】:

  • 表格中有多少行被更新/插入?您从表中选择的速度不应减慢,因为您知道 Snowflake 将数据存储在不可变的微分区中,如果您更新或删除,则会创建一个新的微分区,但这取决于表大小/表中的行数和您在表上执行的 SELECT 语句。
  • 我们从Oracle中拉取数据并使用MERGE语句插入、更新和删除数据。所以从技术上讲,整个表用于合并操作,并且有数百万行。

标签: sql performance snowflake-cloud-data-platform etl


【解决方案1】:

是的。有两个原因。

因为 INSERT、UPDATE 和 DELETE 的更改改变了分区数据的分片,因此即使 N 小时/天后存在相同数量的 ROW,行的布局也可能与查询的亲和性不一致您运行,因此您的性能配置文件可以从高度修剪分区读取到全表读取。

还有大量的更改,即使在此之后数据都是完美排序的,但要进行许多更改的共享事实意味着您最终会得到太多的分区,这会减慢 SQL 编译的速度。

如果您同时对同一个表进行 INSERT、UPDATE 和 DELETE 操作,也会导致性能不佳,因为第二个操作会被前者阻塞。这会浪费挂钟和信用分配(如果它们是不同的仓库)

您可以采取一些措施来避免这种情况,例如运行集群、在“停机时间”重建表。不删除数据,而是插入“删除表”,然后离开连接和排除匹配项。我们已经完成了以上所有工作。

【讨论】:

  • 我喜欢“删除表”黑客。我会在白天填充它们,然后在重建之前实际删除数据,这样可以保持它们很小。
  • 感谢您的回复。 :) 一个问题:在“停机时间”重建表;我可以使用 CREATE OR REPLACE TRANSIENT TABLE AS SELECT * FROM 吗?
  • @swanandkulkarni 是的,这是一种方法,您很可能也需要 COPY GRANTS。 docs.snowflake.com/en/sql-reference/sql/… 还有一些方法可以创建一个新表并交换它们。取决于你对写作过程的控制。此外,如果该表当前不是 TRANSIENT,则您不想进行替换 TRANSIENT。您希望它们相同。
  • @Simeon Piglgrim 感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多