跳转至

Vertica Eon 模式中分片、节点和 Depot 选择的最佳实践

作者:JiangChong | 发布时间:2026-05-22

⚠️ 本文更新说明:原文基于 Vertica Eon Mode Beta 版(约 2023 年)编写。随着 Eon 模式正式 GA 及后续版本迭代,部分信息已过时。本文已根据 Vertica 25.x / 26.x 官方文档和实际运维经验进行修订和补充。

Vertica Eon 模式允许您在云环境中使用分析数据库。在云环境中使用 Vertica 带来了新的关于如何最大化性能的问题。本文档提供了配置数据库以达到最佳效果的指南,阐述了如何为您的系统确定合适的分片(Shard)、节点(Node)和 Depot 数量。


我需要多少个分片?

所需分片数量(S)取决于数据被分割成多少段。在理想条件下,对于任何给定会话,每个节点将服务一个分片。因此,分片数量决定了工作负载的"节点并行度"。

例如:

  • 如果有 6 个分片和 12 个节点,则只有 6 个节点参与查询处理。
  • 如果有 6 个分片和 4 个节点,则 2 个节点被视为 DOWN,替代节点为该查询服务该分片。因此节点并行度永远不会超过 6。

您可以在数据库创建时设置分片数量:

$ /opt/vertica/bin/admintools -t create_db -d eondb --hosts=eng1,eng2 --shard-count=6

注意: 更多的分片可能会提供更好的并行查询性能。然而,增加分片数量带来的收益是递减的。

分片与节点的比例建议

根据当前官方文档(Vertica 25.x / 26.x),分片数量的选择需遵循以下约束:

规则 说明
最佳性能 分片数 = 节点数(1:1)—— 这是基准线
推荐上限 不超过节点数的 2 倍(2:1)
绝对上限 不超过节点数的 3 倍(3:1)
可整除性 分片数应为节点数的约数或倍数,避免分布不均导致热点

官方原文:"For the best performance, the number of shards you choose for a namespace should be no greater than twice the number of nodes. At most, you should limit the shard:node ratio to no greater than 3:1."

分片数可以在创建后修改(Vertica 12.0+)

重要更新: 原文章称"分片数量在数据库创建时设置且之后无法更改"。此限制在 Vertica 12.0+ 版本中已被解除。您可以使用以下函数在线调整分片数:

SELECT RESHARD_DATABASE(<new_shard_count>);

何时考虑重新分片:

  • 节点数量发生永久性大幅变化,需要优化分片:节点比例
  • Catalog 大小因分片过多而增长过大
  • 从 Enterprise 模式迁移后(分片数默认等于原节点数,可能需要优化)

注意事项:

  • RESHARD_DATABASE 会获取全局 catalog 锁,建议在业务低峰期执行
  • 存储容器不会立即重新对齐,可执行 DO_TM_TASK('RESHARDMERGEOUT') 加速
  • 重新对齐完成前,查询性能可能受影响

分片数的实践经验

  • 通常用户选择 6 到 16 之间的分片数量。
  • 选择具有更多约数的分片数(如 6、8、12、24)以便未来灵活扩展。
  • 使用 K-safety = 1 的生产环境至少需要 3 个主节点
  • 如果用户从现有的 Enterprise 模式集群迁移,分片数量默认等于 Enterprise 模式集群的节点数。

命名空间级分片(Namespace-Level Sharding,较新版本支持)

Vertica 支持多个命名空间各自使用不同的分片数量

  • 大表 / 复杂分析工作负载 → 使用较高的分片数
  • 小表 / 简单仪表板查询 → 使用较低的分片数
  • 将表大小与分片数对齐可以最小化 catalog 开销

我需要多少个节点?

在 Eon 模式下,添加和移除节点不需要执行昂贵的数据再平衡操作。因此,Vertica 预期节点数量会根据需求增加,并在不需要时减少。这一过程相当快速且具有弹性。

初始节点数量推荐(官方 25.3.x)

集群规模 工作数据量 推荐初始节点数
小型 最高 24 TB 3
中型 最高 48 TB 6
大型 最高 96 TB 12
超大型 最高 192 TB 24

对应地,中型集群(6 节点)建议初始分片数为 6,小型集群(3 节点)建议为 3(如需扩展可选 6)。

节点数量与分片数量的关系

