Netezza 的 OLTP 性能问题

OLTP Performance Issue with Netezza

我们最近将数据库从 Oracle 迁移到了 Netezza。我们的主要是一个 OLAP 数据库,但其中一部分是 OLTP,它填充了几个表(前端应用程序)。这些实时表将与少数历史表连接并生成报告。我们对它的 OLAP 部分的性能感到满意,但是 OLTP 有一个主要的性能问题。在 Netezza 中改进 OLPT 的方法有哪些?或者有什么设计方法可以单独维护OLTP?

我不建议将 Netezza 用于 OLTP,但是我们会遇到数据如此之大以至于我们别无选择的情况。在这些情况下,您可以进行一些调整以加快速度。

  1. 确保你的 table 有好的 distribution 如果你找不到好的专栏到 distribute on 然后 distribute on random
  2. organize 添加到您的 OLTP 操作所基于的密钥上的 table
  3. 确保您的密钥是分发table数据类型Integer,Date

或者您可以考虑混合设计

  1. SQL ServerPostgres
  2. 中为您的 Web 应用程序执行 OLTP 操作
  3. ETL 每隔几分钟或几小时变回 Netezza

并行系统的性能有两个主要考虑因素:数据的均匀分布;以及将要连接的数据的搭配。第一点已经解决:选择一个好的分区键,这将为您提供良好、均匀的数据分布。

关于我的第二点,如果要合并数据(比如更新),则必须很少或没有数据移动。确保这是真的将减少数据流量。确保数据并置的最佳方法是使用相同的分区键。同一个键总是散列到同一个节点;相同的节点意味着没有流量进行连接。例如,假设您有 Cust (CNo)、Order (Ono)、Order Item (Ono, INo) 和 Product (PNo)。主键在括号中。如果您使用以上作为分区键,数据将不会并置。但是,如果你在Cust中使用CNo,在Order中使用fk CNo,并且在Order Item中放置一个冗余的CNo fk作为分区键,它们将被并置。产品不能并置,但也不需要;它通常没有那么大,在 Product 中放置 CNo 是没有意义的。

NOSQL不允许连接,因为它不能保证连接数据的搭配(还有其他原因)。在 NOSQL 中,数据将分布在大量节点上。

两大性能杀手是排序和笛卡尔积。确保这些不存在于 Netezza 上加入的数据中。