はじめに

システムテーブルには、クラスタの状態や、テーブル、プロジェクション、ユーザ等の詳細な情報が格納されています。データベースの管理をする上でよく利用しますが、古いデータは消えてしまうので、注意が必要です。本稿では、システムテーブルの保存条件を変更する方法について、詳しく解説します。

システムテーブルの構成

システムテーブルの実体はビューのため、システムテーブルを構成しているDCテーブルの保存条件を変更する必要があります。DCテーブルは、Data Collectorテーブルの略称で、データベースの監視情報を保存します。DCテーブルの保存条件は、ディスク上限サイズと保存期間の閾値があり、コンポーネント単位で管理されています。

[user_sessionsシステムテーブルの構成イメージ]


データコレクターとは

データコレクターは、データベースの監視情報を保存する機能で、以下の特長があります。

・ディスク上限サイズ、保存期間の閾値に基づいてデータを保持する。
・ディスク上限サイズ、保存期間で設定した閾値のいずれかに達した場合、古いデータから順番に削除する。
・ディスク上限サイズ、保存期間の両方の閾値を設定した場合、一番先に達した閾値を優先する。
・停止しているノードの情報は保存しない。
・データはカタログ領域配下にファイルとして、保存する。
 【出力先】: /<カタログ領域>/<データベース名>/v_<データベース名>_<ノード名>_catalog/DataCollector/<コンポーネント名>_<シリアル番号>.log
 【出力例】: /home/dbadmin/catalog/vdb/v_vdb_node0001_catalog/DataCollector/RuntimePriorityChanges_613580539629259.log

DCテーブルの保存条件は、データコレクターを使って、コンポーネントごとに変更をおこないます。
以下の例では、RuntimePriorityChangesコンポーネントのディスク上限サイズを1GB(1048576KB)、保存期間を7日間に変更しています。

[RuntimePriorityChangesコンポーネントの変更イメージ]

注意事項

DCテーブルの保存条件を変更する場合は、以下の点について、ご注意ください。
項目説明
カタログ領域のディスクサイズ増加各DCテーブルの情報はカタログ領域に格納されます。蓄積される情報が増えて、カタログ領域のサイズも増加するので、ディスク溢れにご注意ください。
システムテーブルのSELECTパフォーマンス蓄積される情報が増えるため、各システムテーブルに対して、実行したSQLのパフォーマンスが、現在と比べて遅くなる可能性があります。
SYSDATAリソースプールのメモリ不足SYSDATAリソースプールはシステムテーブルの結果が格納されるリソースプールです。デフォルト値は、最大メモリサイズが1GBに設定されています。そのため、システムテーブルに対してのSELECT結果が大きい場合、メモリ不足エラーが発生する可能性があります。


保存条件の変更方法

本番環境への実装前に、必要なデータが削除されないよう、事前にテストいただくことをお勧めします。

手順

DCテーブルの保存条件を変更する場合は、以下の手順を実行します。

【1】DCテーブルの確認
システムテーブルを構成しているDCテーブルを確認するために、vs_system_viewsテーブル(※1)を参照します。

【2】コンポーネントの確認
DCテーブルを構成しているコンポーネントを確認するために、data_collectorシステムテーブル(※2)を参照します。

【3】保存条件の確認
コンポーネントの保存条件を確認(※3)するために、data_collectorシステムテーブルを参照します。

【4】保存条件の変更
コンポーネントの保存条件を変更するために、set_data_collector_policy関数(※4)を実行します。

【5】変更後の保存条件を確認
変更されたコンポーネントの保存条件を確認するために、data_collectorシステムテーブルを参照します。


(※1) vs_system_viewsテーブル
項目説明
view_schemaシステムテーブルが格納されているスキーマ名
view_nameシステムテーブル名
view_descriptionシステムテーブルの説明
query_stringシステムテーブルのDDL文


(※2) data_collectorシステムテーブル
項目説明
node_name情報が保持されているノード名
componentコンポーネント名
table_nameDCテーブル名
descriptionコンポーネントの説明
access_restrictedtの場合は、sysmonitorロールが付与されているDBユーザがアクセス可能、
fの場合は、すべてのDBユーザーからアクセス可能を示す。
memory_buffer_size_kbメモリバッファのサイズ(KB)
disk_size_kbディスクの上限サイズ(KB)
※DCテーブルの保存条件です。
interval_settの場合は、保存期間の閾値が有効であることを示す。
interval_time保存期間。無効の場合は、0が設定される。
※DCテーブルの保存条件です。
record_too_big_errorsデータがメモリに収まらなかった場合、1ずつカウンタアップする(データコレクターの保存ポリシーに基づく)。
lost_buffers失われたバッファの数
lost_records失われたレコード数
retired_files回収されたファイルの数
retired_records回収されたレコードの数
current_memory_recordsメモリ内の現在の行数
current_disk_recordsディスクに格納されている現在の行数
current_memory_bytes現在使用されている合計メモリ(KB)
current_disk_bytes現在使用されている合計ディスク容量(KB)
first_time最初のレコードのタイムスタンプ
last_time最後のレコードのタイムスタンプ
kb_per_day1日に使用された合計(KB)


