这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

CREATE RESOURCE POOL

创建自定义资源池并设置一个或多个资源池参数。

语法

CREATE RESOURCE POOL pool‑name [ FOR subcluster-spec ] [ parameter‑name setting ]...

参数

pool‑name
资源池的名称。内置池名称不能用于用户定义的池。
FOR subcluster‑spec
仅限 Eon 模式,指定将此资源池与某个子群集关联,其中 subcluster-spec 为以下之一:
  • SUBCLUSTER subcluster-name:为现有子群集创建资源池。您不能连接到此子群集,否则 Vertica 会返回错误。
  • CURRENT SUBCLUSTER:为连接到的子群集创建资源池。

如果忽略,则在全局创建资源池。尝试创建与特定于子群集的资源池同名的全局资源池时会返回错误。

parameter‑name
要设置的参数,如下所示。
设置

要在 parameter‑name 上设置的值。要将此参数重置为其默认值,请指定 DEFAULT

CASCADE TO

指定一个辅助资源池,用于执行其 [RUNTIMECAP](#RUNTIMECAP) 设置超出分配资源池的查询:

CASCADE TO secondary‑pool
CPUAFFINITYMODE

指定资源池是单独使用还是共用 [CPUAFFINITYSET](#CPUAFFINITYSET) 中指定的 CPU。

CPUAFFINITYMODE { SHARED | EXCLUSIVE | ANY }
  • SHARED:在此池中运行的查询与其他 Vertica 资源池共享其 CPUAFFINITYSET CPU。

  • EXCLUSIVE:仅将 CPUAFFINITYSET CPU 专用于此资源池,不用于其他 Vertica 资源池。如果将 CPUAFFINITYSET 设置为百分比,那么仅为此资源池分配可用于 Vertica 的 CPU 资源百分比。

  • ANY (默认值):此资源池中的查询可以在任何 CPU 上运行,如果 CPUAFFINITYSET 指定 CPU 资源,则此查询无效。

CPUAFFINITYSET

指定此资源池可用的 CPU。所有群集节点必须具有相同的 CPU 数量。分配给该集合的 CPU 资源对常规资源池不可用。

CPUAFFINITYSET {
  'cpu‑index[,...]'
| 'cpu‑indexi-cpu‑indexn'
| 'integer%'
| NONE
}
  • cpu‑index[,...]:将以一个或多个逗号分隔的 CPU 专用于此池。

  • cpu‑indexi-cpu‑indexn:将一系列连续的 CPU 索引专用于此池

  • integer%:此池可用的所有可用 CPU 的百分比。Vertica 将此百分比向下舍入以包括整个 CPU 单元。

  • NONE (默认值):没有关联集分配给该资源池。与该池关联的查询可在任何 CPU 上执行。

EXECUTIONPARALLELISM

限制用于处理此资源池中发出的任何单一查询的线程数量。

EXECUTIONPARALLELISM { limit | AUTO }
  • limit:介于 1 与内核数之间的整数值。将此参数设置为减小的值时,可以增大池中发出的简短查询的吞吐量,特别是在并发执行多个查询的情况下。

  • AUTO or0(默认值):Vertica 根据系统中的内核数、可用内存和数据量计算设置。除非内存有限,或者数据量非常小,否则 Vertica 会将此参数设置为节点中的核心数。

MAXCONCURRENCY

设置群集中资源池可用的最大并发执行槽数:

MAXCONCURRENCY { integer | NONE }

NONE (默认)指定不限数量的并发执行槽。

MAXMEMORYSIZE

通过从 GENERAL 池中借用内存,资源池可以增加的每个节点的最大大小:

MAXMEMORYSIZE {
  'integer%'
| 'integer{K|M|G|T}'
| NONE
}
  • integer%:占总内存的百分比

  • integer{K|M|G|T}:以千字节、兆字节、千兆字节或太字节为单位的内存量

  • NONE (默认值):无限制,池可以从 GENERAL 池中借用任意数量的可用内存。

MAXQUERYMEMORYSIZE

此池可以在运行时分配以处理查询的最大内存量。如果查询需要的内存超过此设置,Vertica 将停止执行并返回错误。

设置此参数如下:

MAXQUERYMEMORYSIZE {
  'integer%'
| 'integer{K|M|G|T}'
| NONE
}
  • integer%:百分比 此池的 MAXMEMORYSIZE

  • integer{K|M|G|T}:以千字节、兆字节、千兆字节或太字节为单位的内存量,最大为 MAXMEMORYSIZE

  • NONE (默认值):无限制;池可以从 GENERAL 池中借用任意数量的可用内存,其限制由以下设置: MAXMEMORYSIZE

MEMORYSIZE

每个节点分配给此池的 Vertica 资源管理器可用的总内存量:

MEMORYSIZE {
  'integer%'
| 'integer{K|M|G|T}'
}
  • integer%:占总内存的百分比

  • integer{K|M|G|T}:以千字节、兆字节、千兆字节或太字节为单位的内存量

默认值: 0%。没有分配任何内存,资源池从 GENERAL 池中借用内存。

PLANNEDCONCURRENCY

指定资源池中并发执行的查询首选数量。此设置适用于整个群集:

PLANNEDCONCURRENCY { num‑queries | AUTO }
  • num‑queries:整数值 ≥ 1,指定并发执行查询的首选数量。在可能的情况下,查询资源预算被限制为允许此级别的并发执行。

  • AUTO (默认值):值将在查询运行时自动计算。Vertica 将此参数设置为这两个计算中的较低值,但绝不会小于 4:

    • 逻辑核心数

    • 内存除以 2GB

对于不同节点上逻辑核数不同的群集,AUTO 可以在每个节点上应用不同的方法。分布式查询的运行方式类似于最低的有效计划并发性能。单节点查询以发起方的计划并发性能运行。

PRIORITY

指定此池中的查询在争用 GENERAL 池中资源时的优先级:

PRIORITY { integer | HOLD }
  • integer:一个负整数或正整数值。数字越大,表示优先级越高:

    • 用户定义的池: ‑100100

    • 内置池 SYSQUERYRECOVERY TM‑110110

  • HOLD:将优先级设置为 -999。此池中的查询将排队,直到达到 [QUEUETIMEOUT](#QUEUETIMEOUT) 为止。

默认值: 0

QUEUETIMEOUT

指定请求在被拒绝之前可以等待池资源多长时间:

QUEUETIMEOUT { integer | NONE }
  • integer:最长等待时间(以秒为单位)

  • NONE:没有最长等待时间,请求可以无限排队。

默认值: 300 秒

RUNTIMECAP

通过设置池中的查询可以执行的最大时间,可以防止查询失控。如果查询超出此设置,它会尝试级联到辅助池。

RUNTIMECAP { 'interval' | NONE }
  • interval:1 分钟或 100 秒的间隔;不应超过 1 年。

  • NONE (默认值):在此池中运行的查询没有时间限制。

    要以天为单位指定一个值,请提供整数值。要提供小于一天的值,请以 hours:minutes:seconds 格式提供间隔。例如,值为 1:30:00 时,则等于 90 分钟。

    如果用户或会话也具有 RUNTIMECAP,则会应用较短的限制。

RUNTIMEPRIORITY

确定资源管理器应如何将运行时资源(CPU、I/O 带宽)的优先级分配给已在此资源池中运行的查询:

RUNTIMEPRIORITY { HIGH | MEDIUM | LOW }

默认值MEDIUM

RUNTIMEPRIORITYTHRESHOLD

以秒为单位指定一个时间限制,在资源管理器为其分配资源池 RUNTIMEPRIORITY 之前,必须完成一个查询。所有查询从 HIGH 优先级开始运行。如果查询的持续时间超过了此阈值,它将分配到资源池的 RUNTIMEPRIORITY

RUNTIMEPRIORITYTHRESHOLD seconds

默认值: 2

SINGLEINITIATOR

默认情况下,已设置为 false 以实现向后兼容性。切勿更改此设置。

特权

超级用户

示例

此示例显示了如何创建具有 1800 MB MEMORYSIZE 的资源池。

=> CREATE RESOURCE POOL ceo_pool MEMORYSIZE '1800M' PRIORITY 10;
CREATE RESOURCE POOL

使用 ALTER USER 语句将假设已存在的 CEO 报告用户与上述资源池相关联。

=> GRANT USAGE ON RESOURCE POOL ceo_pool to ceo_user;
GRANT PRIVILEGE
=> ALTER USER ceo_user RESOURCE POOL ceo_pool;
ALTER USER

发出以下命令确认 ceo_user 与 ceo_pool 相关联:

=> SELECT * FROM users WHERE user_name ='ceo_user';
-[ RECORD 1 ]-----+--------------------------------------------------
user_id           | 45035996273733402
user_name         | ceo_user
is_super_user     | f
profile_name      | default
is_locked         | f
lock_time         |
resource_pool     | ceo_pool
memory_cap_kb     | unlimited
temp_space_cap_kb | unlimited
run_time_cap      | unlimited
all_roles         |
default_roles     |
search_path       | "$user", public, v_catalog, v_monitor, v_internal

此示例显示了如何创建和指定辅助资源池。

=> CREATE RESOURCE POOL rp3 RUNTIMECAP '5 minutes';
=> CREATE RESOURCE POOL rp2 RUNTIMECAP '3 minutes' CASCADE TO rp3;
=> CREATE RESOURCE POOL rp1 RUNTIMECAP '1 minute' CASCADE TO rp2;
=> SET SESSION RESOURCE_POOL = rp1;

此 Eon 模式示例确认当前子群集名称,然后为当前子群集创建资源池:

=> SELECT CURRENT_SUBCLUSTER_NAME();
 CURRENT_SUBCLUSTER_NAME
-------------------------
 analytics_1
(1 row)

=> CREATE RESOURCE POOL dashboard FOR SUBCLUSTER analytics_1;
CREATE RESOURCE POOL

另请参阅

1 - 内置池

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 池设置

2 - 内置资源池配置

要查看内置资源池的当前和默认配置,请分别查询系统表 RESOURCE_POOLS 和 RESOURCE_POOL_DEFAULTS。 以下部分提供了这些信息,并指出了哪些内置池参数可以使用 ALTER RESOURCE POOL 进行修改:

GENERAL

BLOBDATA

参数

设置

MEMORYSIZE 空/不能设置
MAXMEMORYSIZE

供所有资源池使用的最大内存,为以下之一:

MAXMEMORYSIZE { 'integer%'

'integer{K|M|G|T}' }

例如,如果您的节点有 64GB 内存,则将 MAXMEMORYSIZE 设置为 50% 会分配一半的可用内存。因此,所有资源池可用的最大内存量为 32GB。

默认值: 95%

MAXQUERYMEMORYSIZE

此池为处理任何查询分配的最大内存量:

MAXQUERYMEMORYSIZE { 'integer%'

'integer{K|M|G|T}' }

EXECUTIONPARALLELISM 默认值: AUTO
PRIORITY 默认值: 0
RUNTIMEPRIORITY 默认值:
RUNTIMEPRIORITYTHRESHOLD 默认值: 2
QUEUETIMEOUT 默认值: 00:05(分钟)
RUNTIMECAP

通过设置池中的查询可以执行的最大时间,可以防止查询失控。如果查询超出此设置,它会尝试级联到辅助池。

RUNTIMECAP { 'interval' | NONE }
  • interval:设置为 1 分钟或 100 秒的时间间隔,不应超过 1 年。

  • NONE (默认值):在此池中运行的查询没有时间限制。

PLANNEDCONCURRENCY

您希望对资源池运行的并发查询数,此整数 ≥ 4。如果设置为 AUTO(默认),Vertica 会在查询运行时自动设置 PLANNEDCONCURRENCY,选择这两个值中较小的值:

  • 核心数

  • 内存/2GB

默认值: AUTO

MAXCONCURRENCY

默认值: Empty

SINGLEINITIATOR

默认值: False。

CPUAFFINITYSET 默认值: Empty
CPUAFFINITYMODE 默认值: ANY
CASCADETO 默认值: Empty

DBD

JVM

METADATA

RECOVERY

参数

默认设置

MEMORYSIZE 0%
MAXMEMORYSIZE

通过从 GENERAL 池中借用内存,资源池可以增加的每个节点的最大大小:

MAXMEMORYSIZE {
  'integer%'
'integer{K|M|G|T}'

NONE }

  • integer%:占总内存的百分比

  • integer{K|M|G|T}:以千字节、兆字节、千兆字节或太字节为单位的内存量

  • NONE (默认值):无限制,池可以从 GENERAL 池中借用任意数量的可用内存。

MAXQUERYMEMORYSIZE 空/不能设置
EXECUTIONPARALLELISM AUTO
PRIORITY

以下几项之一:

  • 企业模式:107

  • Eon 模式:110

RUNTIMEPRIORITY
RUNTIMEPRIORITYTHRESHOLD 60
QUEUETIMEOUT 00:05(分钟)
RUNTIMECAP NONE
PLANNEDCONCURRENCY AUTO
MAXCONCURRENCY

默认情况下,设置如下:

(numberCores / 2) + 1

因此,对于具有四个内核的系统,MAXCONCURRENCY 的默认设置为 3。

SINGLEINITIATOR

True。

CPUAFFINITYSET 空/不能设置
CPUAFFINITYMODE ANY/无法设置
CASCADETO 空/不能设置

REFRESH

SYSQUERY

TM