Netezza 性能优化

Posted

技术标签:

【中文标题】Netezza 性能优化【英文标题】:Netezza Performance Optimization 【发布时间】:2018-10-19 14:28:37 【问题描述】:

我开始在 Aginity 上与 Netezza 合作,以处理每个表的数百万条记录。我一直在网上阅读有关如何优化表的内容,以便加载数据并在其上运行查询相对较快,我有几个问题。

1) 我读到的一件事是,您在创建表时选择的分布会影响您查询表的速度。在大多数情况下,最好在主键上分发吗?假设没有主键,但表中有外键,是在两个外键上分配好还是只在一个外键上分配好?

2) 我了解到您可以通过运行以下查询来查看表格偏斜的方式(我猜这很大程度上取决于您的分布):

SELECT count(*), datasliceid from SCHEMA.TableName group by datascliceid ordery by datasliceid

因此,在执行此操作时,我注意到每个 datasliceid 的最小数据数为 21,530,最大为 22,456。返回了 240 个 datasliceid。这样好还是应该更均匀地分布数据?

3) 最后但同样重要的是,我正在尝试运行:

generate statistics on SCHEMA.TABLENAME

在 Aginity 内部,但当我这样做时,我只收到消息 The command completed successfully,但什么也没显示。如何查看这些信息?

【问题讨论】:

【参考方案1】:

我会试一试: 1)只担心真正大表的分布(在所有中小型表上随机) 除此之外:仅在一个列上分发,并且仅当您加入很多时 2)在我看来,这种分布并没有倾斜。不用担心。 3)当您更新数据库中的统计信息时,主要是为了数据库优化器在您针对它运行(复杂)sql时做出更好的选择。但是,您之后可以从目录表中读取该信息。可以在网上找到相关查询:)

【讨论】:

什么才是真正的大表?例如,我这里有一个包含 57 列和超过 3400 万行的表。 因为你提到了 240 个数据切片,所以它是 Mako/Stripper -010,在这 34 个轧机行上只是“中等”。大约 10 个均匀分布的行将导致每个磁盘仅执行一次 I/O 操作。 这是我能做的最好的吗?还是你说的不好 这可能并不重要,但唯一确定的方法是创建几个sql语句进行测试,然后在涉及的表上制作多个副本并测量差异。但只尝试在您加入的列之一上分发并将其与“随机”进行比较 更重要的是:您是否使用过“组织所有 +groom 记录”?这是为了减少 I/O 的数量,根据我的经验,这更有可能成为瓶颈。选择一个您放置简单 where 子句的列(日期/时间是一个很好的猜测)

以上是关于Netezza 性能优化的主要内容,如果未能解决你的问题,请参考以下文章

优化性能和优化内存有啥区别?

性能优化工具-MAT的使用

性能优化

iOS性能优化总结

性能优化方法论系列四性能优化的注意事项

Android性能优化总提纲