vertica 最佳实践之 ROS Bundling

Vertica 7.2引入了一种新的磁盘存储格式,将数据文件和索引文件存储在一个文件中,以减少小文件带来的碎片问题。ROS Bundling功能减少了文件数量,优化备份和恢复速度,但不会影响查询性能。升级到7.2后,可通过COMPACT_STORAGE()函数转换文件格式。最佳实践是在升级后、首次备份前执行转换。
摘要由CSDN通过智能技术生成

在Vertica 7.2之前,每列有两个文件-数据文件和索引文件。从Vertica 7.2开始,此格式不再存在。现在,这两个部分都存储在一个文件中。此外,多个数据文件和索引文件也可以存储在一个文件中。

Vertica file architecture

下图说明了Vertica文件体系结构,以及如何将表和投影简化为文件:

在这里插入图片描述

New storage format

Vertica旨在处理大型数据集。磁盘上的文件大小从数百兆字节到数百千兆字节不等。Tuple Mover有助于管理数据存储。内存中的缓冲区吸收trickle 流负载,并且当内存缓冲区已满时,Tuple Mover mergeout 操作会将数据写入ROS容器。为了管理磁盘上的文件数,Tuple Mover mergeout 操作会合并大小相似的ROS容器以创建更大的容器。有关更多信息,请参见 Tuple Mover最佳实践。

尽管此方法适用于大多数表,但它可能会在包含大量小文件的表上出现问题。如果您的数据集满足以下任一条件,则可能会发生这种情况:

  1. 宽表包含NULL值列
  2. 分区范围很小,例如按分钟分区。不建议这样做。
  3. 启用了Local segmentation,并且将因子设置为更高的数字。不建议这样做。

这些因素会在磁盘上创建小文件,从而导致很多碎片,从而影响节点的恢复和备份操作。为解决此问题,Vertica工程师开发了新的磁盘存储格式和设计,从而减少了磁盘上存储的文件数量。

How is the new format different?

现在,数据文件及其索引文件存储在一个文件中。例如,在Vertica 7.2之前,一个具有两列的投影,一个存储容器存储了六个文件。在Vertica 7.2和更高版本中,该容器存储三个文件。如果这些文件小于1MB,则Vertica会将它们捆绑在一起,并将它们存储为一个文件。

Does the new functionality bundle all projection files?

不,捆绑仅发生在一个存储容器内和一个存储位置内。小于MaxBundleableROSSizeKB的列文件捆绑在一起;其他列文件则作为独立的列文件保存在存储容器中。

Why is ROS bundling useful?

捆绑减少了存储容器中文件的数量,从而减轻了对底层文件系统的压力,并促进了更快的备份和还原操作以及恢复。捆绑不会减少目录的大小,也不会消除ROS pushback error。Bundling 不会更改读取列文件时使用的文件句柄数。

What configuration parameters are associated with the bundling functionality?

哪些配置参数与捆绑功能相关联?

参数 数据类型/默认值 描述
启用存储捆绑 Boolean/True 启用或禁用存储捆绑。
MaxBundleableROSSizeKB Integer/1024 可以设置为1024 KB。如果有多个数据文件低于此大小限制,则在同一容器和存储位置中,文件将捆绑在一起。
CompactStorageJobSizeMB Integer/ 2048 控制函数COMPACT_STORAGE()的作业大小。

What is the upgrade impact from Vertica 7.1 to Vertica 7.2?

从Vertica 7.1升级到Vertica 7.2有什么影响?
升级不会自动将现有文件从旧格式转换为新格式。升级后,可以使用函数COMPACT_STORAGE()转换现有文件的文件格式。如果EnableStorageBundling设置为true,则将发生以下行为:

  1. 所有新的装入和插入均以新的存储格式写入。
  2. 合并后的现有存储将以新的存储格式写入。

Are the old and new formats compatible?

新旧格式兼容吗?
是。如果您升级数据库,并且表中同时包含大文件和小文件,则可以有选择地将小文件移至新格式,而将大文件保留为旧格式。

如何将数据从旧的存储格式移动到新的格式?

使用COMPACT_STORAGE(),如以下示例所示:

=> SELECT COMPACT_STORAGE(object-name,
object-name,
min-ros-filesize-kb,
small-or-all-files,
simulate);

该函数的示例输出如下所示:

compact_storage
---------------------------------------------------------------------------------------------------------------
Task: compact_storage
On node node01:
Projection Name :public.foo_super | selected_storage_containers :2 | selected_files_to_compact :12 | files_after_compact : 2 | modified_storage_KB :0
On node node02:
Projection Name :public.foo_super | selected_storage_containers :2 | selected_files_to_compact :12 | files_after_compact : 2 | modified_storage_KB :0
On node node03:
Projection Name :public.foo_super | selected_storage_containers :2 | selected_files_to_compact :12 | files_after_compact : 2 | modified_storage_KB :0

Success

如果我为min_ros_filesize_kb指定的值与当前MaxBundleableROSSizeKB不同,该怎么办?

COMPACT_STORAGE()函数参数min_ros_filesize_kb独立于MaxBundleableROSSizeKB配置参数。该函数使用您为min_ros_filesize_kb指定的值。这对MaxBundleableROSSizeKB的值没有影响。如果要在新的合并和加载中捆绑较大文件,则必须更改MaxBundleableROSSizeKB的值。

什么时候是转换为新存储格式的最佳时间?

为了获得最佳结果,请在将Vertica数据库升级到7.2之后,但在执行第一次备份之前,转换现有文件。这有助于备份和还原,原因有两个:

  1. 减少文件数量,从而加快备份速度。
  2. 传输新存储,因此后续备份可以更快地运行。

您可以在运行compact_storage时使用数据库。

COMPACT_STORAGE()是否会影响查询性能?

COMPACT_STORAGE()在存储容器级别读取和写入文件。与合并操作相比,它使用较少的内存,但会抢占 磁盘I / O。

COMPACT_STORAGE()需要运行多长时间?

由于此功能会重写文件,因此执行时间取决于更改的数据量。通过将COMPACT_STORAGE()函数参数Simulation设置为TRUE来运行模拟,以确定将更改多少存储空间。

您可以通过在表或投影级别上迭代运行COMPACT_STORAGE()来增量地重写存储格式。

我如何知道我的数据库是否将从此功能中受益?

如果备份和还原操作很慢,则可能是因为许多大文件没有合并。您可以运行以下查询来查找节点上投影的中位数文件大小:

=> SELECT MEDIAN(size) OVER() AS median_fsize
FROM vs_ros AS ros, storage_containers AS cont
WHERE ros.delid=cont.storage_oid
AND cont.node_name=‘node'
AND cont.projection_name=‘proj_name' limit 1;

You can also run COMPACT_STORAGE() in simulation mode to see how many files it can reduce:

=> SELECT COMPACT_STORAGE(‘table_or_proj_name’, 1024, ‘small’,true);

我可以使用哪个系统表查看捆绑的存储容器?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值