Netezza 的 OLTP 性能问题
OLTP Performance Issue with Netezza
我们最近将数据库从 Oracle 迁移到了 Netezza。我们的主要是一个 OLAP 数据库,但其中一部分是 OLTP,它填充了几个表(前端应用程序)。这些实时表将与少数历史表连接并生成报告。我们对它的 OLAP 部分的性能感到满意,但是 OLTP 有一个主要的性能问题。在 Netezza 中改进 OLPT 的方法有哪些?或者有什么设计方法可以单独维护OLTP?
我不建议将 Netezza
用于 OLTP,但是我们会遇到数据如此之大以至于我们别无选择的情况。在这些情况下,您可以进行一些调整以加快速度。
- 确保你的 table 有好的
distribution
如果你找不到好的专栏到 distribute on
然后 distribute on random
- 将
organize
添加到您的 OLTP 操作所基于的密钥上的 table
- 确保您的密钥是分发table数据类型
Integer
,Date
或者您可以考虑混合设计
- 在
SQL Server
或 Postgres
中为您的 Web 应用程序执行 OLTP 操作
- 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 上加入的数据中。
我们最近将数据库从 Oracle 迁移到了 Netezza。我们的主要是一个 OLAP 数据库,但其中一部分是 OLTP,它填充了几个表(前端应用程序)。这些实时表将与少数历史表连接并生成报告。我们对它的 OLAP 部分的性能感到满意,但是 OLTP 有一个主要的性能问题。在 Netezza 中改进 OLPT 的方法有哪些?或者有什么设计方法可以单独维护OLTP?
我不建议将 Netezza
用于 OLTP,但是我们会遇到数据如此之大以至于我们别无选择的情况。在这些情况下,您可以进行一些调整以加快速度。
- 确保你的 table 有好的
distribution
如果你找不到好的专栏到distribute on
然后distribute on random
- 将
organize
添加到您的 OLTP 操作所基于的密钥上的 table - 确保您的密钥是分发table数据类型
Integer
,Date
或者您可以考虑混合设计
- 在
SQL Server
或Postgres
中为您的 Web 应用程序执行 OLTP 操作
- 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 上加入的数据中。