はじめに
Verticaでは、格納データを整理する処理を内部的に行います。
それにより、データが増加しても高い検索性能を維持することができます。
本記事では、データ整理を行うVertica内部のコンポーネントとその処理内容についてご紹介します。
Tuple Moverとは
Vertica内部でデータ整理の処理を定期実行するコンポーネントをTuple Moverと呼びます。
Tuple Moverは、Mergeoutというデータ整理の処理を行います。
Mergeoutの処理内容
Mergeoutでは、主に次の2つの処理が行われます。
・ROSコンテナの統合
・論理削除レコードの物理削除(パージ)
各処理の詳細を以下にご案内します。
ROSコンテナの統合
ROSコンテナは、データの追加や変更をCOMMITしたタイミングでトランザクション単位に作成されるため、小さいサイズのROSコンテナが増加していきます。
Mergeoutでは、より最適な読取りを行うため、生成されたROSを内部のアルゴリズムに基づきより大きなものへと統合します。
イメージは以下のとおりです。
論理削除レコードの物理削除(パージ)
VerticaはDELETE処理時、COMMIT時点ではデータを物理削除せず、削除対象のデータをデリートベクター(※)でマークする論理削除のみ行います。
Mergeout時、物理削除(パージ)の条件を満たしたデリートベクターと、デリートベクターでマークされた削除対象データが物理削除されます。
(※)データがDELETE済みであることを表す内部的なマーカーです。
処理の実行タイミング
Tuple Moverの処理は、内部的に自動実行されます。
また、関数を使用して手動実行することも可能です。
自動実行
Tuple Moverは、以下のタイミングで自動的にプロジェクションのROS状態をチェックし、条件を満たした際にMergeoutを実行します。
一定時間経過した時(デフォルト:600秒)
DML Commitが行われた時
手動実行
do_tm_task関数を使用することで、Tuple Moverの処理を手動実行することも可能です。
手動実行の方法は「MoveoutとMergeoutの手動実行」の「mergeoutの手動実行方法」の項目をご参照ください。
補足
バージョンごとにMergeoutの動作が一部異なります。
詳細は以下の記事をご確認ください。
バージョンごとのMergeout動作
https://www.ashisuto.co.jp/cm/analytics-database/mergeout_by_version.html
参考資料
Tuple Mover Operations
https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/AdministratorsGuide/TupleMover/ManagingTupleMoverOperations.htm
検証バージョンについて
この記事の内容はVertica 9.3で確認しています。
更新履歴
2020/04/27 本記事を公開
