はじめに
リソースプールは、あらかじめ用意されている定義済みのリソースプール以外に、任意にプールを作成し、特定のユーザにリソースを割り当てることができます。
※リソースプールについては、以下の記事をご参照ください。
Verticaのリソース管理について
定義済みリソースプールの種類
例えば営業用ユーザの処理が他の処理と競合してクエリがキューに入ることを防ぐために、営業用ユーザに対しプールを作成し、優先的にリソースを割り当てることができます。
これにより営業用ユーザは常に専用のプールが使用できるためリソースの競合を防ぐことができます。
ユーザ定義のリソースプールを作成する
ユーザ定義のリソースプールはCREATE RESOURCE POOL文にて作成することができます。
//構文
CREATE RESOURCE POOL <プール名> <パラメータ名> <設定内容>;
//例)想定されるクエリの同時実行数は「5」、ただしピーク時以外は同時実行数は「4」を想定。
// また、クエリの実行には最低「1G」のメモリを割り当て、
// CPU/IO帯域のリソースを他のプールより優先させたい場合
dbadmin=> CREATE RESOURCE POOL eigyo_pool
dbadmin-> MEMORYSIZE '4G' PLANNEDCONCURRENCY 4 MAXCONCURRENCY 5
dbadmin-> RUNTIMEPRIORITY HIGH;各パラメータの意味
パラメータ名 | 説明 |
|---|---|
MEMORYSIZE | 予約済みのメモリサイズです。 |
PLANNEDCONCURRENCY | プールに対して想定されるクエリ実行数です。 |
MAXCONCURRENCY | 同時実行処理の最大数です。 |
RUNTIMEPRIORITY | CPU / IO帯域の優先度です。デフォルトはMEDIUMです。 |
※上記は用意されているパラメータの一部です。
パラメータの詳細については、以下のマニュアルをご参照ください。
CREATE RESOURCE POOL
上述の例では、ピーク時以外は同時実行数は「4」で想定しているため、 PLANNEDCONCURRENCYは「4」、MEMORYSIZEは「4G」にします。これにより、1セッション当たりのメモリの初期割当サイズは1GBとなります。
また、MAXCONCURRENCYは「5」に設定されているため、eigyo_poolは5つ目のクエリも受け入れます。ただし、eigyo_poolのメモリリソースがすでにいっぱいの場合は、GENERALプールのリソースを使用します。
このように、 PLANNEDCONCURRENCYよりMAXCONCURRENCYの値を大きくすることで、ピーク時以外(同時実行数が4以下)にeigyo_poolが必要以上にリソースを確保することを防ぐことができます。
もし、同時クエリ実行数が6になった場合は、6つ目のクエリはキューに入り、他のクエリが完了するのを待ちます。タイムアウト時間(Queue Timeout)を超えてもキューにいる場合は、該当クエリはタイムアウトになります。
※デフォルトのタイムアウト時間は300秒です。
なお、RUNTIMEPRIORITYを「HIGH」に設定しているため、 CPU/IO帯域のリソースが優先的に割り当てられます。
eigyo_poolを使用するユーザからの同時クエリ実行数が6の場合のリソースプール使用イメージ

作成したリソースプールを任意のユーザに割り当てる
リソースプールは、CREATE USER文またはALTER USER文でユーザに割り当てることができます。
//例)eigyo_poolプールをeigyo_userユーザに割り当てる場合
//CREATE USER文
dbadmin=> CREATE USER eigyo_user RESOURCE POOL eigyo_pool;
//ALTER USER文
dbadmin=> ALTER USER eigyo_user RESOURCE POOL eigyo_pool;作成したリソースプールには、複数のユーザを割り当てることができますが、ひとつのユーザに対して複数のリソースプールを割り当てることはできません。
ユーザに割り当てられたリソースプールを確認する
ユーザに割り当てられたリソースプールは、USERSシステムテーブルにて確認することができます。
//例)eigyo_userに割り当てられているプールを確認する場合
dbadmin=> SELECT * FROM users WHERE user_name ='eigyo_user';
-[ RECORD 1 ]---------+--------------------------------------------------
user_id | 45035996273707624
user_name | eigyo_user
is_super_user | f
profile_name | default
is_locked | f
lock_time |
resource_pool | eigyo_pool //eigyo_poolが割り当てられている
memory_cap_kb | unlimited
temp_space_cap_kb | unlimited
run_time_cap | unlimited
max_connections | unlimited
connection_limit_mode | database
idle_session_timeout | unlimited
all_roles |
default_roles |
search_path | "$user", public, v_catalog, v_monitor, v_internal
ldap_dn |
ldap_uri_hash | 0
is_orphaned_from_ldap | f検証バージョンについて
この記事の内容はVertica 9.1で確認しています。