はじめに
TiDB v8.5.0 がリリースされました ㊗️
本記事では、v8.5.0 のアップデートのうち、主な機能と思うものについて解説していきます。詳細はリリースノートを参照ください。
なお、v8.5.0 はTiUP Playgroundで試すことができます。
tiup playground v8.5.0
パフォーマンス
高負荷環境下でのTiDBの性能向上機能が実装されています。下記が代表的なものです。
TSO取得の並列処理化
従来はTSO取得をバッチで行っていたもの。これをバッチ待ち時間を半分に、そのかわりリクエストを2並列で実施するようにしたもの(4並列のモードもあり)
MVCCのインメモリエンジン
MVCCは更新履歴を保持してトランザクションの独立性を保つのに利用されている。定期的なGC処理により不要となった履歴は削除されているが、高負荷環境下では履歴が大量に蓄積し、最新の情報を取得するパフォーマンスが劣化していた。
インメモリエンジンはこの最新履歴をメモリに保持するようにしたもの。
PDの負荷分散(リージョン情報取得処理をフォロワーに分散)
PDではTiKVリージョン情報を管理しているため、TiDBが処理を行う際にリージョン情報取得のAPI呼び出しが発生する。高負荷状態ではPDリーダーの負荷が高くなってしまい、TSOの取得などの重要な処理に影響が出ていた。この機能はリージョン情報取得処理をPDフォロワーに分散させる。
グローバルインデックス
TiDB(MySQL)のパーティションは、パーティションキーはユニークインデックス(PK含む)の一部でなければなりませんでした。グローバルインデックスは、この制約を外すものです。
下記リンクの設計ドキュメントがわかりやすいと思います。パーティションテーブルで、インデックスもパーティションで分割される(ローカルインデックス)場合、パーティション内でのみ一意性を保つため、異なるパーティション間で重複が発生する可能性があります。
その他
プロジェクション(SELECTで出力列を指定)のプッシュダウンや、必要な列のみの統計情報を取得するような機能が追加されています。
安定性
PDのマイクロサービス化
PDの機能を分割し、TSOやスケジューリングを複数のPDで分担できるようにしたものです。
リソースコントロールの機能強化
リソースコントロールによるRunaway Query(実行時間が長いためキャンセルさせるクエリ)判定条件の追加や、バックグラウンドジョブのリソース制限機能などが追加されました。
TiProxy
TiProxyのスケジューリングアルゴリズムの種類が増え、負荷に応じたロードバランス機能が追加されました。また、トラフィックをキャプチャして別のTiProxyに送るトラフィックキャプチャ機能が実装されています。
SQL
FKのGA化
今までベータだったんですね・・・
ベクター型のサポート
TiDB Cloud Serverlessで利用できていたベクター型が、ついにTiDBでも利用可能になりました。
その他
TiDB/TiKVのCPU使用率がinformation_schemaから取得できるようになったり、バックアップデータをクライアント側で暗号化できるようになりました。
廃止/Deprecatedされた機能
TiDB Binlog
MySQLのBinlogのTiDB版ですが、deprecatedを経てついに廃止されました。
おわりに
TiDB v8.5.0 の特徴はユーザーフィードバックを元に強化されたパフォーマンス機能ということができると思います。TiDB Cloudで利用できるようになるのは少し先ですが、TiUPでぜひ試してみてください。