ダンプには、Mini CompactionとMinor Compactionの2つのプロセスが含まれます。MemTableのサイズが一定のしきい値を超えると、MemTable内のデータをMini SSTableに転出してメモリを解放する必要があり、このプロセスをMini Compactionと呼びます。ユーザーデータの書き込みに伴い、Mini SSTableの数が増え続けると、その数が一定のしきい値を超えた場合、バックグラウンドでMinor Compactionが自動的にトリガーされます。ダンプ(Mini Compaction)により新しいMini SSTableが生成されます。ダンプ(Mini Compaction)の回数が一定のしきい値を超えた場合、または毎日の業務のオフピーク時に、システムはベースラインSSTable(Major SSTable)とその後のダンプによって生成された増分SSTable(Mini/Minor SSTable)を統合して新しいMajor SSTableを作成します。このプロセスをメジャーコンパクションと呼びます。
テナントのMemTableが使用可能なメモリは、利用可能なメモリの合計のmemstore_limit_percentage割合です。これにはActive MemTableとFrozen MemTableの2部分が含まれます。あるテナントのMemTableメモリ使用量がmemstore_limit_percentage × freeze_trigger_percentageに達すると、自動的にフリーズ(ダンプの前段階のアクション)がトリガーされ、新しいActive MemTableが生成されます。元のActive MemTableはFrozen MemTableになります。その後、自動的にダンプがスケジュールされ、ダンプ完了後にFrozen MemTable部分のメモリが解放されます。
説明
memstore_limit_percentageは、テナントがMemStoreとして使用するメモリが利用可能なメモリの合計に占める割合を設定します。デフォルト値は0で、値の範囲は[0, 100)です。この構成パラメータの詳細については、memstore_limit_percentageを参照してください。freeze_trigger_percentageは、グローバルフリーズをトリガーするテナントのメモリ使用しきい値を設定します。デフォルト値は20で、値の範囲は(0, 100)です。この構成パラメータの詳細については、freeze_trigger_percentageを参照してください。
以下の方法でダンプのトリガーを早めることができます:
freeze_trigger_percentageを引き下げる手動で
alter system minor freezeを実行してトリガーする
あるテナントのフリーズ回数がmajor_compact_triggerに達すると、自動的にメジャーコンパクションがトリガーされます。OceanBaseデータベースV4.xバージョンでは、デフォルト値は0で、この方式によるメジャーコンパクションの自動トリガーは無効になっています。
説明
major_compact_triggerは、何回のフリーズで1回のメジャーコンパクションをトリガーするかを設定します。値の範囲は[0, 65535]です。この構成パラメータの詳細については、major_compact_triggerを参照してください。
以下の方法でメジャーコンパクションのトリガーを早めることができます:
major_compact_triggerを引き下げる手動で
alter system major freezeを実行してトリガーする
マージ時のデータ不整合
データ不整合には3つの状況があります:
行数の不整合:プライマリテーブルとインデックステーブルの行数が一致しません。
Column Checksum の不整合:Major SSTable 内の列の checksum 値が一致しません。
Data Checksum の不整合:Major SSTable 内のすべての行の checksum が一致しません。