TiDB 5.3が一般公開されました。TiDB 5.3ではリアルタイムHTAP(Hybrid Transactional and Analytical Processing)機能とシステム全体の安定性が大幅に向上し、データマイグレーション、高可用性、利便性も改善されています。
この投稿で取り上げるのはTiDB 5.3の機能の一部です。機能と改善内容の詳細については、TiDB 5.3リリースノートをご覧ください。
TiDB 5.3の特長
- オンライントランザクション処理(OLTP)のスケーラビリティ向上:Timestamp Oracleサービス(TSO)割り当ての最適化によって実現されています。それによってトランザクションのレイテンシが低減し、Placement Driver(PD)サービスのスケーラビリティが向上しています。
- HTAPの効率性向上と高速化:TiFlashの改善により、TiDBが高トラフィックのイベントをさらに効率的に処理できるようになりました。
- データマイグレーションの効率化と高速化:TiDB Data Migration(DM)とTiDB Lightningの改善によります。
- 大規模な運用がさらに容易に:
- 継続的プロファイリングの実験的サポートにより、開発者はフレームグラフを通じてパフォーマンス異常を詳細に調査できます。
- ローカルまたはグローバルな一時テーブルを作成することで、ビジネスロジックの簡素化と運用コストの削減が可能になっています。
Timestamp Oracleの強化によってOLTPのスケーラビリティが向上
Placement Driver(PD)コンポーネントが管理するTimestamp Oracle(TSO)サービスによって、分散トランザクションを実装する、TiDBのための一意のグローバルなタイムスタンプが生成されます。クラスタが拡大するとともに、タイムスタンプの処理は、分散データベースシステムのスケーラビリティに対するボトルネックになる可能性があります。
TSOサービスがタイムスタンプを低レイテンシで割り当てられるように、TiDB 5.3では2つの設定アイテムが用意されています。
- tidb_enable_tso_follower_proxyによって、Follower Proxyを有効にするかどうかを指定します。この値をOnに設定すると、FollowerノードがTSOリクエストをバッチ転送します。
- tidb_tso_client_batch_max_wait_timeによって、TSOリクエストのバッチ処理におけるPDクライアントの最長待機時間を管理します。この値はリモートプロシージャコール(RPC)のオーバーヘッドに応じて調整できます。
これらの新しいアイテムは、次の場合に特に有益です。
- データ量が100 TBを超えるか、1秒あたりのクエリ数(QPS)が100万を超える、大規模なクラスタを管理している場合
- ビジネスの急激な拡大とデータ量の急増に対応するため、無制限のスケーラビリティを必要とする中規模のクラスタを管理している場合
これらの機能をsysbenchによってテストした結果、512のスレッドで、最適化後にクラスタ全体でQPSのスループットが倍増したことがわかりました。
大規模なトランザクション処理と分析処理
TiDB 5.3では、TiFlashのパフォーマンスと安定性がさらに最適化されています。非常に高度なデータスループットと並行処理により、金融業界とロジスティクス業界のHTAPシナリオで、読み書きの全体的なパフォーマンスが50%~100%向上します。CPUとメモリ消費も大幅に低減しています。これは、eコマースプラットフォームのセール期間など、莫大なデータを最新に維持することが厳格に求められる、ビッグデータ関連のシナリオでは特に重要です。
TiFlashには次のような効果があります。
- 列指向ストレージエンジンを強化し、クラスタリソースの使用量のバランスをとることで、書き込み増大が軽減され、クエリエラーが減少します。
- 基盤にあるファイル構造とI/Oモデルを調整
- 別のノードにあるコピーとファイルブロックにアクセスするプランを最適化
- 超並列処理(MPP)エンジンを強化し、データの取得を高速にします。
- より多くの関数と演算子をMPPエンジンにプッシュ
- 多数のトランザクションをストレージレイヤに書き込むか更新する場合に、プロセスがタイムアウトする可能性があったものを修正
- アラートメッセージの可読性が向上
- リソースの隔離性向上により、ノード数200超のクラスタに対応します。
- 運用コストとメンテナンスコストを削減します。
- ハードウェア障害に起因するデータ破損を処理するためのデータチェックが改善
- ノードの再起動に関連する問題を修復
- アラートメッセージとロギングのパフォーマンスが向上
データマイグレーションが簡単かつ迅速に
TiDB Data Migration(DM)により、MySQL互換のデータベースからTiDBへのデータマイグレーションが効率化されます。TiDBをダウンストリームの読み取り専用セカンダリデータベースとして使用して、集中的なフロントエンドクエリを処理できます。この方法によって、アプリケーションに対する影響が軽減されます。効率的なデータ複製を通じてトランザクションが確実に処理されることで、企業はデータからリアルタイムのビジネスインサイトを引き出すことが可能になります。
低レイテンシを実現するために、DMはTiDB 5.3で次のような最適化を行っています。
- 単一行の複数の更新を1つのステートメントに圧縮
- 複数行の一括更新を1つのステートメントに統合
TiDBをセカンダリデータベースとして使用することで、DMは過大なワークロードに対しても良好に機能します。現実的なテストケースによれば、DMがおよそ300,000 QPSを複製した結果、99%の期間で複製のレイテンシが1秒未満まで短縮されました。
データの同時インポート
TiDB Lightningは、大量のデータ全体をTiDBクラスタに迅速にインポートできるツールです。大量のデータのインポートが可能ですが、データ量が何十テラバイトにもなると、遅延が発生することもあります。
TiDB 5.3では、TiDB Lightningによってデータの同時インポートがサポートされているため、最大100 TBのデータをインポートできる十分な能力が確保されます。
CSVやSQLテキストデータ、さらにMySQL共有テーブルからエクスポートされたデータまで、さまざまなデータソースに対応しています。
テスト結果によれば、単一のテーブルとして効率的にインポートされる最大データ量は20 TB~30 TBです。ただし、複数のテーブルからインポートできる合計データ量に上限はありません。
内部のテストデータに基づくベストプラクティスを示します。
- 単一テーブルに対して1~8個のTiDB Lightningインスタンスをデプロイすることで、全体的なパフォーマンスが確保されます。
- TiDB Lightningインスタンスごとに2~5 TBのデータをインポートします。このデータ量は、ハードウェア、特にディスク容量に応じて調整できます。
テスト結果によれば、8時間以内に合計20 TBのMySQL共有テーブルをTiDBにインポートできることがわかっています。1つのTiDB Lightningインスタンスで、最大250 GB/時間のデータをインポートできますが、これは以前のバージョンに比べて8倍の速度です。
大規模な運用が簡単に
見やすいパフォーマンス分析
複雑な分散システムでは、開発者はパフォーマンスのボトルネックを頻繁に調査して、問題の根本原因をすばやく特定する必要があります。プロファイリングを行うことで、長期にわたるアプリケーションのパフォーマンスを把握して問題を特定し、ユーザーエクスペリエンスとシステムの安定性を最適化し、運用コストを削減することができます。
継続的プロファイリングは、パフォーマンスをほとんど損なうことなく、データベースの実行状態のスナップショットを作成できる高度な手法です。データベースのCTスキャンであるとも言えます。
継続的プロファイリングにより、開発者はより密接で詳細な分析結果が得られます。この結果には履歴データと最新データの両方が反映されます。次の図に示すように、分析結果はTiDB Dashboardにフレームグラフとして表示されます。
TiDBの継続的プロファイリングには次のような効果があります。
- データベースに予期しない障害が発生した場合の、障害診断の時間を50%以上短縮
- 日常のクラスタ検査とパフォーマンス分析によって潜在的リスクを特定し、クラスタの安定性を確保
- スキルレベルを問わずに、パフォーマンスのボトルネックを直感的に特定し、障害診断を行うことが可能
一時テーブルによってメンテナンスが容易
TiDB 5.3では、一時的な中間データを管理するための一時テーブルも導入されています。一時テーブルは、データの一部を一定時間保存するものです。テーブルの作成と削除を繰り返す代わりに、DBAでは中間データを一時的に保存し、一時テーブルに対してクエリを行えるため、不要なテーブルの管理に伴うオーバーヘッドが低減します。セッションが終了すると、対応する一時テーブルの消去とリサイクルが自動的に行われます。
TiDB一時テーブルを使用することで、ビジネスロジックが簡素化されます。たとえば次のことが可能になります。
- アプリケーションの一時データのキャッシュ。計算が完了すると、データが通常のテーブルにダンプされ、一時テーブルは自動的に解放されます。
- 同じ一時データに対して短時間に複数のデータ操作言語(DML)による操作を実行できます。
- 中間一時データのインポートと更新を一括で実行できます。
一時テーブルはCREATE [GLOBAL] TEMPORARY TABLEステートメントによって作成できます。1つの一時テーブルの最大サイズはtidb_tmp_table_max_size変数によって指定します。
TiDB 5.3では、ローカルの一時テーブルとグローバルな一時テーブルを使用できます。
- ローカル一時テーブル
- ローカル一時テーブルは現行のセッションでのみ見ることができ、テーブル定義は一時的なものです。
- 異なるセッションで同じ名前のローカル一時テーブルを作成できます。
- ローカル一時テーブルのデータは、セッション内のすべてのトランザクションから見ることができます。セッションが終了すると、ローカル一時テーブルは自動的にドロップされます。
- グローバル一時テーブル
- グローバル一時テーブルはすべてのセッションで見ることができ、テーブル定義は持続的に使用されます。
- グローバル一時テーブルのデータは現行のセッションでのみ見ることができます。トランザクションが終了すると、データは自動的に消去されます。
まとめ
TiDB 5.3ではシステムの監視機能が強化され、分散データベースのスケーラビリティが拡張されています。またデータ複製の低レイテンシが確保され、完全なデータインポートの効率性を大幅に向上させる効果があり、リアルタイム分析の安定性が最適化されます。今回のリリースにより、TiDBはエンタープライズレベルのHTAPデータベースの基準となるべく、大きな進化を遂げました。
PingCAPのChief ArchitectであるTang Liuは、次のように述べています。「HTAPデータベースが目指すのは、従来型のデータベースの革新でもなければ、トランザクションや分析機能の進化でもありません。TiDBの最終目的は、データサービスの利用をサポートするオープンなエコシステムを構築し、データ管理をリアルタイムに統合することにあります。ユーザーが革新的かつ実用的なインサイトを得て、デジタルトランスフォーメーションを達成することを支援したいのです」
TiDB 5.3は、協力者とユーザーのコミットメントとサポートがなければ実現しませんでした。ご協力いただいた皆様に感謝します。フィードバックの一つ一つが、TiDBの安定性とアクセス性を向上させる力になりました。当社はTiDBが今後も発展を続け、多くの人の役に立つ基本的ソフトウェアになっていくことを確信しています。
TiDBをお試しください
これまでTiDBについてご存知なかった皆様も、TiDB 5.3をダウンロードしてお試しいただくことができます。詳細については、こちらのドキュメントとケーススタディをご覧ください。
以前のバージョンのTiDBを使用していて、5.3をお試しになりたい場合は、TiUPを使用したTiDBのアップグレードをお読みください。
また、Slackコミュニティへの参加を歓迎いたします。ぜひご意見をお寄せください。
PingCAPについて
PingCAPは、エンタープライズ向けのソフトウェアサービスプロバイダーとして2015年に設立され、オープンソースでクラウドネイティブなワンストップのデータベースソリューションを提供することにコミットしています。PingCAPの社名は、ネットワークの疎通を確認するために使用されるコマンド「Ping」とCAP定理の「CAP」の2つの単語を組み合わせています。3つのうち2つを選ばなければならないとされるCAP定理のC (Consistency – 一貫性)、A (Availability – 可用性)、P (Partition Tolerance – ネットワーク分断への耐性) ですが、この3つの全てに接続したい (Ping) という思いが込められています。PingCAPの詳細については https://pingcap.co.jp をご覧ください。
本件に関するお問合わせ先
PingCAP株式会社 広報部
Email:pingcapjp@pingcap.com