管理 Eon 模式数据库中的工作负载资源
您主要使用子群集来控制 Eon 模式数据库中的工作负载。例如,您可以为特定用例(如 ETL 或查询工作负载)创建子群集,也可以为不同的用户组创建子群集以隔离工作负载。在每个子群集中,您可以创建单独的资源池以根据工作负载优化资源分配。有关 Vertica 如何使用子群集的详细信息,请参阅管理子群集。
全局资源池和特定于子群集的资源池
您可以定义影响数据库中所有节点的全局资源池分配。您还可以在子群集级别创建资源池分配。如果您同时创建这两种分配,则子群集级别的设置会覆盖全局设置。
注意
GENERAL 池需要至少 25% 的可用内存才能正常运行。如果您尝试将用户定义的资源池的 MEMORYSIZE 设置为 75% 以上,Vertica 会返回错误。您可以使用此功能移除子群集不需要的全局资源池。此外,您可以使用适合大多数子群集的设置创建资源池,然后根据需要为特定子群集定制设置。
优化 ETL 和查询子群集
覆盖子群集级别的资源池设置将允许您隔离内置和用户定义的资源池并按工作负载优化它们。您通常为不同的子群集分配特定的角色:
-
专用于 ETL 工作负载和 DDL 语句(这些语句用来更改数据库)的子群集。
-
专用于运行长时间运行的深入分析查询的子群集。为了获得最佳性能,需要为这些查询分配更多的资源。
-
用于运行许多短时间运行的“仪表板”查询(您希望快速完成且并行运行这些查询)的子群集。
定义由每个子群集执行的查询类型后,您可以创建一个特定于子群集的资源池,并对该资源池进行优化以提高此工作负载的效率。
以下方案按工作负载优化 3 个子群集:
-
ETL:用于执行 ETL 的子群集,您希望针对 Tuple Mover 操作优化该 ETL。
-
仪表板:您要为短时间运行的查询指定的子群集,这些查询由大量用户执行,可用于刷新网页。
-
分析:要为长时间运行的查询指定的子群集。
有关资源池调整的其他方案,请参阅工作负载资源管理最佳实践。
配置 ETL 子群集以提高 TM 性能
Vertica 选择在存储库中的合并操作中涉及 ROS 容器最多的子群集来执行合并(请参阅 Eon 模式数据库中的 Tuple Mover)。通常,执行 ETL 的子群集将是执行合并的最佳候选者,因为该子群集加载的数据参与合并。您可以选择通过更改 TM 池的 MAXCONCURRENCY 设置来提高子群集上合并操作的性能,以增加可用于合并操作的线程数。您无法在子群集级别更改此设置,因此您必须在全局设置它:
=> ALTER RESOURCE POOL TM MAXCONCURRENCY 10;
有关 Tuple Mover 资源的更多信息,请参阅调整 Tuple Mover 池设置。
配置仪表板查询子群集
默认情况下,辅助子群集将内存分配给 Tuple Mover 资源池。此池设置允许 Vertica 将合并操作分配给辅助子群集,这会增加少量开销。如果您将辅助子群集主要用于查询,则最佳做法是回收 TM 池使用的内存并防止将合并操作分配给辅助子群集。
要优化仪表板查询辅助子群集,请设置其 TM 池的 MEMORYSIZE 和 MAXMEMORYSIZE 设置为 0:
=> ALTER RESOURCE POOL TM FOR SUBCLUSTER dashboard MEMORYSIZE '0%'
MAXMEMORYSIZE '0%';
若要确认覆盖,请查询 SUBCLUSTER_RESOURCE_POOL_OVERRIDES 表:
=> SELECT pool_oid, name, subcluster_name, memorysize, maxmemorysize
FROM SUBCLUSTER_RESOURCE_POOL_OVERRIDES;
pool_oid | name | subcluster_name | memorysize | maxmemorysize
-------------------+------+-----------------+------------+---------------
45035996273705046 | tm | dashboard | 0% | 0%
(1 row)
若要针对网页上短时间运行的查询优化仪表板子群集,请创建一个名为 dash_pool 的子群集级资源池,该池使用子群集 70% 的内存。此外,增加 PLANNEDCONCURRENCY 以使用机器的所有逻辑核心,并将 EXECUTIONPARALLELISM 限制为不超过机器可用核心的一半:
=> CREATE RESOURCE POOL dash_pool FOR SUBCLUSTER dashboard
MEMORYSIZE '70%'
PLANNEDCONCURRENCY 16
EXECUTIONPARALLELISM 8;
配置分析查询子群集
若要针对网页上长时间运行的查询优化分析子群集,请创建一个名为 analytics_pool 的子群集级资源池,该池使用子群集 60% 的内存。在这种情况下,您无法为该池分配更多内存,因为该子群集中的节点仍将内存分配给其 TM 池。此外,将 EXECUTIONPARALLELISM 设置为 AUTO 以使用节点上的所有可用核心来处理查询,并将 PLANNEDCONCURRENCY 限制为不超过 8 个并发查询:
=> CREATE RESOURCE POOL analytics_pool FOR SUBCLUSTER analytics
MEMORYSIZE '60%'
EXECUTIONPARALLELISM AUTO
PLANNEDCONCURRENCY 8;