はじめに
システムテーブルには、クラスタの状態や、テーブル、プロジェクション、ユーザ等の詳細な情報が格納されています。データベースの管理をする上でよく利用しますが、古いデータは消えてしまうので、注意が必要です。本稿では、システムテーブルの保存条件を変更する方法について、詳しく解説します。システムテーブルの構成
システムテーブルの実体はビューのため、システムテーブルを構成している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_name | DCテーブル名 |
description | コンポーネントの説明 |
access_restricted | tの場合は、sysmonitorロールが付与されているDBユーザがアクセス可能、 fの場合は、すべてのDBユーザーからアクセス可能を示す。 |
memory_buffer_size_kb | メモリバッファのサイズ(KB) |
disk_size_kb | ディスクの上限サイズ(KB) ※DCテーブルの保存条件です。 |
interval_set | tの場合は、保存期間の閾値が有効であることを示す。 |
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_day | 1日に使用された合計(KB) |
(※3) 保存条件は、get_data_collector_policy関数を利用した場合も確認できます。
項目 | 説明 |
---|---|
データコレクターのコンポーネント名 | 指定されたコンポーネントの保存条件を表示します。 |
(※4) 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で構成されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# ★は参照しているDCテーブル dbadmin=> \x Expanded display is on. dbadmin=> select * from vs_system_views where view_name = 'user_sessions' ; -[ RECORD 1 ]----+------------------------------------------------------------------------------------------------- view_schema | v_monitor view_name | user_sessions view_description | User session history query_string | create view "v_monitor"."user_sessions" as select ss.node_name, ss.user_name, ss.session_id, vs.transaction_id, vs.statement_id, case when drpc.current_runtime_priority = '' then null else drpc.current_runtime_priority end as "runtime_priority", ss.time as session_start_timestamp, se.time as session_end_timestamp, (se.time IS NULL) as is_active, ss.client_hostname, ss.client_pid, ss.client_label, ss.ssl_state, ss.authentication_method, ss.client_type, ss.client_version, ss.client_os, ss.client_os_user_name, ss.requested_protocol, ss.effective_protocol from v_internal.dc_session_starts★ ss LEFT JOIN v_internal.dc_session_ends★ se USING (node_name, session_id) LEFT JOIN v_internal.vs_sessions vs USING (node_name, session_id) left join ( select node_name,session_id,current_runtime_priority,transaction_id from ( select node_name, session_id, current_runtime_priority, transaction_id, row_number() over (partition by node_name, session_id order by time desc) as rn from v_internal.dc_runtime_priority_changes★ ) as sq0 where rn = 1 ) as drpc on (ss.node_name = drpc.node_name and ss.session_id = drpc.session_id and vs.transaction_id = drpc.transaction_id) where not ss.is_internal ; |
query_requestsシステムテーブルは、dc_requests_issued、dc_requests_completed、dc_errors、dc_resource_acquisitionsで構成されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# ★は参照しているDCテーブル dbadmin=> select * from vs_system_views where view_name = 'query_requests' ; -[ RECORD 1 ]----+------------------------------------------------------------------------------------------------- view_schema | v_monitor view_name | query_requests view_description | User-issued query requests query_string | create view "v_monitor"."query_requests" as select ri.node_name, ri.user_name, ri.session_id, ri.request_id, ri.transaction_id, ri.statement_id, ri.request_type, replace(replace(ri.request, E'\n', ' '), E'\t', ' ') as request, ri.label as request_label, ri.search_path, round(ra.memory_mb, 2) as memory_acquired_mb, rc.success, de.error_count, ri.time as start_timestamp, rc.time as end_timestamp, rc.time - ri.time as request_duration, datediff('millisecond', ri.time, rc.time) as request_duration_ms, rs.is_running IS NOT NULL AND rc.time IS NULL as is_executing from v_internal.dc_requests_issued★ ri LEFT OUTER JOIN (select node_name, session_id, request_id, reserved_extra_memory, time, processed_row_count, schema_name, table_name, command_tag, completion_tag, success FROM v_internal.dc_requests_completed★) rc USING (node_name, session_id, request_id) LEFT OUTER JOIN (select node_name, session_id, request_id, count(*) as error_count from v_internal.dc_errors★ where error_level >= 20 group by 1,2,3) de USING (node_name, session_id, request_id) LEFT OUTER JOIN (select node_name, transaction_id, statement_id, max(memory_kb)/1024::float as memory_mb from v_internal.dc_resource_acquisitions★ where result = 'Granted' group by 1,2,3) ra USING (node_name, transaction_id, statement_id) LEFT OUTER JOIN (select node_name, user_name, session_id, statement_id, true as is_running -- Is session still running? Always true if it's in vs_sessions from v_internal.vs_sessions group by 1,2,3,4) rs USING (node_name, user_name, session_id, statement_id); |
【2】コンポーネントの確認
user_sessionsシステムテーブルは、RuntimePriorityChanges、SessionEnds、SessionStartsのコンポーネントで構成されています。
1 2 3 4 5 6 7 |
dbadmin=> select node_name,component,table_name,memory_buffer_size_kb,disk_size_kb,interval_set,interval_time from data_collector where table_name in ('dc_session_starts','dc_session_ends','dc_runtime_priority_changes') ; node_name | component | table_name | memory_buffer_size_kb | disk_size_kb | interval_set | interval_time -------------------+------------------------+-----------------------------+-----------------------+--------------+--------------+--------------- v_testdb_node0001 | RuntimePriorityChanges | dc_runtime_priority_changes | 1000 | 10000 | f | 0 v_testdb_node0001 | SessionEnds | dc_session_ends | 100 | 5000 | f | 0 v_testdb_node0001 | SessionStarts | dc_session_starts | 200 | 5000 | f | 0 (3 rows) |
query_requestsシステムテーブルは、Errors、RequestsCompleted、RequestsIssued、ResourceAcquisitionsのコンポーネントで構成されています。
1 2 3 4 5 6 7 8 |
dbadmin=> select node_name,component,table_name,memory_buffer_size_kb,disk_size_kb,interval_set,interval_time from data_collector where table_name in ('dc_requests_issued','dc_requests_completed','dc_errors','dc_resource_acquisitions') ; node_name | component | table_name | memory_buffer_size_kb | disk_size_kb | interval_set | interval_time -------------------+----------------------+--------------------------+-----------------------+--------------+--------------+--------------- v_testdb_node0001 | Errors | dc_errors | 1000 | 10000 | f | 0 v_testdb_node0001 | RequestsCompleted | dc_requests_completed | 2000 | 50000 | f | 0 v_testdb_node0001 | RequestsIssued | dc_requests_issued | 2000 | 50000 | f | 0 v_testdb_node0001 | ResourceAcquisitions | dc_resource_acquisitions | 1000 | 10000 | f | 0 (4 rows) |
【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」に設定されています。
※デフォルトは、保存期間が設定されていないため、ディスク上限値のサイズのみが閾値になります。
1 2 3 4 5 6 7 |
dbadmin=> select node_name,component,table_name,memory_buffer_size_kb,disk_size_kb,interval_set,interval_time from data_collector where table_name in ('dc_session_starts','dc_session_ends','dc_runtime_priority_changes') ; node_name | component | table_name | memory_buffer_size_kb | disk_size_kb | interval_set | interval_time -------------------+------------------------+-----------------------------+-----------------------+--------------+--------------+--------------- v_testdb_node0001 | RuntimePriorityChanges | dc_runtime_priority_changes | 1000 | 10000 | f | 0 v_testdb_node0001 | SessionEnds | dc_session_ends | 100 | 5000 | f | 0 v_testdb_node0001 | SessionStarts | dc_session_starts | 200 | 5000 | f | 0 (3 rows) |
参考)get_data_collector_policy関数を利用する場合は、以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
dbadmin=> SELECT get_data_collector_policy('RuntimePriorityChanges'); get_data_collector_policy ----------------------------------------------------------------------------- 1000KB kept in memory, 10000KB kept on disk. Time based retention disabled. (1 row) dbadmin=> SELECT get_data_collector_policy('SessionEnds'); get_data_collector_policy --------------------------------------------------------------------------- 100KB kept in memory, 5000KB kept on disk. Time based retention disabled. (1 row) dbadmin=> SELECT get_data_collector_policy('SessionStarts'); get_data_collector_policy --------------------------------------------------------------------------- 200KB kept in memory, 5000KB kept on disk. Time based retention disabled. (1 row) |
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」に設定されています。
※デフォルトは、保存期間が設定されていないため、ディスク上限値のサイズのみが閾値になります。
1 2 3 4 5 6 7 8 |
dbadmin=> select node_name,component,table_name,memory_buffer_size_kb,disk_size_kb,interval_set,interval_time from data_collector where table_name in ('dc_requests_issued','dc_requests_completed','dc_errors','dc_resource_acquisitions') ; node_name | component | table_name | memory_buffer_size_kb | disk_size_kb | interval_set | interval_time -------------------+----------------------+--------------------------+-----------------------+--------------+--------------+--------------- v_testdb_node0001 | Errors | dc_errors | 1000 | 10000 | f | 0 v_testdb_node0001 | RequestsCompleted | dc_requests_completed | 2000 | 50000 | f | 0 v_testdb_node0001 | RequestsIssued | dc_requests_issued | 2000 | 50000 | f | 0 v_testdb_node0001 | ResourceAcquisitions | dc_resource_acquisitions | 1000 | 10000 | f | 0 (4 rows) |
参考)get_data_collector_policy関数を利用する場合は、以下のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
dbadmin=> SELECT get_data_collector_policy('Errors'); get_data_collector_policy ----------------------------------------------------------------------------- 1000KB kept in memory, 10000KB kept on disk. Time based retention disabled. (1 row) dbadmin=> SELECT get_data_collector_policy('RequestsCompleted'); get_data_collector_policy ----------------------------------------------------------------------------- 2000KB kept in memory, 50000KB kept on disk. Time based retention disabled. (1 row) dbadmin=> SELECT get_data_collector_policy('RequestsIssued'); get_data_collector_policy ----------------------------------------------------------------------------- 2000KB kept in memory, 50000KB kept on disk. Time based retention disabled. (1 row) dbadmin=> SELECT get_data_collector_policy('ResourceAcquisitions'); get_data_collector_policy ----------------------------------------------------------------------------- 1000KB kept in memory, 10000KB kept on disk. Time based retention disabled. (1 row) |
【4】保存条件の変更
user_sessionsシステムテーブルのディスクサイズの上限値を1GBで設定し、保存期間を7日間に設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
dbadmin=> SELECT set_data_collector_policy('RuntimePriorityChanges','1000','1048576','7'); set_data_collector_policy --------------------------- SET (1 row) dbadmin=> SELECT set_data_collector_policy('SessionEnds','100','1048576','7'); set_data_collector_policy --------------------------- SET (1 row) dbadmin=> SELECT set_data_collector_policy('SessionStarts','200','1048576','7'); set_data_collector_policy --------------------------- SET (1 row) |
query_requestsシステムテーブルのディスクサイズの上限値を1GBで設定し、保存期間を7日間に設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
dbadmin=> SELECT set_data_collector_policy('Errors','1000','1048576','7'); set_data_collector_policy --------------------------- SET (1 row) dbadmin=> SELECT set_data_collector_policy('RequestsCompleted','2000','1048576','7'); set_data_collector_policy --------------------------- SET (1 row) dbadmin=> SELECT set_data_collector_policy('RequestsIssued','2000','1048576','7'); set_data_collector_policy --------------------------- SET (1 row) dbadmin=> SELECT set_data_collector_policy('ResourceAcquisitions','1000','1048576','7'); set_data_collector_policy --------------------------- SET (1 row) |
【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」に変更されました。
1 2 3 4 5 6 7 |
dbadmin=> select node_name,component,table_name,memory_buffer_size_kb,disk_size_kb,interval_set,interval_time from data_collector where table_name in ('dc_session_starts','dc_session_ends','dc_runtime_priority_changes') ; node_name | component | table_name | memory_buffer_size_kb | disk_size_kb | interval_set | interval_time -------------------+------------------------+-----------------------------+-----------------------+--------------+--------------+--------------- v_testdb_node0001 | RuntimePriorityChanges | dc_runtime_priority_changes | 1000 | 1048576 | t | 7 v_testdb_node0001 | SessionEnds | dc_session_ends | 100 | 1048576 | t | 7 v_testdb_node0001 | SessionStarts | dc_session_starts | 200 | 1048576 | t | 7 (3 rows) |
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」に変更されました。
1 2 3 4 5 6 7 8 |
dbadmin=> select node_name,component,table_name,memory_buffer_size_kb,disk_size_kb,interval_set,interval_time from data_collector where table_name in ('dc_requests_issued','dc_requests_completed','dc_errors','dc_resource_acquisitions') ; node_name | component | table_name | memory_buffer_size_kb | disk_size_kb | interval_set | interval_time -------------------+----------------------+--------------------------+-----------------------+--------------+--------------+--------------- v_testdb_node0001 | Errors | dc_errors | 1000 | 1048576 | t | 7 v_testdb_node0001 | RequestsCompleted | dc_requests_completed | 2000 | 1048576 | t | 7 v_testdb_node0001 | RequestsIssued | dc_requests_issued | 2000 | 1048576 | t | 7 v_testdb_node0001 | ResourceAcquisitions | dc_resource_acquisitions | 1000 | 1048576 | t | 7 (4 rows) |
参考情報
データコレクターについて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 本記事を公開- 投稿タグ
- システムテーブル, データ―コレクター, 保存期間, 保存条件, Data Collector