はじめに

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 Operations
https://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

検証バージョンについて

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

更新履歴

2020/04/27 本記事を公開