はじめに
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動作
http://vertica-tech.ashisuto.co.jp/mergeout_by_version/
参考資料
Tuple Mover Operationshttps://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/AdministratorsGuide/TupleMover/ManagingTupleMoverOperations.htm
Mergeout
https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/AdministratorsGuide/TupleMover/Mergeout.htm
DO_TM_TASK
https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/SQLReferenceManual/Functions/VerticaFunctions/DO_TM_TASK.htm