暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Vertica 数据库 Replay Delete 算法

原创 simonchiang 2024-09-10
229

本文档重点介绍 Vertica 中的 Replay Delete 、如何设计投影以及配置 Vertica 数据库以提高 Replay Delete 性能。

1、什么是 Replay Delete ?

由于在 Tuple Mover 、恢复、刷新和数据 Rebalance 这些操作中都会重组部分或全部的存储容器,因此已删除数据的位置可能会在新创建的存储容器中发生变化。
在 Vertica 中,删除向量(Delete Vector)记录着存储容器中已删除数据的位置,以及删除数据的语句提交时的 Epoch。重建删除向量以适应跨存储容器的记录移动的过程称为 Replay Delete。
Vertica 有两种执行 Replay Delete 操作的算法。

2、传统算法

传统的 Replay Delete 算法首先尝试通过匹配 Projection 排序顺序中的列来找到已删除记录在新存储容器中的位置。如果该算法找到唯一匹配,则将其记录在删除向量中。如果算法未找到唯一匹配,则匹配所有投影列。

当投影排序顺序中只有几列并且这些列可以唯一标识已删除的行时,此 Replay Delete 算法非常有效。但是,当投影排序顺序中的列基数较低并且无法唯一标识已删除的行时,该算法的性能不佳。该算法的时间复杂度为O(N^2)。

3、新算法

由于传统算法仅适用于包含一些具有唯一标识符的列的数据集,因此它并不总是最佳选择。
新的 Replay Delete 算法将标记为删除的数据和存储容器中的数据进行关联。Projection 所有的列都用作关联键。

系统会记录每个输入到关联操作的记录(数据行)的具体位置。当这些记录符合关联条件时,系统会利用这些匹配记录的位置信息来构建“删除向量”。
带有关联操作的新 Replay Delete 算法的时间复杂度为 O(NlogN)。

4、Vertica 如何使用算法?

这两种 Replay Delete 算法各有其优点。算法性能取决于以下因素:投影设计、行数以及要 Replay Delete 的记录数量。

  • 当投影在排序顺序中具有高基数并且删除记录的百分比较低时,传统的重播删除算法表现最佳。
  • 当投影排序顺序具有低基数时,新的重播删除算法比传统算法表现更好。
    由于这两种算法都不是适用于每个数据集的理想解决方案,并且由于两种算法根据投影设计的性能不同,因此 Vertica 会同时使用这两种算法。当开始 Replay Delete 操作时,Vertica 首先使用传统的 Replay Delete 算法。当传统的 Replay Delete 算法达到时间复杂度O(N^2)时,Vertica使用新算法重新规划 Replay Delete 任务。

5、优化 Projection 设计

为了提高 Replay Delete 性能,Vertica 建议投影的投影排序顺序中至少应有一个高基数列。高基数列在投影排序顺序中的位置并不重要,它可以是最后一列。

6、Replay Delete 的数据库相关参数设置

ReplayDeleteAlgorithmSwitchThreshold 是 Vertica 在使用传统算法进行 Replay Delete 过程中决定是否需要切换为新算法的阈值配置参数。如果达到了该阈值 ,Vertica 使用新的算法重试。

select * from configuration_parameters where parameter_name ilike '%ReplayDeleteAlgorithmSwitchThreshold%'; -[ RECORD 1 ]-----------------+------------------------------------------------------------------------------------------------- node_name | ALL parameter_name | ReplayDeleteAlgorithmSwitchThreshold current_value | 10 restart_value | 10 database_value | 10 default_value | 10 current_level | DEFAULT restart_level | DEFAULT is_mismatch | f groups | allowed_levels | NODE, DATABASE superuser_visible_only | f change_under_support_guidance | t change_requires_restart | f description | Switch Replay Delete to use the new algorithm once runtime scan statistics exceeds the threshold

此参数的默认值为 10。如果将此值更改为 0,Vertica 将不会使用传统的 Replay Delete 算法。

  • 如果数据库所有的 Projection 都针对 Replay Delete 进行了优化,并且表中标记为已删除的行的百分比较低,则保持 ReplayDeleteAlgorithmSwitchThreshold 参数为默认值 10。
  • 如果您的数据库尚有未针对 Replay Delete 进行优化的投影,并且大型表的已删除记录百分比较高,则可以将 ReplayDeleteAlgorithmSwitchThreshold 参数设置为值 0 或 1:
    • 通过将此参数设置为 1,可以降低传统 Replay Delete 算法使用的阈值;针对 Replay Delete 进行优化的投影将使用传统算法成功,而其他投影将更快地转移到新的连接算法。
    • 通过将此参数设置为 0,Vertica 使用新的 Replay Delete 算法,并且在大多数情况下可以节省时间,特别是没有针对 Replay Delete 优化的投影。

二维码.png

最后修改时间:2024-09-11 11:28:13
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论