【问题标题】:AWS Redshift - How to find all tables that count towards the limit on a cluster?AWS Redshift - 如何查找计入集群限制的所有表?
【发布时间】:2020-07-07 17:15:55
【问题描述】:

Quotas and limits in Amazon Redshift 定义了“大型集群节点类型的表为 9,900”的限制。

集群中已达到该限制。

SQL ERROR [500310] [XX000]: [Amazon](500310) Invalid operation: 1040
Details:
Maximum tables limit exceeded. The maximum number of tables per cluster is 9900 for this instance type. The limit includes permanent and temporary tables. (pid: xxxxx)

为了知道我们是否要在集群中再次遇到此问题,DevOps 想要设置警报,但我们无法找到一个简单的查询来识别所有计入该限制的表。

我们得到的最接近的查询是svv_diskusage

SELECT COUNT(DISTINCT d.tbl) FROM svv_diskusage d;

总共返回了8,825。我们是1,075

临时表也很重要,但在引发异常时,我们甚至还没有接近 1,000 个临时表。

还有其他不包括连接到集群的每个数据库来计算表的想法吗?

【问题讨论】:

  • 附带问题:你们为什么有这么多桌子?每个表在架构方面真的是独一无二的吗?
  • @JohnRotenstein 由于数据量很大,所以表很多。不,表在架构方面并不是唯一的,但拆分数据带来了显着的好处,尽管违背了建议。
  • 这很有趣。从理论上讲,只要SORTKEY 包含在WHERE 语句中,即使有数十亿行,良好使用SORTKEY 也应该使表非常高效。这允许 Redshift “跳过”不包含相关数据的磁盘块。

标签: amazon-web-services amazon-redshift limit quota


【解决方案1】:

如文档所述,SVV_DISKUSAGE 视图仅计算永久表;它不计算在事务中创建的临时表。 STV_TBL_TRANS 跟踪事务期间创建的临时表。

或者,count(distinct table) 来自 STV_BLOCKLIST

但是,您真的想要不断地执行查询来跟踪集群中的表数量吗?特别是考虑到临时表将取决于活动事务的数量,这似乎是错误的方法。

相反,我会查看TotalTableCount CloudWatch metric。在此创建警报也会更容易。需要注意的是,您可能需要在 95% 时发出警报,因为该指标的分辨率可能较低。

【讨论】:

  • 从 CW Metrics 返回的计数是最好的方法。不完美,但非常接近我们的需求。谢谢。
猜你喜欢
  • 2017-08-12
  • 1970-01-01
  • 2015-11-29
  • 2014-03-02
  • 2018-03-18
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多