はじめに
本稿では、Couchbase Serverにおけるコンパクションについて解説します。
コンパクション入門
コンパクションのメカニズム
Couchbase のすべての挿入、更新、削除は、ディスク上のデータファイルに「追加」されます。
Couchbaseの追加専用エンジンは、最終的にはデータファイル内のギャップ(特にデータが削除された場合)につながり、コンパクションと呼ばれるプロセスを使用して再利用できます。
コンパクションの際には、新しいファイルが作成されます。その間、既存のデータベースファイルはそのまま残り、情報の格納やインデックスデータの更新に引き続き使用されます。このプロセスにより、コンパクションが行われている間もデータベースが引き続き使用可能になります。
コンパクションが完了すると、古いデータベースファイルが無効になります。その後、新しく作成されたデータベースファイルで受信更新が続行されます。その後、古いデータベースファイルがシステムから削除されます。
コンパクションは、Couchbaseサーバーの実行中にバックグラウンドプロセスとして実行されます。 データベース操作をシャットダウンまたは一時停止する必要はありません。
運用における留意点
コンパクションの運用にあたり、下記の要因に注意を払う必要があります。
余裕のあるリソース状況
コンパクションプロセスはディスクとCPUの両方を集中的に使用します。
十分なディスク領域
コンパクションは新しいファイルを作成するため、コンパクションを行うために現在のデータベースファイルのディスク領域の2倍が必要になる場合があります。 コンパクションが実行される前に、ディスク領域がチェックされます。使用可能なディスクスペースが現在のデータベース・サイズの2倍未満の場合、コンパクション処理は行われず、ログに警告が出されます。
オート・コンパクション
オート・コンパクションのトリガー
オート・コンパクションのトリガーには、下記の2つの要素があります。
データベースの断片化
これがプライマリ設定です。この数値を 10%に設定すると、データ ファイルが 10% 断片化された時点でオート・コンパクションがトリガーされます(オート・コンパクションの時間帯制限がない限り)
時間帯
データベースが多用されているときにオート・コンパクションが行われないようにするには、オート・コンパクションが許可される時間帯を設定します。 これは、時・分の単位で設定できます(たとえば、01:00 から 06:00 の間に実行)。 デフォルトでは、コンパクションは順次実行されます。
メタデータのパージ間隔
オート・コンパクションに関連深い、別の設定項目として、メタデータのパージ間隔があります。期限切れアイテムおよび削除済みアイテムのTombstones(削除済みアイテムと期限切れアイテムのキーとメタデータを含むレコード)は、オート・コンパクションプロセスの一部として削除されます。
オート・コンパクション設定
オート・コンパクションの設定は、クラスター単位とバケット単位で行うことができます。
下記は、設定画面のイメージです。上記解説の内容を参考に、ご覧になってください。
コンパクションのマニュアル実行
REST APIコールを用いて、コンパクションをマニュアルで実行することも可能です。
他のNoSQLの場合
MongoDB
確認した限り、MongoDBは、オート・コンパクションには対応していないように見受けられました。マニュアルのコンパクションは、repairコマンドで実行するようです。
HBase
HBaseには、オート・コンパクションに関する様々なチューニング要素があり、オフピーク時に積極的にコンパクションを発生させ、それ以外の時間帯になるべくコンパクションが発生しないようにする設定が可能です。また、メジャーコンパクションとマイナーコンパクションという二つの機構が用意されているのに加え、スロットルというコンパクションの負荷を全体として最適化するための設定項目もあります。