(※3) 保存条件は、get_data_collector_policy関数を利用した場合も確認できます。
SELECT get_data_collector_policy(‘データコレクターのコンポーネント名’);
項目説明
データコレクターのコンポーネント名指定されたコンポーネントの保存条件を表示します。


(※4) set_data_collector_policy関数
SELECT set_data_collector_policy(‘データコレクターのコンポーネント名’, ‘メモリサイズ’, ‘ディスクサイズの閾値’, ‘期間の閾値’);
項目説明
データコレクターのコンポーネント名指定されたコンポーネントの保存条件を設定します。
メモリサイズ保持するメモリサイズの上限値をKB単位で指定します。
※DCテーブルの保存条件ではありません。本メモリサイズは、ディスクビジー等の理由でディスクへの書き込みが遅れてしまう際に、一時的に利用する領域です。
ディスクサイズの閾値ディスクサイズの上限値をKB単位で指定します。
期間の閾値指定されたコンポーネントをディスク上に保持する期間を指定します。保存期間を無制限にする場合は「-1」に設定します。


実行例

user_sessionsシステムテーブルとquery_requestsシステムテーブルを例にあげて、解説します。

【1】DCテーブルの確認
user_sessionsシステムテーブルは、dc_session_starts、dc_session_ends、dc_runtime_priority_changesで構成されています。


query_requestsシステムテーブルは、dc_requests_issued、dc_requests_completed、dc_errors、dc_resource_acquisitionsで構成されています。



【2】コンポーネントの確認
user_sessionsシステムテーブルは、RuntimePriorityChanges、SessionEnds、SessionStartsのコンポーネントで構成されています。


query_requestsシステムテーブルは、Errors、RequestsCompleted、RequestsIssued、ResourceAcquisitionsのコンポーネントで構成されています。


【3】保存条件の確認
user_sessionsシステムテーブルは、RuntimePriorityChangesが「disk_size_kb=10000, interval_set=f」、SessionEndsが「disk_size_kb=5000, interval_set=f」、SessionStartsが「disk_size_kb=5000, interval_set=f」に設定されています。
※デフォルトは、保存期間が設定されていないため、ディスク上限値のサイズのみが閾値になります。


参考)get_data_collector_policy関数を利用する場合は、以下のとおりです。


query_requestsシステムテーブルは、Errorsが「disk_size_kb=10000, interval_set=f」、RequestsCompletedが「disk_size_kb=50000, interval_set=f」、
RequestsIssuedが「disk_size_kb=50000, interval_set=f」、ResourceAcquisitionsが「disk_size_kb=10000, interval_set=f」に設定されています。
※デフォルトは、保存期間が設定されていないため、ディスク上限値のサイズのみが閾値になります。


参考)get_data_collector_policy関数を利用する場合は、以下のとおりです。


【4】保存条件の変更
user_sessionsシステムテーブルのディスクサイズの上限値を1GBで設定し、保存期間を7日間に設定します。


query_requestsシステムテーブルのディスクサイズの上限値を1GBで設定し、保存期間を7日間に設定します。


【5】変更後の保存条件を確認
user_sessionsシステムテーブルは、RuntimePriorityChangesが「disk_size_kb=1048576, interval_time=7」、SessionEndsが「disk_size_kb=1048576, interval_time=7」、SessionStartsが「disk_size_kb=1048576, interval_time=7」に変更されました。


query_requestsシステムテーブルは、Errorsが「disk_size_kb=1048576, interval_time=7」、RequestsCompletedが「disk_size_kb=1048576, interval_time=7」、RequestsIssuedが「disk_size_kb=1048576, interval_time=7」、ResourceAcquisitionsが「disk_size_kb=1048576, interval_time=7」に変更されました。


参考情報

データコレクターについて
Data Collector
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/Glossary/DataCollector.htm

複数の保存条件を変更する場合のコマンド
SET_DATA_COLLECTOR_POLICY
https://www.vertica.com/docs/9.2.x/HTML/index.htm#Authoring/SQLReferenceManual/Functions/VerticaFunctions/DataCollection/SET_DATA_COLLECTOR_POLICY.htm

保存期間のみを変更する場合のコマンド
SET_DATA_COLLECTOR_TIME_POLICY
https://www.vertica.com/docs/9.2.x/HTML/index.htm#Authoring/SQLReferenceManual/Functions/VerticaFunctions/DataCollection/SET_DATA_COLLECTOR_TIME_POLICY.htm

現在の保存条件を確認する場合のコマンド
DATA_COLLECTOR
https://www.vertica.com/docs/9.2.x/HTML/index.htm#Authoring/SQLReferenceManual/SystemTables/MONITOR/DATA_COLLECTOR.htm

GET_DATA_COLLECTOR_POLICY
https://www.vertica.com/docs/9.2.x/HTML/index.htm#Authoring/SQLReferenceManual/Functions/VerticaFunctions/DataCollection/GET_DATA_COLLECTOR_POLICY.htm

検証バージョン

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

更新履歴

2019/07/01 本記事を公開