TiDB 8.5.6 リリースノート
発売日:2026年4月14日
TiDBバージョン:8.5.6
特徴
パフォーマンス
外部キー チェックで共有ロックがサポートされるようになりました #66154 @you06
悲観的トランザクションでは、外部キー制約を持つ子テーブルで
INSERTまたはUPDATEを実行すると、外部キーチェックによって、デフォルトで対応する親テーブルの行が排他ロックでロックされます。子テーブルへの書き込みが高頻度で行われるシナリオでは、多数のトランザクションが同じ親テーブルの行にアクセスすると、深刻なロック競合が発生する可能性があります。バージョン8.5.6以降では、
tidb_foreign_key_check_in_shared_lockシステム変数をONに設定することで、外部キーチェックで親テーブルの共有ロックを使用するように設定でき、ロック競合を減らし、子テーブルの同時書き込みパフォーマンスを向上させることができます。詳細については、 ドキュメントを参照してください。
安定性
リソース制御のバックグラウンドタスクにおけるリソース使用量の上限を設定する機能が一般提供開始(GA)になりました #56019 @glorv
TiDBのリソース制御機能を使用すると、バックグラウンドタスクを識別して優先度を下げることができます。特定のシナリオでは、リソースが利用可能な場合でも、バックグラウンドタスクのリソース消費を制限したい場合があります。v8.4.0以降では、
UTILIZATION_LIMITパラメータを使用して、バックグラウンドタスクが消費できるリソースの最大割合を設定できます。各ノードは、すべてのバックグラウンドタスクのリソース使用量をこの割合以下に抑えます。この機能により、バックグラウンドタスクのリソース消費を正確に制御できるため、クラスタの安定性がさらに向上します。バージョン8.5.6では、この機能は一般提供(GA)されています。
詳細については、 ドキュメントを参照してください。
可観測性
低速クエリログに対する多次元で詳細なトリガールールの定義をサポートする#62959 、 #64010 @zimulala
バージョン 8.5.6 より前では、TiDB でスロークエリを識別する主な方法は、
tidb_slow_log_thresholdシステム変数を設定することでした。このメカニズムはインスタンスレベルでグローバルに適用されるため、スロークエリログのトリガーを大まかにしか制御できず、セッションレベルや SQL レベルでのきめ細かい制御はサポートされていません。さらに、トリガー条件として実行時間 (Query_time) しかサポートしていないため、複雑なシナリオでスロークエリログをより正確にキャプチャするニーズを満たすことができません。バージョン 8.5.6 以降、TiDB
tidb_slow_log_rulesスロークエリログの制御を強化しました。tidb_slow_log_rules システム変数を使用して、Query_time、Digestなどの条件に基づいて、Mem_maxKV_totalおよび SQL レベルで多次元のスロークエリログ出力ルールを定義できます。tidb_slow_log_max_per_sectidb_slow_log_max_per_sec使用して、1 秒あたりに書き込まれるログエントリの数を制限したり、WRITE_SLOW_LOGヒントを使用して、特定の SQL ステートメントに対してスロークエリログを強制的に記録したりできます。これにより、スロークエリログをより柔軟かつきめ細かく制御できます。詳細については、 ドキュメントを参照してください。
TiDBダッシュボードのTop SQLページで、TiKVネットワークトラフィックと論理I/Oメトリックの収集と表示がサポートされるようになりました #62916 @yibin87
以前のバージョンでは、TiDB DashboardはCPU関連のメトリックのみに基づいてTop SQLクエリを特定していたため、複雑なシナリオにおいてネットワークやstorageへのアクセスに関連するパフォーマンスのボトルネックを特定することが困難でした。
バージョン8.5.6以降では、Top SQL設定でTiKVネットワークIO収集(多次元)を有効にして、TiKVノードの
Network BytesやLogical IO Bytesなどのメトリックを表示できます。また、By Query、By Table、By DBBy Region、複数の次元にわたってこれらのメトリックを分析することで、リソースのホットスポットをより包括的に特定できます。詳細については、 ドキュメントを参照してください。
SQL
列レベルの権限管理をサポート #61706 @CbcWestwolf @fzzf678
バージョン8.5.6より前のTiDBでは、権限制御はデータベースレベルとテーブルレベルの両方を対象としており、MySQLとは異なり、特定の列に対する権限の付与や取り消しはサポートされていませんでした。そのため、ユーザーがテーブル内の機密性の高い列の一部のみにアクセスできるように制限することはできませんでした。
バージョン8.5.6以降、TiDBは列レベルの権限管理をサポートしています。
GRANTおよびREVOKEステートメントを使用して、特定の列の権限を管理できます。TiDBは、クエリ処理および実行プラン構築時に列レベルの権限に基づいて権限チェックを実行するため、よりきめ細かなアクセス制御が可能になり、機密データの分離と最小権限の原則をより適切にサポートします。詳細については、 ドキュメントを参照してください。
FOR UPDATE OF句でのテーブル エイリアスの使用をサポート #63035 @cryo-zdv8.5.6 より前のバージョンでは、
SELECT ... FOR UPDATE OF <table>ステートメントがロック句でテーブルエイリアスを参照する場合、エイリアスが有効であっても、TiDB がエイリアスを正しく解決できず、table not existsエラーを返すことがありました。バージョン8.5.6以降、TiDBは
FOR UPDATE OF句でのテーブルエイリアスの使用をサポートするようになりました。TiDBはFROM句からのロック対象(エイリアス付きテーブルを含む)を正しく解決できるようになり、行ロックが期待どおりに有効になります。これにより、MySQLとの互換性が向上し、テーブルエイリアスを使用するクエリにおけるSELECT ... FOR UPDATE OFステートメントの安定性と信頼性が向上します。詳細については、 ドキュメントを参照してください。
データベース操作
Distributed eXecution Framework (DXF) タスクの最大ノード数の指定をサポート #58944 @tangenta@D3Hunter
バージョン8.5.6より前のTiDBでは、分散実行タスクで使用されるノード数を制限する機能がありません。DXFのリソース使用量を制御したい場合、TiDBには最大ノード数を制限するための専用オプションが用意されていません。
バージョン8.5.6以降、TiDBはDXFタスクで使用されるTiDBノードの最大数を指定するためのシステム変数
tidb_max_dist_task_nodesを導入し、より優れたリソース制御とワークロードベースのチューニングを可能にしました。詳細については、 ドキュメントを参照してください。
データ移行
互換性の変更
TiDBクラスタをv8.5.5で新規にデプロイした場合(つまり、v8.5.4より前のバージョンからアップグレードしていない場合)、v8.5.6へスムーズにアップグレードできます。v8.5.6の変更点のほとんどは通常のアップグレードでは問題ありませんが、このリリースにはMySQLとの互換性に関する変更、システム変数の更新、構成パラメータの更新、および非推奨機能も含まれています。アップグレードする前に、このセクションをよくお読みください。
MySQLとの互換性
- バージョン8.5.6以降、TiDBはMySQL互換の列レベルの権限管理メカニズムをサポートしています。テーブルレベルで特定の列に対して、
SELECT、INSERT、UPDATE、およびREFERENCESの権限または取り消すことができます。詳細については、 列レベルの権限管理参照してください。 - バージョン 8.5.6 以降、TiDB は
FOR UPDATE OF句でテーブル エイリアスの使用をサポートしています。下位互換性を維持するために、エイリアスが定義されている場合でもベース テーブル名を参照できますが、明示的なエイリアスの使用を推奨する警告が表示されます。詳細については、SELECT参照してください。 - バージョン8.5.6以降、 Dumplingは更新されたMySQLバイナリログの用語を採用することで、MySQL 8.4からのデータエクスポートをサポートしています。 #53082 @dveeden
- バージョン8.5.6以降、TiDB Data Migration (DM) は、このバージョンで導入された新しい用語とバージョン検出ロジックに対応することで、アップストリームデータソースとしてMySQL 8.4をサポートします。 #11020 @dveeden
システム変数
コンフィグレーションパラメータ
非推奨機能
- v8.5.6 以降、統計バージョン 1 (
tidb_analyze_version = 1) は非推奨となり、将来のリリースでは削除される予定です。より正確な統計を得るには、統計バージョン 2 (tidb_analyze_version = 2) および統計情報を使用する既存のオブジェクトをバージョン1からバージョン2に移行するお勧めします。 - バージョン8.5.6以降、 TiDB Lightning Webインターフェースは非推奨となり、バージョン8.5.7で削除されます。Web UIビルドはバージョン8.4.0以降、不具合が発生しています。代わりにCLIまたは
IMPORT INTOステートメントを使用してください。この変更がワークフローに影響する場合は、 #67697にコメントしてください。
改善点
TiDB
- インデックスプレフィックス列に対する
IN述語を含むクエリのプラン選択を改善します。TiDB はORDER BY ... LIMITクエリの順序を保持するためにマージソートを使用できるようになり、不要なスキャンを削減してパフォーマンスを向上させます。 #63449 #34882 @time-and-fate - 印刷不可能なプリペアドステートメント引数を16進数として出力することで、スロークエリログの可読性を向上させる #65383 @dveeden
cluster_idをmysql.tidbに追加し、外部ツールが 2 つの TiDB インスタンスが同じクラスターに属しているかどうかを判断できるようにします #59476 @YangKeao
- インデックスプレフィックス列に対する
ティクヴ
- MVCCの読み取りオーバーヘッドを検出し、読み取りコストの高いリージョンの圧縮を優先することでクエリパフォーマンスを向上させる、負荷ベースの圧縮メカニズムを導入します #19133 @mittalrishabh
- クラスタのスケールアウトおよびスケールイン操作中に、古いキーをSSTファイル取り込みでクリーンアップするのではなく直接削除することで、古いキーの範囲のクリーンアップロジックを最適化し、オンラインリクエストのレイテンシーへの影響を軽減します。 #18042 @LykxSassinator
- Top SQLの TiKV ネットワークトラフィックと論理 I/O メトリックの収集をサポートし、SQL パフォーマンスの問題をより正確に診断できるようにします #18815 @yibin87
PD
- 存在しないラベルを削除する際に、
404200} を返す #10089 @lhy1024 - 不要なエラーログを削減 #9370 @bufferflies
- 存在しないラベルを削除する際に、
ツール
TiDBデータ移行(DM)
- DMシンカーに外部キーの因果関係サポートを追加し、マルチワーカーシナリオにおける行変更の親から子への実行順序を保証する #12350 @OliverS929
バグ修正
TiDB
release-8.5-20250606-v8.5.2からアップストリームのrelease-8.5にアップグレードすると、PITR メタデータのアップグレードがスキップされ、PITR 操作が失敗する可能性がある問題を修正します #66994 @fzzf678EXCHANGE PARTITIONを実行した後、非クラスター化パーティションテーブルの非一意グローバルインデックスまたは null 許容一意グローバルインデックスが不整合になり、不完全な結果を返す可能性がある問題を修正しました #65289 @mjonssKILL QUERYがアイドル状態の接続を誤って終了する可能性がある問題を修正 #65447 @gengliqitidb_service_scopeの値が小文字に変換されない問題を修正 #66749 @D3Hunter- TiDBの再起動後にアフィニティテーブルが表示されない問題を修正 #66284 lcwangchao
- システムテーブルが統計キャッシュから除外されていないため、Stats Healthyメトリックが不正確に表示される問題を修正しました #64080 @0xPoe
modify_countの異常な更新により統計情報が更新されない可能性がある問題を修正しました #65426 @0xPoe- フェアロックモードで最初のステートメントがロックを取得する際に、キープアライブメカニズムの失敗により悲観的トランザクションが予期せずロールバックされる可能性がある問題を修正 #66571 @MyonKeminta
ティクヴ
- クロスビームスキップリストのメモリリーク問題を修正 #19285 @ekexium
- パーティションテーブルの一意でない列のグローバルインデックスが、場合によっては不整合になり、誤った結果を返す可能性がある問題を修正しました #19262 @mjonss
- コプロセッサのスナップショット取得が停止すると、リクエストの期限が切れるまで統合リードプールワーカーが占有され、他のリードリクエストが遅延する問題を修正しました #18491 @AndreMouche
- ディスクがいっぱいの TiKV ノードでフォロワーの読み取りがブロックされたままになる可能性がある問題を修正するため、ディスクがいっぱいのフォロワーで読み取りインデックス要求を拒否します #19201 @glorv
- resolved-tsワーカーがビジー状態のときに、 resolved-tsタスクのバックログによって OOM が発生する可能性がある問題を修正 #18359 @overvenus
- リーダー転送中にロングテールフォロワーの読み取りレイテンシーが発生する可能性がある問題を修正するため、読み取りインデックス要求をより早く再試行し、専用の再試行間隔設定を追加しました #18417 @gengliqi
- 悲観的トランザクションでプリライト要求を再試行する際に発生するまれなデータ不整合の問題を修正 #11187 @wk989898
PD
- マージリージョン演算子が多数存在するシナリオで
DISTRIBUTE TABLEを実行する際に発生する可能性のあるpanic問題を修正 #10293 @bufferflies - ストア制限の設定がすぐに反映されない場合がある問題を修正しました #10108 okJiang
- マージリージョン演算子が多数存在するシナリオで
TiFlash
- DDL ステートメントを実行して列 #10680 @JaySon-Huangの
NOT NULL制約を削除した後、 TiFlashと TiKV の間で潜在的なデータの不整合の問題を修正しました。 - Grafana ダッシュボードのRaftスループット メトリックに異常に大きな値が表示される問題を修正 #10701 @CalvinNeo
- ランタイムフィルターが有効で結合キーのデータ型が一致しない場合に結合結果が正しくなくなることがある問題を修正 #10699 @ChangRui-Ryan
- DDL ステートメントを実行して列 #10680 @JaySon-Huangの
ツール
バックアップと復元 (BR)
- ログバックアップで
flush_tsが0になる可能性がある問題を修正 #19406 @YuJuncen - Amazon S3互換APIを介してS3スタイルの認証情報を使用してGoogle Cloud Storageにアクセスする際、Content-Lengthヘッダーが欠落しているため、マルチパートアップロード中にBRが失敗する可能性がある問題を修正しました。 #19352 @Leavrth
- BR
restore pointwaiting for schema info finishes reloadingの状態に長時間留まり、15 分後にタイムアウトで失敗する問題を修正しました #66110 @kennytm SHARD_ROW_ID_BITS、PRE_SPLIT_REGIONSBRを持つテーブルを復元する際に、merge_option問題を修正します。 #65060 @JoyC-dev
- ログバックアップで
TiCDC
- サーバーの再起動後にchangefeedsが繰り返し無効なディスパッチャーを作成する可能性がある問題を修正 #4452 @wlwilliamx
- TiCDCが、上流のTiDBバージョンがv8.1.x以前の場合にテーブル名変更操作を正しく複製できない問題を修正します #4392 @lidezhu
- TiCDCが有効になっている場合に、データスキャン中にTiKVがクラッシュする可能性がある問題を修正しました #19404 @wk989898
- Azure Blob Storage の Azure Managed Identity 認証をサポートし、クラウドstorageへのアップロードが停止する可能性がある問題を修正します #3093 @wlwilliamx
TiDBデータ移行(DM)
- アップストリームのbinlogファイルのローテーション後にDMがグローバルチェックポイントの位置を進めない問題を修正 #12339 @OliverS929
- セーフモードで外部キー制約のあるテーブルの更新を処理する際に、主キーまたは一意キーが変更されていない場合でも、DM が誤って外部キーのカスケードをトリガーし、意図しないデータ削除を引き起こす可能性がある問題を修正します。 #12350 @OliverS929
- DMバリデーターが
UNSIGNED列を処理する際に誤って検証エラーを返す問題を修正しました #12178 @OliverS929