CREATE RESOURCE POOL
创建自定义资源池并设置一个或多个资源池参数。
语法
CREATE RESOURCE POOL pool‑name [ FOR subcluster-spec ] [ parameter‑name setting ]...
参数
- pool‑name
- 资源池的名称。内置池名称不能用于用户定义的池。
注意
如果使用大写字母指定资源池名称,Vertica 会将它们转换为小写字母。 -
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 资源,则此查询无效。
重要
CPUAFFINITYMODE
CPUAFFINITYSET
必须在同一语句中一起设置。-
-
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 上执行。
重要
CPUAFFINITYSET
CPUAFFINITYMODE
必须在同一语句中一起设置。-
-
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 }
-
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:一个负整数或正整数值。数字越大,表示优先级越高:
-
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