Amazon redshift 由于正在运行查询,红移群集变大

Amazon redshift 由于正在运行查询,红移群集变大,amazon-redshift,Amazon Redshift,由于一个运行了100多小时的查询,在Aginity中我们看到我们的集群大小从1 TB变为5 TB 通过检查svv_table_info,我们发现每个表的大小都比我们过去看到的要大得多。在那之后,我们检查了AWS控制台,我们看到5天前开始增加大小,同时100小时运行的查询也开始了 终止查询后,红移数分钟后大小恢复为1 TB,每个表大小恢复正常 为什么会这样 记录在案的是,运行100小时的查询并没有涉及到所有在查询运行时其大小急剧增加的表 编辑 我现在真的无法重现这个错误。但步骤如下: 在Agi

由于一个运行了100多小时的查询,在Aginity中我们看到我们的集群大小从1 TB变为5 TB

通过检查svv_table_info,我们发现每个表的大小都比我们过去看到的要大得多。在那之后,我们检查了AWS控制台,我们看到5天前开始增加大小,同时100小时运行的查询也开始了

终止查询后,红移数分钟后大小恢复为1 TB,每个表大小恢复正常

为什么会这样

记录在案的是,运行100小时的查询并没有涉及到所有在查询运行时其大小急剧增加的表

编辑 我现在真的无法重现这个错误。但步骤如下:

  • 在Aginity中,我意外地看到集群的大小是5TB,即使集群只有2个ds2.xlarge节点(总共4TB)

  • 我查询svv_table_info以获得每个表的大小——它们的总和都是5TB,我发现它们中的大多数看起来都大得惊人

  • 我看到DWH拥有所有最新的数据,尽管它“据说”已经满了至少2天(它的大小也超过了4TB)

  • 我看到一个运行了100多小时的查询,一位数据分析师留下了一个打开的笔记本。查询没有涉及所有看起来不合理的大表

  • 我终止了查询,过了一会儿一切都恢复正常

因此:
-如果我们只有2x2TB=4TB的可用空间,红移怎么可能增长到5TB

这也发生在我们身上。红移在运行查询时使用磁盘空间,这就是为什么在终止查询时集群大小会恢复正常


这里有一篇关于这方面的非常好的文章,首先区分Amazon Redshift在查询执行期间如何使用存储可能会有所帮助。有两种方法:

  • 基于磁盘的查询。当查询内存不足时,溢出会“溢出”到磁盘,查询将变为“基于磁盘”
  • 中间存储。当查询需要保存中间操作的结果时,将其用作未来操作的输入
  • 在本例中,我认为您正在考虑使用中间存储。无论查询计算了什么,它都开始用中间结果填充磁盘。当一个查询连接两个非常大的表(例如,每一个表都有数十亿行)时,通常会发生这种情况,这些表通常是由没有编写OLAP查询经验的人编写的。5TB的绝对数与使用的磁盘间隔百分比(在您的情况下为100%)相关性较小


    我们已经写了一篇关于如何修复基于磁盘的查询的文章,其中详细介绍了红移的细节:

    是的,但这真的解释了所有的事情吗?如果没有看到这些查询,就很难准确地理解那里发生了什么。完全正确-这似乎没有意义@srdjan,你能告诉我更多的细节吗?@JonScott你可以看到我在问题底部向上所做的步骤。当同样的事情发生在我身上时,我的查询中出现了一个错误,产生了一个大表的笛卡尔积,因此n个平方行数。。。这会溢出到磁盘上。仔细检查联接条件假设svv_table_info中的表大小反映了磁盘上的实际大小,但这并不总是正确的。总表大小可能大于4TB,但这是由于svv_table_info计算表大小的方式,这是近似值。不管svv_table_信息告诉您什么,您只有4TB的磁盘。群集大小没有“从1TB变为5TB”-群集大小始终为4TB(在本例中)。您所看到的是磁盘空间的使用百分比,您最初使用的磁盘空间约为25%,然后运行这个大查询时,磁盘空间的使用率上升到100%。