ダンプには、Mini CompactionとMinor Compactionの2つのプロセスが含まれます。MemTableのサイズが一定のしきい値を超えると、MemTable内のデータをMini SSTableに転送してメモリを解放する必要があり、このプロセスをMini Compactionと呼びます。ユーザーデータの書き込みに伴い、Mini SSTableの数が増加し、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の両方が含まれます。あるテナントの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内のcolumnのchecksum値が一致しません。
Data Checksumの不整合:Major SSTable内のすべての行のchecksumが一致しません。