このトピックでは、PolarDB-X Standard Editionで使用されるLizardトランザクションシステムについて説明します。
制限事項
データベースエンジンはMySQL 8.0と互換性がある必要があります。
制御ポリシー機能の動作
関係データベースは、マルチバージョン同時実行制御 (MVCC) メカニズムを使用して、コミットされたバージョンに基づいてデータの表示を決定します。 これに合わせるために、トカゲのスタンドアロントランザクションシステムは、トランザクションコミットのシーケンスを示すためにシステムコミット番号 (SCN) を採用します。 さらに、システムはコミットバージョン番号の永続的な保持のために特別に設計されたトランザクションスロットを備えています。
トランザクションを書く:
トランザクションが開始したら、トランザクションスロットを申請し、そのアドレスをUBAとして記録します。
トランザクション中に、変更されたレコードの2つのフィールド (SCN=NULL、UBA) を入力します。
トランザクションをコミットするとき、そのSCNを取得し、それをトランザクションスロットに追加します。 次に、トランザクションステータスが完了したことを確認し、トランザクションのコミット情報を顧客に返します。
トランザクションを読む:
クエリが開始されると、トランザクションビジョンを開始して、クエリのビジョンとしてSCNジェネレータから現在のSCNを取得します。
クエリが進行中の場合、行レコード内のトランザクションのUBAに基づいてトランザクションスロットを見つけ、トランザクションステータスとコミット番号を取得します。
レコードとビューのSCNを比較して、可視性を判断します。
SCNベースのトランザクションパフォーマンスの最適化
MySQLのオープンソースInnoDBトランザクションシステムと比較して、Lizardトランザクションシステムは大きな利点をもたらします。
読み取り /書き込みの競合を大幅に軽減するグローバル構造へのアクセス依存を排除します。
ビューをビジョンにアップグレードします。このビジョンには、アクティブなトランザクションID配列ではなく、SCN番号が1つしかないため、送信が簡単になります。
カスタムFlashBackクエリをサポートします。
しかし、それはまたいくつかの欠点を有する。 トランザクションがコミットされると、トランザクションスロットのみが変更され、行レコードのSCNは常にNULLになります。 したがって、各可視性の比較中に、SCNを確認するためにUBAに基づいてトランザクションスロットをクエリする必要があります。 トランザクションスロットの繰り返しクエリを減らすために、Lizardトランザクションシステムにクリーンアウトが導入されます。 クリーンアウトは、コミットクリーンアウトと遅延クリーンアウトに分類されます。
cleanoutsをコミット
トランザクションの変更プロセス中に、いくつかのレコードが収集されます。 トランザクションがコミットされた後、部分的に収集されたレコードは、コミットされたSCNに基づいてバックフィルされる。 コミッションの速度を確保するために、現在のレコード数とシステムの負荷容量に基づいて少数のレコードのみがバックフィルされ、結果が迅速にコミットされて顧客に返されます。
遅延クリーンアウト
照会プロセスでは、システムは、UBAに基づいてトランザクションスロットをチェックし、トランザクションステータスおよびバージョン番号を決定する。 トランザクションがコミットされている場合、システムは行レコードの消去を支援しようとします。これは遅延消去と呼ばれます。 次に、次のクエリでは、システムは、トランザクションスロットをクエリする必要なしに、可視性を決定するために行レコード内のSCNを直接クエリすることができる。
トランザクションスロットの再利用
トランザクションスロットを無期限に拡張することはできないため、スペースの肥大化を回避するために再利用ソリューションが採用されます。 トランザクションスロットはフリーリストに保存され続けます。 トランザクションスロット割り当ての間、フリーリスト内のトランザクションスロットは、再使用のために優先順位付けされる。
スロットを取得するためにフリーリストに頻繁にアクセスする場合、システムは複数のデータページにアクセスする必要があり、これは膨大なオーバーヘッドをもたらす。 複数のデータページへのアクセスを回避するために、システムは、トランザクションスロットページをキャッシュテーブルに追加し、次いで、キャッシュテーブルから所望のスロットを直接取得する。 これにより、複数のデータページの読み取りによるオーバーヘッドが大幅に削減されます。
SCNトランザクションシステムのパフォーマンス
クリーンアウトにはいくつかの欠点がありますが、クエリプロセス中に使用されますが、ホットスポット競合中には使用されません。 テスト結果は、SCNトランザクションシステムが従来のInnoDBトランザクションシステムよりも高いスループットを持っていることを示しています。
QPS | TPS | 95% レイテンシ (ms) | |
トカゲ | 636086.81 | 31804.34 | 16.07 |
MySQL-8032 | 487578.78 | 24378.94 | 34.33 |
MySQL-8018 | 311399.84 | 15577.15 | 41.23 |
注: データテスト環境はIntel 8269CY 104Cで、データ量は16百万で、読み書きの同時実行性は512です。
MySQL-8032と比較して、Lizard SCNは30% のパフォーマンス改善と53% のレイテンシ削減を提供します。