はじめに

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

※リソースプールについては、以下の記事をご参照ください。
Verticaのリソース管理について
定義済みリソースプールの種類

例えば営業用ユーザの処理が他の処理と競合してクエリがキューに入ることを防ぐために、営業用ユーザに対しプールを作成し、優先的にリソースを割り当てることができます。

これにより営業用ユーザは常に専用のプールが使用できるためリソースの競合を防ぐことができます。

ユーザ定義のリソースプールを作成する

ユーザ定義のリソースプールはCREATE RESOURCE POOL文にて作成することができます。

各パラメータの意味

パラメータ名説明
MEMORYSIZE予約済みのメモリサイズです。
指定しない場合(0%)は、必要になった時点でGENERALプールから必要な
メモリ リソースを借ります。
PLANNEDCONCURRENCYプールに対して想定されるクエリ実行数です。
デフォルト値は1ノード当たりのCPUコア数です。
本パラメータは1セッションあたりのメモリの初期割当サイズを決定するために
使用されます。
MAXCONCURRENCY同時実行処理の最大数です。
同時実行数が本パラメータの設定値を超えた場合、以降の処理はキュー(待ち状態)に
入ります。
RUNTIMEPRIORITYCPU / 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文でユーザに割り当てることができます。

作成したリソースプールには、複数のユーザを割り当てることができますが、ひとつのユーザに対して複数のリソースプールを割り当てることはできません。

ユーザに割り当てられたリソースプールを確認する

ユーザに割り当てられたリソースプールは、USERSシステムテーブルにて確認することができます。

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。