内置池

Vertica 预先配置了内置池来完成各种系统任务:

有关资源池设置的详细信息,请参阅 ALTER RESOURCE POOL

GENERAL

一个通用池,用于答复未关联到特定 资源池的请求。为所有其他池分配内存后剩下的任何内存将自动分配给 GENERAL 池。GENERAL 池的 MEMORYSIZE 参数未定义(变量),但是 GENERAL 池的大小必须至少为 1GB,而且不得小于系统内存的 25%。

GENERAL 池的 MAXMEMORYSIZE 参数具有特殊意义,当设置为 % 值时,它表示计算机上 资源管理器可用于查询的总物理内存的百分比。默认情况下,它设置为 95%。MAXMEMORYSIZE 控制资源管理器可用于查询的内存总量,不论将它是设置为百分比还是特定的值(例如,“10GB”)。

用户定义的池可以从 GENERAL 池中借用内存,以满足需要额外内存的请求,直到达到该池的 MAXMEMORYSIZE 参数。如果将池配置为 MEMORYSIZE 等于 MAXMEMORYSIZE,则它不能从 GENERAL 池中借用任何内存。当多个池从 GENERAL 池请求内存时,它们将有权根据各自的优先级设置访问通用池内存。通过这种方式,GENERAL 池可以灵活地解释正常使用各个资源池产生的时间点偏差。

如果编录使用的总内存超过 5%,Vertica 会建议减少 GENERAL 池的 MAXMEMORYSIZE。您可以按以下方式计算编录使用的 GENERAL 池内存的百分比:

=> WITH memory_use_metadata AS (SELECT node_name, memory_size_kb FROM resource_pool_status WHERE pool_name='metadata'),
        memory_use_general  AS (SELECT node_name, memory_size_kb FROM resource_pool_status WHERE pool_name='general')
   SELECT m.node_name, ((m.memory_size_kb/g.memory_size_kb) * 100)::NUMERIC(4,2) pct_catalog_usage
   FROM memory_use_metadata m JOIN memory_use_general g ON m.node_name = g.node_name;
    node_name     | pct_catalog_usage
------------------+-------------------
 v_vmart_node0001 |              0.41
 v_vmart_node0002 |              0.37
 v_vmart_node0003 |              0.36
(3 rows)

BLOBDATA

控制内存中的 blob 的资源使用情况量。内存中的 blob 是许多机器学习 SQL 函数使用的对象。如果计划处理大型机器学习工作负载,则应调整此池。有关优化池的信息,请参阅为机器学习进行调整

如果使用 BLOBDATA 池的查询超出该池的查询计划预算,则它会溢出到磁盘。有关优化查询预算的详细信息,请参阅查询预算

DBD

控制 Database Designer 处理的资源使用情况。使用此池由配置参数 DBDUseOnlyDesignerResourcePool 启用,默认情况下该参数设置为 false。

默认情况下,此池的 QUEUETIMEOUT 设置为 0。当资源面临压力时,此设置可使 DBD 立即超时,而不是排队等待运行。Database Designer 随后会请求用户在有更多的资源可用时再运行设计器。

JVM

控制 Java 用户定义的扩展使用的 Java 虚拟机资源。当 Java UDx 启动 JVM 时,它会从 JVM 资源池中获取指定的资源。Vertica 不会提前为 JVM 池保留内存。必要时,池可以扩展到物理内存的 10% 或 2 GB 内存,以较小者为准。如果您正在缓冲大量数据,可能需要增加 JVM 资源池的大小。

您可以通过更改其配置设置调整 JVM 资源池的大小。与其他资源池不同的是,JVM 资源池在会话关闭前不会释放资源。

METADATA

跟踪为编录数据和存储数据结构分配的内存。随着 Vertica 元数据使用更多资源,此池的大小会增加。分配给 METADATA 池的内存将从 GENERAL 池中减去,从而使 Vertica 资源管理器能够更有效地利用可用资源。如果 METADATA 资源池达到 GENERAL 池的 75%,Vertica 将停止更新 METADATA 内存大小并在 vertica.log 中显示警告消息。您可以通过配置参数 EnableMetadataMemoryTracking 启用或禁用 METADATA 池。

如果您创建了一个“虚拟”或“交换”资源池来保护操作系统使用的资源,您可以将该池替换为 METADATA 池。

用户不能更改 METADATA 资源池的参数。

RECOVERY

由恢复数据库的另一个节点时发出的查询使用。MAXCONCURRENCY 参数用于确定要使用多少个并发恢复线程。可以使用 PLANNEDCONCURRENCY 参数(默认情况下,设置为 MAXCONCURRENCY 的两倍)优化分摊内存来恢复查询的方式。

请参阅为恢复进行调整

REFRESH

PROJECTION_REFRESHES 操作发出的查询使用。 刷新当前不使用多个并发线程,因此,对 MAXCONCURRENCY 值的更改无效。

请参阅场景:对刷新进行优化

SYSQUERY

对所有系统监控和编录表运行查询。SYSQUERY 池保留系统表查询的资源,以便它们不会被可用资源争用拦截。

TM

Tuple Mover (TM) 池。可以为 TM 池设置 MAXCONCURRENCY 参数,以允许并发 TM 操作。

请参阅调整 Tuple Mover 池设置