OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

ユーザ毎に使用できるリソースを制御する方法(ユーザ定義のリソースプール)

公開日:
更新日:
基本操作
チューニング
#リソースプール

はじめに

リソースプールは、あらかじめ用意されている定義済みのリソースプール以外に、任意にプールを作成し、特定のユーザにリソースを割り当てることができます。

※リソースプールについては、以下の記事をご参照ください。
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

予約済みのメモリサイズです。
指定しない場合(0%)は、必要になった時点でGENERALプールから必要な
メモリ リソースを借ります。

PLANNEDCONCURRENCY

プールに対して想定されるクエリ実行数です。
デフォルト値は1ノード当たりのCPUコア数です。
本パラメータは1セッションあたりのメモリの初期割当サイズを決定するために
使用されます。

MAXCONCURRENCY

同時実行処理の最大数です。
同時実行数が本パラメータの設定値を超えた場合、以降の処理はキュー(待ち状態)に
入ります。

RUNTIMEPRIORITY

CPU / IO帯域の優先度です。デフォルトはMEDIUMです。
(有効値:HIGH、MEDIUM、LOW)
処理を実行する際に割り当てられるCPU / IO帯域の優先度を決定するために
使用されます。


※上記は用意されているパラメータの一部です。
パラメータの詳細については、以下のマニュアルをご参照ください。
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で確認しています。