はじめに

Verticaは複数台構成でノードダウンが発生した場合、ノード復旧後は各ノード間でデータの整合性を保つために、リカバリが実行されます。Vertica7.1までは、リカバリ実行中は全てのテーブルに対して一度にロックをかける動作だったので、DDL/DML(Delete, Update, Merge) は長時間ロックで待たされることがありました。Vertica7.2からは、優先度に従ってテーブル単位でリカバリが実行できるようになったため、リカバリが完了したテーブルから、随時 DDL/DMLを実行できるようになりました。

テーブル単位リカバリ_7.1
テーブル単位リカバリ2_7.2

リカバリ動作を確認するためのコマンド

テーブルがリカバリされている状況を確認するためのコマンドをご紹介します。

全テーブルのリカバリ状況確認

各テーブルのリカバリ状況を確認するためには 「table_recoveries」システムテーブルを利用します。

【実行例】

【table_recoveries】

項目説明
node_name対象ノード名
table_oid対象テーブルのオブジェクトID
table_name対象テーブル名
statusリカバリのステータス状況
 recovered    : リカバリ完了
 not recovered : リカバリ未完了


リカバリ中のテーブル確認

現在リカバリ中のテーブルを確認するためには 「table_recovery_status」システムテーブルを利用します。

【実行例】

【table_recovery_status】

項目説明
node_name対象のノード名
recover_epochリカバリ予定のエポック番号 (復旧ポイント)
recovering_table_nameリカバリ中のテーブル名
recovered_table_countリカバリ済のテーブル数
table_countテーブルの合計数
is_runningリカバリの実行状態
 t: 実行中
 f: 未実行


リカバリ優先度を変更するためのコマンド

テーブルのリカバリ優先度を変更するためのコマンドをご紹介します。更新が発生するテーブルを優先してリカバリを行う対象として設定することができるため、業務への影響を最小限に留めることができます。

優先度変更

優先度を変更するためには 「set_table_recover_priority」関数を利用します。

【実行例】

【set_table_recover_priority】

項目説明
スキーマ名.テーブル名対象テーブル名
優先番号リカバリ実行時の優先度を整数で指定する。大きい値ほど優先度は高い。最大値は64ビットの整数値。


優先度確認

優先度を確認するためには 「tables」システムテーブルを利用します。

【実行例】

【tables】

項目説明
table_name対象テーブル名
recover_priorityリカバリ実行時のテーブル優先度


参考情報

・Verticaノードのクラスタ
http://vertica-tech.ashisuto.co.jp/node_cluster/

検証バージョンについて

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