本文翻译自:
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值。

文章目录How Vertica Works with ProjectionsHelpful TipsSegmentationEncodingMonitoring ProjectionsOther Projection TasksRefreshing ProjectionMerging ProjectionMaking Projections K-Safe本文翻译自:Best Practic...
在之前的博文《vertcia介绍》中有讲到,在 vertica 中,表只是一个逻辑上的概念,其真实数据其实是存储在一个个的 projection 中。 projection s以 优化 查询执行的格式存储数据。与物化视图类似, projection s将结果集存储在磁盘上,而不是在每次查询时计算它们。您可以使用新数据或更新数据刷新 projection s。 projection s提供以下好处: 1.压缩和编码数据以减少...
Vertica 是一款基于列存储的MPP(massively parallel processing)架构的 数据库 。它可以支持存放多至PB(Petabyte) 级别的结构化数据。 1)列式存储 vertica 以列格式存储数据, 以便在查 询时获得 最佳 性能。相比基于行的存储, 列存储可减少磁盘I/O, 非常适合读取 密集型工作负载 1、 使用分区 2、 定义主键外键 3、 默认的数字类型长度可能比实际需要的大。例如:NUMBERC 该类型默认的长度是38位,如果实际的长度比这个小,那你建表的时候最好加上适合的长度。 4、 对于一个True/False值,Boolean类型...
Vertica 数据库 的数据是存放在投影( projection )里, vertica 数据库 在对象创建的时候会自动创建一个supper projection , supper projection 主要实现让所有数据查询可见。 为了获得最好的性能和压缩比, vertica 建议创建自己的投影。 1 ...
从多个博主那里简单学习一下下,复制粘贴的文字,粗略了解 Vertica 是一款基于列存储的MPP(massively parallel processing)架构的 数据库 。它可以支持存放多至PB(Petabyte)级别的结构化数据。 是由关系 数据库 大师Michael Stonebraker(2014 年图灵奖获得者)所创建,于2011年被惠普收购并成为其核心 大数据 平台软件 Vertica 采用无共享的MPP 架构,基于工业标准的x86 服务器,拥有高可扩展性。 Vertica 集群中的所有节点100
Vertica 提供了三种类型的投影,用于存储从聚合函数或表达式返回的数据: 包含表达式的投影:使用投影中包含从锚表列计算结果的列。 实时聚合投影:投影钟包含具有从其锚表中的列的聚合值的列。还可以定义包含用户定义的转换函数的实时聚合投影。 Top-K投影:实时聚合投影的类型,...
vertica 这一mpp型 数据库 还是有很多不同的地方, vertica 的表就相当于一个’视图‘一样并不存储数据,数据都在其对应的 projection 中,由于这些 projection 事记录在 vertica 系统信息里面的,记录在 vertica 系统信息里面的东西修改很困难,所以涉及此类问题我们一般都不得不重建表。 这里要提到若是表的某个字段未写入系统信息得情况,例如若某个字段没有在 projection
进入 vertica 的sql环境:vsql -d dbname -w passwd 创建序列:CREATE SEQUENCE sq1 MAXVALUE 5000 START 1; 使用序列:SELECT NEXTVAL('my_seq');删除序列:DROP SEQ