vertica最佳实践之优化projection

本文介绍了Vertica数据库中Projection的工作原理及其优化。内容包括Projection如何加速查询,优化建议如合理分配磁盘和临时空间,选择合适的排序顺序,使用分段Projection,以及关注Projection的刷新、合并和K-Safe设计,以提升数据库性能和高可用性。
摘要由CSDN通过智能技术生成

本文翻译自:
Best Practices for Projection Optimization

Vertica以优化查询的格式将数据存储在Projection 中。与物化视图类似,Projection 将结果集存储在磁盘上,而不是每次在查询中使用它们时都对其进行计算。Vertica会在数据更新或插入新数据时自动刷新这些结果集。

有时您可能需要刷新投影,以确保Projection中存在的是表中最新的数据。例如,当您从现有表创建Projection时,在执行刷新之前,Projection不会使用最新数据进行更新。

刷新Projection也可以提高您的Ancient History Mark。这缩短了AHM和当前时期之间的间隔,从而减少了catalog中使用的内存量。

本文档提供了一些有关优化Projection的最佳实践提示,以确保您在使用和刷新Projection时获得最佳性能。

本文包括:

  1. How Vertica Works with Projections
  2. Helpful Tips
  3. Monitoring Projection Refreshes
  4. Other Projection Tasks

How Vertica Works with Projections

Projection以优化查询的格式存储数据。与实例化视图类似,投影将结果集存储在磁盘上,而不是在每次查询时都对其进行计算。您可以使用新的或更新的数据刷新Projection。

Projection具有以下优点:

压缩和编码数据以减少存储空间。
简化跨数据库集群的分发。
提供高可用性和恢复。

Helpful Tips

为了最大程度地减少使用和刷新Projection时可能遇到的某些风险,请注意以下几点:

确保您有足够的临时空间和磁盘空间以使Projection成功刷新。
创建具有合理排序的Projection。
在大表上使用分段Projection。
创建Projection时指定正确的编码。

磁盘空间
如果没有足够的磁盘空间,则Projection可能需要很长时间才能刷新。通常,磁盘空间是Projection大小的2到3倍,可以缓解任何刷新问题。

其他可能影响Projection性能的空间问题包括:

TEMP空间中没有足够的空间。
没有足够的空间,因为表太大,并且Projection刷新会复制数据。
如果由于磁盘空间不足而遇到问题,则必须执行回滚,这将结束当前事务并丢弃在事务期间发生的所有更改。有关更多信息,请参见创建和回滚事务。

您还可以使用以下系统表监视磁盘空间:

  1. PROJECTION_STORAGE
  2. DISK_STORAGE
  3. COLUMN STORAGE

合理的排序顺序
选择合理的排序顺序可以帮助您实现最佳查询性能。如果您的查询包含GROUP BY子句,JOIN或其他谓词,则最好将这些子句中指定的列放在排序顺序的前面。如果没有其他有关如何对数据进行排序的标准,则在高基数列之前先对最低基数列进行排序会更有效。

首先按具有最少不同值的列进行排序还具有减少磁盘空间的好处,因为该列的压缩效率更高。

有关更多信息,请参见选择排序顺序:最佳实践

Segmentation

有时在大表上创建分段的Projection以将查询执行工作负载分散到多个节点是很有帮助的。Projection 的Segmentation可实现以下目标:

  1. 当K-safe值大于零时,可确保高可用性和恢复性。
  2. 将查询执行工作负载分布在多个节点上。
  3. 允许针对不同的查询工作负载优化每个节点。
  4. 确定用于Segmentation Projection的列很重要。

Hash segmentation 是首选的分段方法。Primary key 具有大量的惟一数据值(高基维)和可接受的数据倾斜,是进行Hash segmentation 的最佳选择。

Encoding

Database Designer为您的数据实现最佳编码。创建Projection时,请确保在Projection列上指定编码以优化查询性能。使用适当的编码,您可以减少数据库占用空间并提高查询性能。

Monitoring Projections

使用以下系统表监视Projection状态和性能:

PROJECTIONS:列出Projection信息
PROJECTION_CHECKPOINT_EPOCHS:提供有关刷新检查点纪元的详细信息。
PROJECTION COLUMNS:提供关于Projection列,如编码类型,排序,统计的类型,并在该列的统计信息的最后更新时间信息。
PROJECTION_DELETE_CONCERNS:列出在删除数据时可能导致性能问题的Projection。

Other Projection Tasks

Refreshing Projection

为已经包含数据的表创建Projection时,Vertica不会自动将数据加载到新的Projection中。您必须对Projection执行刷新,否则新的Projection无法参与对其锚表执行的查询。

使用刷新功能执行Projection刷新。使用PROJECTION_ REFRESHES系统表监视刷新的Projection。

Merging Projection

准备要合并的Projection首先要有良好的Projection设计(请参见如何创建设计)。这使Vertica查询优化器在执行合并时更容易选择最佳Projection。

好的Projection设计策略提供的Projection可以帮助查询优化器避免额外的排序和数据传输操作,并提高MERGE性能。

Making Projections K-Safe

K-safety 保证 Vertica数据库集群的容错能力。K代表数据库集群中复制数据的数量。这些副本允许其他节点接管任何故障节点的查询处理。

在Projection中实施K-Safe会有所不同,具体取决于您是使用分段Projection还是未分段Projection。

对于K-safe数据库中的分段Projection,Vertica为此Projection创建了多个buddy projection,并将它们分布在整个群集的不同节点上。

您可以选择不对维表进行segment,因为它们相对较小。在这种情况下,请设计一个K-Safe数据库,以便在不对所有群集节点进行分段的情况下复制其维度表的Projection。

创建Projection时,您可以设置K-Safe值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值