本部分中的场景介绍如何优化内置池。
1 - 将 Vertica 限制为仅占用 60% 的内存
场景
您有一个嵌入 Vertica 的单节点应用程序,部分 RAM 需要专用于该应用程序进程。在此场景中,您想要将 Vertica 限制为仅使用可用 RAM 的 60%。
解决方案
将 GENERAL 池的 MAXMEMORYSIZE 参数设置为所需的内存大小。有关资源限制的讨论,请参阅资源池架构。
2 - 为恢复进行调整
场景
您有一个大型数据库,其中包含一个具有两个投影以及默认设置的大型表,恢复操作所需的时间过长。您想要为恢复操作提供更多内存以提高速度。
解决方案
将 RECOVERY 池的 PLANNEDCONCURRENCY 和 MAXCONCURRENCY 设为 1,使恢复操作可以从 GENERAL 池中获得尽可能多的内存并且每次仅运行一个线程。
当心
此设置会降低您系统中其他查询的速度。3 - 调整刷新
场景
当 刷新操作正在运行时,系统性能会受到影响,用户查询会被拒绝。您想要降低刷新作业的内存用量。
解决方案
将刷新池的 MEMORYSIZE 设置为固定值。然后,资源管理器调整刷新查询,使其仅使用此数量的内存。
重要
请记得在刷新操作完成后,将刷新池的 MEMORYSIZE 重置为 0%,以便可将内存用于其他操作。4 - 调整 Tuple Mover 池设置
场景 1
在重负载操作期间,您偶尔会注意到 ROS 容器的数量激增。您希望 Tuple Mover 更主动地执行合并以合并 ROS 容器,并避免 ROS 推回。
解决方案
使用 ALTER RESOURCE POOL 增加 TM 资源池 中 MAXCONCURRENCY 的设置。此设置确定有多少线程可用于合并。默认情况下,此参数设置为 7。Vertica 将一半线程分配给处于活动状态的分区,其余一半根据需要分配给处于活动状态和非活动状态的分区。如果 MAXCONCURRENCY 设置为奇整数,Vertica 会向上舍入以支持处于活动状态的分区。
例如,如果您将 MAXCONCURRENCY 增加到 9,则 Vertica 会将五个线程专门分配给处于活动状态的分区,并将剩余的四个线程分配给处于活动状态和非活动状态的分区。
场景 2
您有一个专用于时间敏感型分析查询的辅助子群集。您希望限制此子群集上可能干扰其处理查询的任何其他工作负载,并同时释放内存以执行查询。
默认情况下,每个子群集都有一个用于 Tuple Mover 操作的内置 TM 资源池,该资源池可用于执行 Tuple Mover 合并操作。TM 池消耗可用于查询的内存。此外,合并操作可能会给子群集的处理稍微增加一点开销。您希望重新分配由 TM 池消耗的内存,并阻止子群集运行合并操作。
解决方案
使用 ALTER RESOURCE POOL 覆盖辅助子群集的全局 TM 资源池,并将其 MAXMEMORYSIZE 和 MEMORYSIZE 都设置为 0。这允许您使用由全局 TM 池消耗的内存来运行分析查询,并防止为子群集分配要执行的 TM 合并操作。
5 - 为机器学习进行调整
场景
大量机器学习功能正在运行,您希望为它们提供更多内存以提高性能。
解决方案
Vertica 在 BLOBDATA 资源池中执行机器学习功能。为了提高机器学习功能的性能并避免将查询溢出到磁盘,请使用 ALTER RESOURCE POOL 增加池的 MAXMEMORYSIZE 设置。
有关调整查询预算的更多信息,请参阅查询预算。