TiDB 8.1.0 リリースノート
リリース日:2024年5月24日
TiDB バージョン: 8.1.0
クイックアクセス: クイックスタート | 本番環境へのデプロイ
TiDB 8.1.0 は長期サポートリリース (LTS) です。
以前のLTSバージョン7.5.0と比較して、8.1.0にはバージョン7.6.0-DMRと8.0.0-DMRでリリースされた新機能、改善、バグ修正が含まれています。7.5.xから8.1.0にアップグレードする場合は、TiDB リリースノート PDFをダウンロードして、2つのLTSバージョン間のすべてのリリースノートをご覧いただけます。以下の表は、7.6.0から8.1.0への主な変更点です。
機能の詳細
信頼性
予想よりも多くのリソースを消費するクエリの管理をサポート (GA) #43691 @nolouch
突発的なSQLクエリパフォーマンスの問題は、データベース全体のパフォーマンス低下を引き起こす可能性があり、これはデータベースの安定性における最も一般的な課題です。これらの問題の原因は、テストされていない新しいSQL文、データ量の急激な変化、実行計画の突然の変更など、多岐にわたります。これらの問題を根本的に完全に回避することは困難です。TiDB v7.2.0では、予想以上にリソースを消費するクエリを管理し、突発的なクエリパフォーマンスの問題の影響を迅速に軽減する機能が導入されました。この機能はv8.1.0で一般提供が開始されます。
リソースグループ内のクエリの最大実行時間を設定できます。クエリの実行時間が設定値を超えると、クエリの優先度が自動的に下げられるか、クエリがキャンセルされます。また、問題のあるクエリの同時実行数が多すぎる場合、識別フェーズでの過剰なリソース消費を回避するために、テキストまたは実行計画を通じて、特定されたクエリに一致するクエリを一定期間内に即時に指定することもできます。
TiDBはクエリの手動マークもサポートしています。
QUERY WATCHコマンドを使用すると、SQLテキスト、SQLダイジェスト、または実行計画に基づいてクエリをマークできます。マークに一致するクエリはダウングレードまたはキャンセルされ、SQLブロックリストを追加する目的を達成できます。予想よりも多くのリソースを消費するクエリの自動管理機能により、根本原因が特定される前にクエリの問題が全体的なパフォーマンスに与える影響を迅速に軽減する効果的な手段がユーザーに提供され、データベースの安定性が向上します。
詳細についてはドキュメントを参照してください。
SQL
テーブルの作成時にデフォルトの列値を設定するためのより多くの式の使用をサポート (GA) #50936 @zimulala
バージョン8.0.0より前のバージョンでは、テーブル作成時の列のデフォルト値は文字列、数値、日付、および特定の式に制限されていました。バージョン8.0.0以降では、より多くの式をデフォルトの列値として使用できるようになります。例えば、列のデフォルト値を
DATE_FORMATに設定できます。この機能により、より多様な要件に対応できるようになります。バージョン8.1.0では、この機能がGAになります。v8.1.0 以降では、
ADD COLUMNで列を追加するときに、式をデフォルト値として使用できます。詳細についてはドキュメントを参照してください。
DB操作
デフォルトで TiDB 分散実行フレームワーク (DXF) を有効にして、
ADD INDEXまたはIMPORT INTOタスクの並列実行のパフォーマンスと安定性を向上させます。 #52441 @D3HunterDXFはv7.5.0で一般提供(GA)されますが、デフォルトでは無効になっています。つまり、
ADD INDEXまたはIMPORT INTOタスクは、デフォルトでは1つのTiDBノードによってのみ実行されます。TiDB v8.1.0以降、この機能はデフォルトで有効になっています(
tidb_enable_dist_taskのデフォルト値はONです)。この機能を有効にすると、DXFは複数のTiDBノードで同じADD INDEXまたはIMPORT INTOタスクを並列実行するようにスケジュールできます。これにより、TiDBクラスターのリソースを最大限に活用し、これらのタスクのパフォーマンスを大幅に向上させることができます。さらに、TiDBノードを追加し、追加したノードにtidb_service_scopeを設定することで、ADD INDEXおよびIMPORT INTOタスクのパフォーマンスを直線的に向上させることができます。詳細についてはドキュメントを参照してください。
セキュリティ
TiDB ログの秘匿化 (GA) を強化 #52364 @xhebox
強化された TiDB ログの秘匿化は、ログファイル内の SQL テキスト情報をマークすることで実装され、ユーザーがログを表示するときに機密データを削除することをサポートします。ログ情報をマークするかどうかを制御することで、さまざまなシナリオで TiDB ログを安全に使用でき、ログ秘匿化を使用する際のセキュリティと柔軟性が向上します。この機能を使用するには、システム変数
tidb_redact_logをMARKERに設定すると、TiDB のランタイムログ内の SQL テキストがマークされます。さらに、TiDBサーバーでcollect-logサブコマンドを使用して、マークされた機密データをログから削除し、ログを安全な方法で表示できます。すべてのマーカーを削除して通常のログを取得することもできます。この機能は、v8.1.0 で一般提供されました。詳細についてはドキュメントを参照してください。
データ移行
IMPORT INTO ... FROM SELECT構文(GA) をサポート #49883 @D3Hunterv8.0.0より前では、クエリ結果をターゲットテーブルにインポートするには
INSERT INTO ... SELECT文しか使用できませんでしたが、これは大規模データセットを扱うシナリオによっては比較的非効率的でした。v8.0.0では、TiDBは実験的機能としてIMPORT INTO ... FROM SELECTを導入し、SELECTのクエリ結果を空のTiDBターゲットテーブルにインポートできるようになりました。これにより、INSERT INTO ... SELECTの最大8倍のパフォーマンスを実現し、インポート時間を大幅に短縮できます。さらに、IMPORT INTO ... FROM SELECTを使用して、AS OF TIMESTAMPでクエリされた履歴データをインポートすることもできます。v8.1.0 では、
IMPORT INTO ... FROM SELECT構文が一般公開 (GA) され、IMPORT INTO文の機能シナリオが充実します。詳細についてはドキュメントを参照してください。
TiDB Lightningは競合解決戦略を簡素化し、
replace戦略(GA) を使用して競合するデータの処理をサポートします。 #51036 @lyzx2001v8.0.0 より前のTiDB Lightningには、論理インポートモードが1つのデータ競合解決戦略 、物理インポートモードが2つのデータ競合解決戦略があり、理解して構成するのは簡単ではありません。
TiDB Lightning v8.0.0では、物理インポートモードにおける競合検出の古いバージョン戦略が廃止され、
conflict.strategyパラメータ(実験的)を介して論理インポートモードと物理インポートモードの両方で競合検出戦略を制御できるようになり、このパラメータの設定が簡素化されました。さらに、物理インポートモードでは、replace戦略により、インポート時に主キーまたは一意キーの競合が検出された場合に、最新のデータを保持し、古いデータを上書きすることがサポートされます。v8.1.0では、replace戦略で競合データを処理する機能が一般提供(GA)されます。詳細についてはドキュメントを参照してください。
TiCDCはクライアント認証をサポートします #10636 @CharlesCheung96
v8.1.0では、TiCDC CLIまたはOpenAPIを使用する際に、TiCDCはクライアント認証をサポートします。この機能により、クライアント証明書を用いたクライアント認証を要求するようにTiCDCを設定でき、相互トランスポート層セキュリティ(mTLS)を確立できます。さらに、TiDBのユーザー名とパスワードに基づく認証も設定できます。
詳細についてはドキュメントを参照してください。
互換性の変更
動作の変更
- 以前のバージョンでは、 TiDB Lightningの
tidb.tls設定項目は、値"false"と""、および値"preferred"と"skip-verify"を同じものとして扱いました。v8.1.0 以降、 TiDB Lightning はtidb.tlsに対して"false"、""、"skip-verify"、"preferred"の動作を区別します。詳細については、 TiDB Lightning構成を参照してください。 AUTO_ID_CACHE=1のテーブルの場合、TiDB は集中型AUTO_INCREMENT ID割り当てサービスをサポートします。以前のバージョンでは、このサービスのプライマリ TiDB ノードは、TiDB プロセスが終了すると(たとえば、TiDB ノードの再起動中)、自動割り当て ID を可能な限り連続的に保つためにforceRebase操作を自動的に実行していました。しかし、AUTO_ID_CACHE=1のテーブルが多すぎると、forceRebaseの実行に非常に時間がかかり、TiDB がすぐに再起動できなくなり、データの書き込みがブロックされてシステムの可用性に影響を及ぼします。この問題を解決するために、v8.1.0 以降、TiDB はforceRebaseの動作を削除しますが、この変更により、フェイルオーバー中に一部の自動割り当て ID が連続しなくなります。- 以前のバージョンでは、
UPDATE変更を含むトランザクションを処理する際に、UPDATEイベントで主キーまたは null 以外の一意インデックス値が変更されると、TiCDC はこのイベントをDELETEとINSERTイベントに分割していました。v8.1.0 では、MySQL シンクを使用する場合、UPDATEの変更のトランザクションcommitTSが TiCDCthresholdTS(TiCDC の起動時に PD から取得する現在のタイムスタンプ) より小さい場合、TiCDC はUPDATEのイベントをDELETEとINSERTイベントに分割します。この動作変更により、TiCDC が受信したUPDATEのイベントの順序が正しくない可能性があり、その結果、分割されたDELETEイベントとINSERTイベントの順序も正しくなくなる可能性がある、下流データの不整合の問題が解決されます。詳細については、 ドキュメントを参照してください。
システム変数
設定ファイルのパラメータ
非推奨の機能
v8.1.0 以降、TiDB および TiDB Dashboardのテレメトリ機能は削除されます。
- システム変数
tidb_enable_telemetry、 TiDB 設定項目enable-telemetry、および PD 設定項目enable-telemetryは非推奨となり、機能しなくなりました。 ADMIN SHOW TELEMETRY構文は削除されます。- キーワード
TELEMETRYとTELEMETRY_IDは削除されます。
- システム変数
以降のリリースでは実行プランバインディングの自動進化を再設計する予定であり、関連する変数と動作が変更されます。
TiDB Lightningパラメータ
conflict.max-record-rowsは将来のリリースで廃止される予定であり、その後削除されます。このパラメータはconflict.thresholdに置き換えられます。これは、競合レコードの最大数が、単一のインポートタスクで許容される競合レコードの最大数と一致することを意味します。TiDB Lightning v8.0.0以降、物理インポートモードの競合検出の古いバージョン戦略は非推奨となり、
conflict.strategyパラメータを使用して論理インポートモードと物理インポートモードの両方の競合検出戦略を制御できるようになりました。旧バージョンの競合検出用のduplicate-resolutionパラメータは、将来のリリースで削除される予定です。
改善点
TiDB
SHOW CREATE TABLEの出力に表示される外部キーのMySQL互換性を改善 #51837 @negachovSHOW CREATE TABLEの出力に表示される式のデフォルト値のMySQL互換性を改善しました #52939 @CbcWestwolf- 取り込みモードで複数のインデックスを同時に追加できるようになりました #52596 @lance6716
- システム変数
tidb_service_scopeをさまざまな値で構成することをサポートし、分散実行フレームワーク(DXF) の利用率を高めます。 #52441 @ywqzzy - 常に
falseである DNF 項目の処理を強化し、そのようなフィルタ条件を直接無視することで、不要なテーブル全体のスキャンを回避します#40997 @hi-rustin - オプティマイザがクエリに対して単一インデックススキャン方式 (フルテーブルスキャン以外) を選択できる場合、オプティマイザがクエリに対してインデックスマージを自動的に選択しないという制限を削除するために、オプティマイザ修正コントロールの使用をサポートします。 #52869 @time-and-fate
- コプロセッサー演算子の列
execution infoにtotal_kv_read_wall_timeメトリックを追加します。 #28937 @cfzjywxk - リソースコントロールダッシュボードに
RU (max)メトリックを追加する#49318 @nolouch - リソースロック(RLock)が時間内に解放されない問題を回避するために、LDAP認証にタイムアウトメカニズムを追加します #51883 @YangKeao
TiKV
- TiKV の安定性を向上させるために、 Raftstoreスレッドでスナップショットファイルに対する IO 操作を実行しないようにします#16564 @Connor1996
- TiKV のシャットダウン速度を加速 #16680 @LykxSassinator
- スレッドごとのメモリ使用量のメトリックを追加します。 #15927 @Connor1996
PD
TiFlash
- TLS を有効にした後に証明書を更新することでTiFlash がpanicする可能性がある問題を軽減します#8535 @windtalker
ツール
Backup & Restore (BR)
TiCDC
- REDOログを使用してデータリカバリ中のメモリの安定性を向上させ、OOM の確率を低減します。 #10900 @CharlesCheung96
- トランザクション競合シナリオにおけるデータレプリケーションの安定性が大幅に向上し、パフォーマンスが最大10倍向上します#10896 @CharlesCheung96
バグ修正
TiDB
- 複数値インデックスを持つテーブルを含むSQL文を実行すると、
Can't find a proper physical plan for this queryエラーが返される可能性がある問題を修正しました。 #49438 @qw4990 - OOMエラー発生後に自動統計収集が停止する問題を修正#51993 @hi-rustin
- BRを使用して統計情報のないテーブルを復元した後、そのテーブルの統計の健全性が 100% のままになる問題を修正しました。 #29769 @winoros
- アップグレード中に TiDB がシステムテーブルの統計を作成する問題を修正しました #52040 @hi-rustin
- 統計の初期化が完了する前に自動統計収集がトリガーされる問題を修正#52346 @hi-rustin
tidb_mem_quota_analyzeが有効になっていて、統計の更新に使用されるメモリが制限を超えると TiDB がクラッシュする可能性がある問題を修正しました。 #52601 @hawkingrei- TiDBの同期的な統計読み込みメカニズムが空の統計の読み込みを無期限に再試行し、
fail to get stats version for this histogramログを出力する問題を修正しました。 #52657 @hawkingrei - 照合順序の新しいフレームワークが無効になっているときに、異なる照合順序を含む式によってクエリがpanicになる可能性がある問題を修正しました#52772 @wjhuang2016
CPS by typeメトリックに誤った値が表示される問題を修正しました #52605 @nolouchINFORMATION_SCHEMA.TIKV_REGION_STATUSをクエリすると nil ポインタエラーが発生する問題を修正しました #52013 @JmPotato- 列に無効なデフォルト値が指定されたときに表示される誤ったエラーメッセージを修正しました。 #51592 @danqixu
- 取り込みモードでインデックスを追加すると、一部のコーナーケースでデータインデックスの不整合が発生する可能性がある問題を修正#51954 @lance6716
- 外部キーを持つテーブルを復元するときに DDL 操作が停止する問題を修正しました #51838 @YangKeao
- TiDBネットワークが分離されているときにインデックスの追加が失敗する問題を修正 #51846 @ywqzzy
- インデックス名を変更した後に同じ名前のインデックスを追加するとエラーが発生する問題を修正#51431 @lance6716
- インデックス追加中にクラスターのアップグレードによって発生するデータインデックスの不整合の問題を修正しました。 #52411 @tangenta
- 分散実行フレームワーク (DXF) を有効にした後に、大きなテーブルにインデックスを追加できない問題を修正しました。 #52640 @tangenta
- インデックスを同時に追加するとエラー
no such file or directoryが報告される問題を修正しました #52475 @tangenta - インデックスの追加が失敗した後に一時データをクリーンアップできない問題を修正#52639 @lance6716
- プランキャッシュシナリオでメタデータロックがDDL操作の実行を阻止できない問題を修正 #51407 @wjhuang2016
- 大量のデータをインポートするときに
IMPORT INTO操作が停止する問題を修正#52884 @lance6716 - gRPC エラーをログに記録するときに TiDB が予期せず再起動する問題を修正しました #51301 @guo-shaoge
- IndexHashJoin が Anti Left Outer Semi Join を計算するときに冗長なデータを出力する問題を修正しました。 #52923 @yibin87
- 相関サブクエリにおける TopN オペレーターの誤った結果を修正 #52777 @yibin87
- HashJoinプローブの不正確な実行時間統計を修正 #52222 @windtalker
- 静的パーティションプルーニングモード(
tidb_partition_prune_mode='static')でTABLESAMPLEを使用すると誤った結果が返される問題を修正 #52282 @tangenta - 夏時間でTTLが1時間ずれる問題を修正 #51675 @lcwangchao
- TiDB Dashboardのモニタリングページにおける接続数(Connection Count)の計算と表示が誤っていた問題を修正しました。 #51889 @YangKeao
- パーティションDDLタスクをロールバックするときにステータスが停止する問題を修正しました #51090 @jiyfhust
EXPLAIN ANALYZEを実行したときにmax_remote_streamの値が正しくない問題を修正しました #52646 @JaySon-HuangTIDB_HOT_REGIONSテーブルをクエリすると、誤ってINFORMATION_SCHEMAテーブルが返される可能性がある問題を修正しました。 #50810 @Defined2014- 特定の列の統計情報が完全にロードされていない場合に、
EXPLAIN文の結果に誤った列 ID が表示される可能性がある問題を修正しました#52207 @time-and-fate IFNULL関数によって返される型が MySQL と一致しない問題を修正しました #51765 @YangKeao- 一意インデックスを追加するとTiDBがpanicする可能性がある問題を修正#52312 @wjhuang2016
- 複数値インデックスを持つテーブルを含むSQL文を実行すると、
TiKV
- 古いリージョンピアがGCメッセージを無視するとresolve-tsがブロックされる問題を修正しました #16504 @crazycs520
- RocksDB の非アクティブな Write Ahead Logs (WAL) によってデータが破損する可能性がある問題を修正しました#16705 @Connor1996
PD
- PD マイクロサービスモードのオン/オフを切り替えるときに TSO が停止する可能性がある問題を修正#7849 @JmPotato
- DR自動同期の
State監視メトリックにデータが表示されない問題を修正#7974 @lhy1024 - バイナリバージョンのチェックでPD panicが発生する可能性がある問題を修正 #7978 @JmPotato
- TTLパラメータを解析する際に発生する型変換エラーを修正#7980 @HuSharp
- デプロイされた2つのデータセンター間でLeaderを切り替えるとLeaderの移行に失敗する問題を修正#7992 @TonsnakeLin
- pd-ctl の
PrintErrlnがstderrにエラーメッセージを出力できない問題を修正しました #8022 @HuSharp Mergeスケジュールを生成する際にPDがpanicする可能性がある問題を修正 #8049 @nolouchGetAdditionalInfoによって引き起こされるpanic問題を修正 #8079 @HuSharp- PDの
Filter target監視メトリックが散布範囲情報を提供しない問題を修正#8125 @HuSharp SHOW CONFIGのクエリ結果に非推奨の設定項目trace-region-flowが含まれる問題を修正しました #7917 @rleungx- スケーリングの進行状況が正しく表示されない問題を修正#7726 @CabinfeverB
TiFlash
- 非厳密モードの
sql_modeで無効なデフォルト値を持つ列にデータを挿入するとTiFlash がpanicする可能性がある問題を修正しました #8803 @Lloyd-Pottiger - TiFlash が高同時実行読み取りシナリオで一時的に誤った結果を返す可能性がある問題を修正#8845 @JinheLin
- ストレージとコンピューティングの分離アーキテクチャで、 TiFlashコンピューティングノードの
storage.remote.cache.capacity設定項目の値を変更した後、Grafanaに表示されるディスクused_sizeメトリックが正しくないという問題を修正しました。 #8920 @JinheLin - クラスタをv6.5.0より前のバージョンからv6.5.0以降にアップグレードするときに、 TiFlashメタデータが破損してプロセスがpanicになる可能性がある問題を修正しました#9039 @JaySon-Huang
- ストレージとコンピューティングの分離アーキテクチャで、コンピューティングノードのプロセスが停止するとTiFlash がpanicする可能性がある問題を修正しました#8860 @guo-shaoge
- 仮想生成列を含むクエリを実行するとTiFlash がエラーを返す可能性がある問題を修正しました #8787 @guo-shaoge
- 非厳密モードの
ツール
Backup & Restore (BR)
- BRが
AUTO_RANDOM列を含むユニオンクラスター化インデックスのAUTO_RANDOMID割り当ての進行状況をバックアップできない問題を修正しました。 #52255 @Leavrth - ログバックアップタスクを一時停止後に削除しても、GCセーフポイントがすぐに復元されない問題を修正しました。 #52082 @3pointer
- 特別なイベントタイミングにより、ログバックアップでデータ損失が発生する可能性があるという稀な問題を修正しました。 #16739 @YuJuncen
- TiKV の再起動により、ログバックアップのグローバルチェックポイントが実際のバックアップファイルの書き込みポイントよりも先に進められ、少量のバックアップデータが失われる可能性がある問題を修正しました#16809 @YuJuncen
- フルバックアップ中に
--concurrencyに関連する紛らわしい情報がログに表示される問題を修正 #50837 @BornChanger - BRを使用してデータを復元する場合、または物理インポートモードでTiDB Lightningを使用してデータをインポートする場合に、PD から取得されたリージョンにLeaderがない問題を修正しました#51124 #50501 @Leavrth
- ログバックアップタスクを一時停止、停止、再構築した後、タスクの状態は正常であるが、チェックポイントが進まない問題を修正しました。 #53047 @RidRisR
- 不安定なテストケース
TestClearCacheを修正 #51671 @zxc111 - 不安定なテストケース
TestGetMergeRegionSizeAndCountを修正 #52095 @3pointer - 不安定な統合テストを修正
br_tikv_outage#52673 @Leavrth - テストケース
TestGetTSWithRetryの実行に時間がかかりすぎる問題を修正#52547 @Leavrth - PD へのネットワーク接続が不安定な状態で一時停止中のログバックアップタスクを再開すると TiKV がpanicする可能性がある問題を修正しました #17020 @YuJuncen
- BRが
TiCDC
- TiCDC所有者ノードを退去させるAPI(
/api/v2/owner/resign)を呼び出すと、TiCDCタスクが予期せず再起動する問題を修正しました#10781 @sdojjy - 下流の Pulsar が停止しているときに、changefeed を削除すると通常の TiCDC プロセスが停止し、他の changefeed プロセスも停止するという問題を修正しました#10629 @asddongmen
- Grafana のOwnership historyパネルが不安定になる問題を修正#10796 @hongyunyan
- PDを再起動するとTiCDCノードがエラーで再起動する可能性がある問題を修正しました #10799 @3AceShowHand
- PDディスクI/Oの高レイテンシーによりデータレプリケーションで深刻なレイテンシーが発生する問題を修正 #9054 @asddongmen
TIMEZONE型のデフォルト値が正しいタイムゾーンに従って設定されない問題を修正 #10931 @3AceShowHandDROP PRIMARY KEYとDROP UNIQUE KEY文が正しく複製されない問題を修正#10890 @asddongmen- TiCDC が上流に書き込まれた後に下流の
Exchange Partition ... With ValidationDDL の実行に失敗し、変更フィードが停止する問題を修正しました。 #10859 @hongyunyan
- TiCDC所有者ノードを退去させるAPI(
TiDB Lightning
- ソースファイル内の互換性のない SQL文が原因で、TiDB Lightning がデータインポート中に
no database selectedを報告する問題を修正しました。 #51800 @lance6716 - TiDB Lightningがサーバーモードでログに機密情報を出力する可能性がある問題を修正しました #36374 @kennytm
- PD Leaderを強制終了すると、 TiDB Lightningがデータインポート中に
invalid store ID 0エラーを報告する問題を修正しました。 #50501 @Leavrth - TiDB Lightningが
replace戦略を使用して競合するデータを処理するときにUnknown column in where clauseエラーを報告する問題を修正しました #52886 @lyzx2001 - Parquet 形式の空のテーブルをインポートするときにTiDB Lightning がパニックになる問題を修正しました #52518 @kennytm
- ソースファイル内の互換性のない SQL文が原因で、TiDB Lightning がデータインポート中に
パフォーマンステスト
TiDB v8.1.0 のパフォーマンスについては、 TiDB Cloud Dedicated クラスターのTPC-CパフォーマンステストレポートとSysbenchパフォーマンステストレポートを参照してください。
貢献者
TiDB コミュニティからの以下の貢献者に感謝いたします。
- arturmelanchyk (初回貢献者)
- CabinfeverB
- danqixu (初回貢献者)
- imalasong (初回貢献者)
- jiyfhust
- negachov (初回貢献者)
- testwill
- yzhan1 (初回貢献者)
- zxc111 (初回貢献者)