ROS Bundling
-
- Vertica file architecture
- New storage format
- How is the new format different?
- Does the new functionality bundle all projection files?
- Why is ROS bundling useful?
- What configuration parameters are associated with the bundling functionality?
- What is the upgrade impact from Vertica 7.1 to Vertica 7.2?
- Are the old and new formats compatible?
- 如何将数据从旧的存储格式移动到新的格式?
- 如果我为min_ros_filesize_kb指定的值与当前MaxBundleableROSSizeKB不同,该怎么办?
- 什么时候是转换为新存储格式的最佳时间?
- COMPACT_STORAGE()是否会影响查询性能?
- COMPACT_STORAGE()需要运行多长时间?
- 我如何知道我的数据库是否将从此功能中受益?
- 我可以使用哪个系统表查看捆绑的存储容器?
- 如果我有大的存储容器,是否可以使用100MB作为min_ros_filesize_kb的值?
在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最佳实践。
尽管此方法适用于大多数表,但它可能会在包含大量小文件的表上出现问题。如果您的数据集满足以下任一条件,则可能会发生这种情况:
- 宽表包含NULL值列
- 分区范围很小,例如按分钟分区。不建议这样做。
- 启用了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,则将发生以下行为:
- 所有新的装入和插入均以新的存储格式写入。
- 合并后的现有存储将以新的存储格式写入。
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之后,但在执行第一次备份之前,转换现有文件。这有助于备份和还原,原因有两个:
- 减少文件数量,从而加快备份速度。
- 传输新存储,因此后续备份可以更快地运行。
您可以在运行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’);