グローバルタイムスタンプサービス(Global Timestamp Service、略称:GTS)は、OceanBaseデータベースでは各テナントごとに起動し、トランザクションコミット時にそのテナントのタイムスタンプサービスを通じてトランザクションのバージョン番号を取得することで、グローバルなトランザクション順序を保証します。
サービスの高可用性
GTSはクラスタの核心であり、高可用性が保証される必要があります。
テナントについて言えば、OceanBaseデータベースはテナントレベルのログストリーム1のリーダーをGTSサービスプロバイダーとして使用し、時間はそのリーダーの永続化された割り当て可能な区間から取得します。GTSはデフォルトで3レプリカ構成であり、その高可用性は通常のテーブルと同等です。
GTSリーダーは、事前に割り当てられた区間のログを書き込むことで割り当て可能な区間を申請し、ログ同期によってレプリカ間の情報同期を行い、情報の損失を防ぎます。
タイムスタンプの正確性保証
GTSはグローバルに増分されるタイムスタンプサービスを維持しており、異常な状況下でも正確性を保証します:
- 新しいリーダーが就任する前に、前任のリーダーが書き込んだ事前に割り当てられた区間のログを再生し、元の割り当て可能な区間の最大値を取得して、自身のタイムスタンプ認可の基準値とします。したがって、この場合、GTSが提供するタイムスタンプは後戻りしません。
GTSの取得最適化
ステートメントスナップショット取得の最適化
トランザクションコミット時には、そのトランザクションが存在するマシンのGlobal Committed Versionが更新されます。あるステートメントがどのマシンでクエリされるかを明確に判断できる場合、そのマシンが単一の場合は、そのマシンのGlobal Committed Versionを直接Read Versionとして使用し、グローバルタイムスタンプへのリクエスト負荷を軽減します。
トランザクションコミットバージョン番号取得の最適化
複数のトランザクションはグローバルタイムスタンプを取得するためにメジャーコンパクションでき、タイムスタンプの取得リクエストを早期に送信することで、トランザクションのコミット時間を短縮できます。