TiDB 8.5.4 リリースノート
発売日:2025年11月27日
TiDBバージョン:8.5.4
特徴
特定のテーブルのデータの再配布をサポート (実験的) #63260 @bufferflies
PDは、クラスタ内のすべてのTiKVノードにデータが可能な限り均等に分散されるように自動的にスケジュールします。ただし、この自動スケジュールはクラスタ全体を対象としています。場合によっては、クラスタ全体のデータ分散がバランスが取れていても、特定のテーブルのデータがTiKVノード間で不均等に分散される可能性があります。
バージョン8.5.4以降では、
SHOW TABLE DISTRIBUTIONステートメントを使用して、特定のテーブルのデータがすべてのTiKVノードにどのように分散されているかを確認できます。データの分散が不均衡な場合は、DISTRIBUTE TABLEステートメントを使用してテーブルのデータを再分散(実験的)し、負荷分散を改善できます。特定のテーブルのデータの再分配は、タイムアウト制限のある1回限りのタスクであることに注意してください。分配タスクがタイムアウト時間内に完了しない場合、自動的に終了します。
詳細については、 ドキュメントを参照してください。
DDL ステートメントに埋め込まれた
ANALYZEをサポート #57948 @terry1purcell @AilinKidこの機能は、以下の種類のDDLステートメントに適用されます。
- 新しいインデックスを作成するDDLステートメント:
ADD INDEX - 既存のインデックスを再編成するDDLステートメント:
MODIFY COLUMNおよびCHANGE COLUMN
この機能を有効にすると、TiDB は新規または再編成されたインデックスがユーザーに表示される前に
ANALYZE(統計情報収集) 操作を自動的に実行します。これにより、インデックスの作成または再編成後に一時的に利用できなくなる統計情報によって、オプティマイザの推定値が不正確になったり、実行計画が変更されたりするのを防ぎます。詳細については、 ドキュメントを参照してください。
- 新しいインデックスを作成するDDLステートメント:
パーティションテーブルの一意でない列に対するグローバルインデックスの作成をサポート #58650 @Defined2014 @mjonss
バージョン8.3.0以降、TiDBではパーティションテーブルの一意列にグローバルインデックスを作成してクエリパフォーマンスを向上させることができます。ただし、一意でない列へのグローバルインデックスの作成はサポートされていませんでした。バージョン8.5.4以降、TiDBはこの制限を撤廃し、パーティションテーブルの一意でない列にもグローバルインデックスを作成できるようにすることで、グローバルインデックスの使いやすさを向上させています。
詳細については、 ドキュメントを参照してください。
TiFlashの正常なシャットダウンをサポート #10266 @gengliqi
TiFlashサーバーをシャットダウンする際、 TiFlashは現在実行中のMPPタスクを構成可能なタイムアウト時間だけ継続させ、新しいMPPタスク要求を拒否するようになりました。デフォルトのタイムアウト時間は600秒で、
flash.graceful_wait_shutdown_timeout設定項目を使用して調整できます。- 実行中のすべてのMPPタスクがタイムアウト期間内に終了した場合、 TiFlashは直ちにシャットダウンします。
- タイムアウト期間が経過しても未完了のMPPタスクが残っている場合、 TiFlashは強制的にシャットダウンします。
詳細については、 ドキュメントを参照してください。
パフォーマンス、拡張性、安定性を向上させるための新しいTiCDCアーキテクチャオプションを導入 #442 @CharlesCheung96
この新しいアーキテクチャは従来のTiCDCアーキテクチャアーキテクチャの構成、使用法、API との互換性を維持しながら、TiCDC コア コンポーネントを再設計し、そのデータ処理ワークフローを最適化します。
この新しいアーキテクチャを使用するように構成すると、TiCDC はほぼ線形のスケーラビリティを実現し、より低いリソース消費で数百万のテーブルを複製できます。また、変更フィードのレイテンシーを削減し、書き込みワークロードが高いシナリオ、頻繁な DDL 操作、クラスタのスケーリングにおいて、より安定したパフォーマンスを提供します。なお、この新しいアーキテクチャには現在、いくつか初期の制約があります。
新しいアーキテクチャを使用するには、TiCDC 構成項目
newarchtrueに設定します。詳細については、 ドキュメントを参照してください。
互換性の変更
新規作成されたv8.5.3クラスタは、v8.5.4へスムーズにアップグレードできます。ただし、v8.5.4では、システム変数と構成パラメータのデフォルト値の変更や動作調整がいくつか導入されています。アップグレード前に、以下の点にご注意ください。
- ほとんどの変更は、通常のアップグレードであれば安全です。ただし、クラスターにTiFlashやTiKVの圧縮構成のカスタマイズなど、パフォーマンスチューニングが施されている場合は、このセクションをよくお読みください。
- バージョン8.5.4では、一部の従来のTiKV設定項目が非推奨となり、使用が推奨されなくなりました。代替として、このセクションで説明する新しいTiKV設定グループを使用することをお勧めします。
システム変数
コンフィグレーションパラメータ
MySQLとの互換性
バージョン 8.5.4 以降、TiDB はDECIMAL列にデータを挿入する際の動作を MySQL と同期させました。小数点以下の桁数が列の定義済みスケールを超える場合、TiDB は余分な桁を自動的に切り捨て、切り捨てられたデータを正常に挿入します。小数点以下の桁数に関係なく、切り捨てられたデータは挿入されます。以前の TiDB バージョンでは、挿入されるDECIMAL値の小数点以下の桁数が 72 を超えると、挿入は失敗し、エラーが返されました。詳細については、 JDBCを使用してTiDBに接続する
改善点
TiDB
semi_join_rewriteサブクエリのセミテーブル結合にINヒントを適用することをサポートする #58829 @qw4990tidb_opt_ordering_index_selectivity_ratioシステム変数が有効になったときに推定戦略を最適化する #62817 @terry1purcell- オプティマイザの選択ロジックを調整して、特定のシナリオで新しく作成されたインデックスが選択される可能性が高くなるようにする #57948 @terry1purcell
- 一意の値の数が少ない列(NDV)のクエリ推定ロジックを最適化する #61792 @terry1purcell
LIMIT OFFSETを含む Index Join クエリの推定戦略を最適化する #45077 @qw4990- 統計情報が時間内に収集されない場合の範囲外推定戦略を最適化する #58068 @terry1purcell
- Grafana のパフォーマンス概要> SQL 実行時間概要パネルに
backoffメトリックを追加してデバッグを容易にします #61441 @dbsid - 監査ログ プラグインにステートメント ID 情報を追加 #63525 @YangKeao
ティクヴ
- BRモジュール内の特定の自動回復可能なエラーのログレベルを
ERRORからWARNに変更して、不要なアラートを削減します #18493 @YuJuncen - 不要なアラートを減らすため、特定の TiKV エラーのログレベルを
ERRORからWARNに変更します #18745 @exit-code-1 - RaftモジュールのGCチェックプロセスを2つのフェーズに分割し、リージョン内の冗長なMVCCバージョンのガベージコレクションの効率を向上させる #18695 @v01dstar
- GCセーフポイントとRocksDB統計に基づいてMVCC冗長性を計算し、圧縮の効率と精度を向上させる #18697 @v01dstar
- リージョン MVCC の GC 処理ロジックを GC ワーカー スレッドで実行するように変更し、GC 処理ロジック全体を統一します #18727 @v01dstar
- デフォルトのgRPCスレッドプールサイズの計算方法を最適化し、固定値ではなくCPUクォータの合計に基づいて動的に計算するようにすることで、gRPCスレッド不足によるパフォーマンスボトルネックを回避します #18613 @LykxSassinator
- 多数のSSTファイルが存在する環境における非同期スナップショットおよび書き込み操作のテールレイテンシーを最適化する #18743 @Connor1996
- BRモジュール内の特定の自動回復可能なエラーのログレベルを
PD
- 不要なエラーログを削減 #9370 @bufferflies
- Golangのバージョンを1.23.0から1.23.12にアップグレードし、関連する依存関係を更新します #9788 @JmPotato
- テーブルレベルでの散布領域をサポートして、
scatter-roleとengineの次元全体にバランスの取れた分布を実現します #8986 @bufferflies
TiFlash
TableScanパフォーマンスを向上させるために不要なデータ読み取りをスキップします #9875 @gengliqi- TiFlash #10361 10361 @ジェイソン・ファンで、多くの列とスパース データ (つまり、大量の
TableScan} または空の値) を含む広いテーブルでの {NULLパフォーマンスを最適ジェイソン・ファンます。 - 多数のテーブルを持つクラスターにベクトル インデックスを追加することによって生じるTiFlash CPU オーバーヘッドを削減 #10357 @Lloyd-Pottiger
- 無駄なRaftコマンド処理時の不要なログ出力を最小限にしてログ容量を削減 #10467 @JaySon-Huang
- TiFlashの小さなパーティション分割テーブルでの
TableScanパフォーマンスを向上 #10487 @JaySon-Huang
ツール
TiDBデータ移行(DM)
- 上流の
GTID_MODEを取得する際に、大文字小文字を区別しないマッチングをサポートする #12167 @OliverS929
- 上流の
バグ修正
TiDB
use indexがtidb_isolation_read_enginesに設定されている場合、tiflashヒントが #60869 @Lloyd-Pottigermax_execution_timeがSELECT FOR UPDATEステートメントに適用されない問題を修正 #62960 @ekexium- 月や年をまたいだ行数の推定値が大幅に過大評価される問題を修正 #50080 @terry1purcell
- プリペアドステートメントにおける
Decimalタイプの処理が MySQL と矛盾する問題を修正 #62602 @ChangRui-Ryan TRUNCATE()関数内の短いパスが正しく処理されない問題を修正しました #57608 @xzhangxian1008Out Of Quota For Local Temporary Spaceエラーが発生した際に、スピルしたファイルが完全に削除されない可能性がある問題を修正しました #63216 @xzhangxian1008INFORMATION_SCHEMAテーブルに対して正規表現を使用したクエリが誤った結果を返す可能性がある問題を修正しました #62347 @River2000i- TiDBがPDからタイムスタンプを取得できなかった場合にエラーを返さない問題を修正します #58871 @joechenrh
MODIFY COLUMNステートメントの実行中に、所有者 TiDB インスタンスと非所有者 TiDB インスタンス間でクエリ結果が異なる問題を修正します #60264 @tangentaADMIN ALTER DDL JOBSステートメントでパラメータを動的に変更した後に誤ったパラメータ値が表示される問題を修正します #63201 @fzzf678- トランザクション内でインデックスを追加する際にGCセーフポイントが進まない問題を修正 #62424 @wjhuang2016
- 過度に大きな SST ファイルを L0 に取り込むとフロー制御がトリガーされる問題を修正 #63466 @CbcWestwolf
- CPUとメモリの比率が1:2の場合にグローバルソートがブロックされる問題を修正 #60951 @wjhuang2016
- タスク数が16を超えると、保留中の分散実行フレームワーク(DXF)タスクをキャンセルできない問題を修正しました #63896 @D3Hunter
- DXFタスクがキャンセルされた後、他のタスクが終了しない問題を修正します #63927 @D3Hunter
Apply演算子の同時実行(tidb_enable_parallel_apply = on)を有効にすると、クローン実装が欠落しているためにプラン生成が失敗する問題を修正しました #59863 @hawkingreiATAN2関数を使用すると誤った結果が生じる可能性がある問題を修正しました #60093 @guo-shaogeselect 1 from dualがインスタンスレベルのプランキャッシュを使用できない問題を修正 #63075 @time-and-fate- 参加順序を変更するとプランナーが失敗する可能性がある問題を修正 #61715 @hawkingrei
set_varヒントをバインディングで使用すると、変数が元の設定に戻らない問題を修正します #59822 @wddevriesONLY_FULL_GROUP_BY負の値に設定すると検証が失敗する問題を修正 #62617 @AilinKidONLY_FULL_GROUP_BYチェックで大文字と小文字が区別されない問題を修正 #62672 @AilinKid- DP結合順序アルゴリズムが誤ったプランを生成する可能性がある問題を修正 #63353 @winoros
- 外部結合を内部結合に書き換えると誤った結果が生じる可能性がある問題を修正 #61327 @hawkingrei
- 特定のクエリを実行すると内部panicが発生する可能性がある問題を修正 #58600 @Defined2014
- グローバルインデックスが特定の
ALTER PARTITION操作中に誤ったデータを読み取る可能性がある問題を修正 #64084 @mjonss - 場合によってはグローバルインデックスが誤った結果を返す可能性がある問題を修正 #61083 @Defined2014
character_set_resultsが誤った文字を置き換えるのではなく切り捨ててしまう問題を修正 #61085 @xheboxADD COLUMNとUPDATEステートメントを同時に実行するとエラーが発生する可能性がある問題を修正しました #60047 @L-maple- マージ結合時にコスト計算時にフィルタ条件が省略される可能性がある問題を修正 #62917 @qw4990
PD
- PDクライアントの再試行戦略が正しく初期化されない問題を修正 #9013 @rleungx
- TSO HTTP API
/configおよび/membersが誤った結果を返す問題を修正します #9797 @lhy1024 - TSOFollowerプロキシの誤ったエラー処理ロジックを修正 #9188 @Tema
- バケットのレポートが無効になった後でもバケットの分割が機能する問題を修正 #9726 @bufferflies
- リソースマネージャがトークンを誤って割り当て、クエリが停止する問題を修正しました #9455 @JmPotato
- PDリーダーが交代した後、配置ルールが有効にならない問題を修正 #9602 okJiang
- PDが科学表記の大きな数値を解析できない場合があり、その結果、一部のTTL関連の設定が有効にならない問題を修正します。 #9343 @lhy1024
TiFlash
- クエリ対象の列に多数の
NULL値が含まれている場合にクエリが失敗する可能性がある問題を修正 #10340 @Lloyd-Pottiger - TiFlashがRU消費量の統計情報を水増しして生成する問題を修正 #10380 @JinheLin
- 分離されたstorageとコンピューティングアーキテクチャの下で低速クエリが存在する場合にTiFlash でOOM が発生する可能性がある問題を修正 #10278 @JaySon-Huang
- 分散storageおよびコンピューティングアーキテクチャ下でTiFlashと S3 の間でネットワーク分割が発生した場合、 TiFlash が無期限に再試行する可能性がある問題を修正 #10424 @JaySon-Huang
FLOOR()関数とCEIL()関数のパラメータDECIMAL型の場合、誤った結果を返すことがある問題を修正 #10365 @ChangRui-Ryan
- クエリ対象の列に多数の
ツール
バックアップと復元 (BR)
- ログ バックアップの zstd 圧縮が有効にならず、出力が圧縮されないままになる問題を修正 #18836 @3pointer
- Azure Blob Storageへのデータバックアップ時にフラッシュ操作が時々遅くなる問題を修正 #18410 @YuJuncen
- ファイル削除が失敗した場合に
log truncateが発生する可能性がある問題を修正 #63358 @YuJuncen - バックアップ中に
--checksumをfalseに設定すると、リストア後にcountテーブルのmysql.stats_meta列が0になる可能性がある問題を修正 #60978 @Leavrth - S3互換storageサービスの帯域幅制限が有効になっている場合に、 BRがこれらのサービスからデータを復元できない可能性を低減する #18846 @kennytm
log backup observerリージョン上の観測を失う可能性があり、ログバックアップの進行が進まなくなる問題を修正しました #18243 @Leavrth- バックアップされたテーブルに特定の特殊スキーマが含まれている場合に
restore point作成が失敗する問題を修正します #63663 @RidRisR
TiCDC
- 仮想列を含む列型パーティションディスパッチャを構成する際に発生する可能性のあるpanicを修正します #12241 @wk989898
- DDLプーラーを閉じるときに発生する可能性のあるpanicを修正しました #12244 @wk989898
ignore-txn-start-ts設定のfilterパラメーターを使用して、サポートされていない DDL タイプをフィルタリングする機能をサポートする #12286 @asddongmen- Azure Blob Storage をダウンストリームとして使用している場合、changefeed タスクが停止する可能性がある問題を修正します #12277 @zurakutsia
DROP FOREIGN KEYDDL がダウンストリームにレプリケートされない問題を修正 #12328 @3AceShowHand- リージョンサブスクリプション中にロールバックと事前書き込みエントリが発生したときに TiCDC がpanicになる可能性がある問題を修正 #19048 @3AceShowHand
- TiKV のアサーション エラーが TiCDC をpanic可能性がある問題を修正 #18498 @tharanga