确定节点数量(N)时,请考虑以下几点:

  • 当 N = S 时,查询性能最佳;Vertica 将此视为基准。
  • 当 N > S 时
  • 可以运行更大的工作负载(即更多查询)。
  • Elastic Crunch Scaling (ECS) 会将分片责任分布在更多节点上。
  • 单个查询的执行时间不会比基准有所改善,但并发吞吐量提升。
  • 当 N < S 时,查询性能等于或低于基准。
  • 分片数不能被节点数整除时,会导致分布不均,部分节点过载(热点问题)。

子集群(Subcluster)与吞吐量

Eon 模式支持创建多个子集群来隔离工作负载。您可以为不同 workload 创建专用子集群(如 ETL 子集群、查询子集群),并在不需要时缩减子集群。详见 Vertica 弹性伸缩功能介绍与配置 第 4.2 节。


每个节点需要多大的 Depot?

Depot(D)是一个最近最少使用(LRU)缓存。Vertica 使用卷大小的 80% 作为此缓存。

创建/修改 Depot

创建数据库时设置 Depot 位置和大小:

$ /opt/vertica/bin/admintools -t create_db -d eondb --hosts=eng1,eng2 --shard-count=6
 --depot-path=/home/dbadmin/depot/   --depot-size=20G(可选)

您可以随时使用以下命令修改 Depot 设置:

=> SELECT ALTER_LOCATION_SIZE('/home/dbadmin/depot/', '', '60G');
=> SELECT ALTER_LOCATION_SIZE('/home/dbadmin/depot/', 'v_eon_walkthrough_db_node0001', '50%');

注意: 虽然存在修改 Depot 大小的功能,但 Vertica 建议不要频繁修改 Depot 大小。

Depot 大小计算

推荐的最小本地存储:每节点 2 TB

  • 约 60% 用于 Depot(约 1.2 TB)
  • 约 40% 用于 Catalog 和其他数据

理想 Depot 大小估算公式:

每节点 Depot 大小 = (压缩后总数据量 / 分片数) × 每节点服务分片数

由于 Depot 作为本地缓存,较大的 Depot 可以提升查询性能。例如:

  • 您的总数据库在 S3 上压缩后为 1.2 TB,并且有 6 个分片。
  • 每个节点缓存 1.2 TB / 6 = 200 GB 的数据,以便能够缓存整个分片。
  • 如果 Depot 卷为 250 GB,则整个分片(250 GB 的 80% = 200 GB)都适合 Depot 缓存。
  • 通常一个节点至少缓存两个分片。因此 Depot 卷大小设置为 D = 500 GB(2 × 250 GB)是最优的,可以实现热 Depot 缓存上的所有操作。
  • Depot 小于此值可能会导致缓存未命中,从而降低查询性能。

⚠️ 勘误: 原文此处将单位误写为 MB(200 MB、250 MB),实际应为 GB。已修正。

其他注意事项

  • 建议使用实例/临时存储(ephemeral storage)作为 Depot。虽然也可以使用 EBS 卷,但成本更高且可能降低性能。
  • 由于数据持久化在共享存储(S3/OSS/HDFS)上,EBS 卷提供的本地持久性不会带来额外性能收益。
  • Vertica 建议不要对实例卷使用 RAID 或 LVM。应将其用作 ext4 分区。管理 LVM 和 RAID 所需的额外处理会产生不必要的开销。

监控 Depot 活动

使用以下系统表和 DC 表监控 Depot 活动:

-- 查看 Depot 缓存内容
=> SELECT * FROM vs_depot_lru;

-- 查看 Depot 驱逐历史
=> SELECT * FROM dc_depot_evictions;

-- 查看 Depot 从共享存储拉取数据(读)
=> SELECT * FROM dc_depot_fetches;

-- 查看 Depot 上传到共享存储(写)
=> SELECT * FROM dc_depot_uploads;

相关参考: 关于 Depot 带宽的监控和估算,另见 Vertica 节点与集群规模规划指南(含 Eon 模式网络带宽要求)。


结论

选择 N、S 和 D 是一个成本与性能的权衡。合适的数值取决于您对性能的要求以及愿意为此付出的成本。

核心建议总结:

  1. 分片数 = 节点数 为基准配置,不超过 2:1 为推荐上限
  2. 选择具有更多约数的分片数(6、8、12、24)便于未来扩展
  3. 每节点至少 2 TB 本地存储,其中约 60% 分配给 Depot
  4. 利用 RESHARD_DATABASE 可在创建后调整分片数(Vertica 12.0+)
  5. 利用多个命名空间为不同工作负载设置不同分片数(较新版本)
  6. 利用子集群隔离 ETL 和查询工作负载

关联文章:

扩展阅读