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