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はクエリの手動マークもサポートしています。1コマンド
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 @ D3Hunterのパフォーマンスと安定性を向上させます。DXFは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タスクのパフォーマンスを直線的に向上させることができます。詳細についてはドキュメント参照してください。
Security
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 @ D3Hunterをサポートv8.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 @ lyzx2001を使用して競合するデータの処理をサポートします。v8.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を設定でき、相互トランスポート層Security(mTLS)を確立できます。さらに、TiDBのユーザー名とパスワードに基づく認証も設定できます。
詳細についてはドキュメント参照してください。
互換性の変更
注記:
このセクションでは、v8.0.0から最新バージョン(v8.1.0)にアップグレードする際に知っておくべき互換性の変更点について説明します。v7.6.0以前のバージョンから最新バージョンにアップグレードする場合は、中間バージョンで導入された互換性の変更点も確認する必要があるかもしれません。
行動の変化
- 以前のバージョンでは、 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 は集中型自動増分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 ダッシュボードのテレメトリ機能は削除されます。
- システム変数
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#51837 @ negachovの出力に表示される外部キーのMySQL互換性を改善SHOW CREATE TABLE#52939 @ CbcWestwolfの出力に表示される式のデフォルト値のMySQL互換性を改善しました- 取り込みモード#52596 @ lance6716で複数のインデックスを同時に追加できるようになりました
- システム変数
tidb_service_scopeさまざまな値で構成することをサポートし、分散実行フレームワーク(DXF) #52441 @ ywqzzyの利用率を高めます。 - 常に
falseである DNF 項目の処理を強化し、そのようなフィルタ条件を直接無視することで、不要なテーブル全体のスキャンを回避します#40997 @ Rustin170506 - オプティマイザがクエリ#52869 @ time-and-fateに対して単一インデックス スキャン方式 (フル テーブル スキャン以外) を選択できる場合、オプティマイザがクエリに対してインデックス マージを自動的に選択しないという制限を削除するために、オプティマイザ修正コントロールの使用をサポートします。
- コプロセッサー演算子#28937 @ cfzjywxkの列
execution infoにtotal_kv_read_wall_timeメトリックを追加します。 - リソースコントロールダッシュボードに
RU (max)メトリックを追加する#49318 @ nolouch - リソースロック(RLock)が#51883内に解放されない問題を回避するために、LDAP認証にタイムアウトメカニズムを追加しますヤンケオ
TiKV
- TiKV の安定性を向上させるために、 Raftstoreスレッドでスナップショット ファイルに対する IO 操作を実行しないようにします#16564 @ Connor1996
- TiKV #16680 @ LykxSassinatorのシャットダウン速度を加速
- スレッド#15927 @ Connor1996ごとのメモリ使用量のメトリックを追加します。
PD
TiFlash
- TLS を有効にした後に証明書を更新することでTiFlash がpanic可能性がある問題を軽減します#8535 @ windtalker
ツール
バックアップと復元 (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 @ Rustin170506
- BRを使用して統計情報のないテーブルを復元した後、そのテーブルの統計の健全性が 100% #29769 @ winorosのままになる問題を修正しました。
- アップグレード#52040 @ Rustin170506中に TiDB がシステム テーブルの統計を作成する問題を修正しました
- 統計の初期化が完了する前に自動統計収集がトリガーされる問題を修正#52346 @ Rustin170506
tidb_mem_quota_analyzeが有効になっていて、統計の更新に使用されるメモリが#52601 @ hawkingrei制限を超えると TiDB がクラッシュする可能性がある問題を修正しました。- TiDBの同期的な統計読み込みメカニズムが空の統計の読み込みを無期限に再試行し、
fail to get stats version for this histogramlog #52657 @ hawkingreiを出力問題を修正しました。 - 照合の新しいフレームワークが無効になっているときに、異なる照合を含む式によってクエリがpanicになる可能性がある問題を修正しました#52772 @ wjhuang2016
CPS by typeメトリックに誤った値#52605 @ nolouchが表示される問題を修正しましたINFORMATION_SCHEMA.TIKV_REGION_STATUS#52013 @ JmPotatoをクエリすると nil ポインタエラーが発生する問題を修正しました- 列#51592 @ danqixuに無効なデフォルト値が指定されたときに表示される誤ったエラー メッセージを修正しました。
- 取り込みモードでインデックスを追加すると、一部のコーナーケースでデータインデックスの不整合が発生する可能性がある問題を修正#51954 @ lance6716
- 外部キー#51838 @ YangKeaoを持つテーブルを復元するときに DDL 操作が停止する問題を修正しました
- TiDBネットワークが#51846 @ ywqzzyで分離されているときにインデックスの追加が失敗する問題を修正
- インデックス名を変更した後に同じ名前のインデックスを追加するとエラーが発生する問題を修正#51431 @ lance6716
- インデックス#52411 @ tangenta追加中にクラスターのアップグレードによって発生するデータ インデックスの不整合の問題を修正しました。
- 分散実行フレームワーク (DXF) #52640 @ tangentaを有効にした後に、大きなテーブルにインデックスを追加できない問題を修正しました。
- インデックスを同時に追加するとエラー
no such file or directory#52475 @ tangentaが報告される問題を修正しました - インデックスの追加が失敗した後に一時データをクリーンアップできない問題を修正#52639 @ lance6716
- プランキャッシュシナリオ#51407 @ wjhuang2016でメタデータロックがDDL操作の実行を阻止できない問題を修正
- 大量のデータをインポートするときに
IMPORT INTO操作が停止する問題を修正#52884 @ lance6716 - gRPC エラー#51301 @ guo-shaogeをログに記録するときに TiDB が予期せず再起動する問題を修正しました
- IndexHashJoin が Anti Left Outer Semi Join #52923 @ yibin87を計算するときに冗長なデータを出力する問題を修正しました。
- 相関サブクエリ#52777 @ yibin87における TopN 演算子の誤った結果を修正
- HashJoinプローブ#52222 @ windtalkerの不正確な実行時間統計を修正
- 静的パーティションプルーニングモードで
TABLESAMPLE使用すると誤った結果が返される問題を修正(tidb_partition_prune_mode='static') #52282 @ tangenta - 夏時間#51675 @ lcwangchaoでTTLが1時間ずれる問題を修正
- TiDBダッシュボードのモニタリングページ#51889 @ YangKeaoにおける接続数(接続数)の計算と表示が誤っていた問題を修正しました。
- パーティションDDLタスク#51090 @ jiyfhustをロールバックするときにステータスが停止する問題を修正しました
EXPLAIN ANALYZE#52646 @ JaySon-Huangを実行したときにmax_remote_streamの値が正しくない問題を修正しましたTIDB_HOT_REGIONSテーブルをクエリすると、誤ってINFORMATION_SCHEMAテーブル#50810 @ Defined2014が返される可能性がある問題を修正しました。- 特定の列の統計情報が完全にロードされていない場合に、
EXPLAINステートメントの結果に誤った列 ID が表示される可能性がある問題を修正しました#52207 @ time-and-fate IFNULL関数によって返される型が MySQL #51765 @ YangKeaoと一致しない問題を修正しました- ユニークインデックスを追加するとTiDBがpanic可能性がある問題を修正#52312 @ wjhuang2016
- 複数値インデックスを持つテーブルを含むSQL文を実行すると、
TiKV
- 古いリージョンピアがGCメッセージ#16504 @ crazycs520を無視するとresolve-tsがブロックされる問題を修正しました
- RocksDB の非アクティブな Write Ahead Logs (WAL) によってデータが破損する可能性がある問題を修正しました#16705 @ Connor1996
PD
- PD マイクロサービス モードのオン/オフを切り替えるときに TSO が停止する可能性がある問題を修正#7849 @ JmPotato
- DR自動同期の
State監視メトリックにデータが表示されない問題を修正#7974 @ lhy1024 - バイナリバージョンのチェックでPDpanic#7978 @ JmPotatoが発生する可能性がある問題を修正
- TTLパラメータを解析する際に発生する型変換エラーを修正#7980 @ HuSharp
- 展開された2つのデータセンター間でリーダーを切り替えるとLeaderが失敗する問題を修正#7992 @ TonsnakeLin
- pd-ctl の
PrintErrlnがstderr#8022 @ HuSharpにエラーメッセージを出力できない問題を修正しました Mergeスケジュール#8049 @ nolouchを生成する際にPDがpanic可能性がある問題を修正GetAdditionalInfo#8079 @ HuSharpによって引き起こされるpanic問題を修正- PDの
Filter target監視メトリックが散布範囲情報を提供しない問題を修正#8125 @ HuSharp - クエリ結果
SHOW CONFIGに非推奨の構成項目trace-region-flow#7917 @ rleungxが含まれる問題を修正しました - スケーリングの進行状況が正しく表示されない問題を修正#7726 @ CabinfeverB
TiFlash
- 非厳密な
sql_mode#8803 @ Lloyd-Pottigerで無効なデフォルト値を持つ列にデータを挿入するとTiFlash がpanic可能性がある問題を修正しました - TiFlash が高同時読み取りシナリオで一時的に誤った結果を返す可能性がある問題を修正#8845 @ JinheLin
- 分散storageおよびコンピューティングアーキテクチャで、 TiFlashコンピューティングノード#8920 @ JinheLinの
storage.remote.cache.capacity構成項目の値を変更した後、Grafanaに表示されるディスクused_sizeメトリックが正しくないという問題を修正しました。 - クラスタをv6.5.0より前のバージョンからv6.5.0以降にアップグレードするときに、 TiFlashメタデータが破損してプロセスがpanicになる可能性がある問題を修正しました#9039 @ JaySon-Huang
- 分散storageとコンピューティングアーキテクチャで、コンピューティングノードのプロセスが停止するとTiFlash がpanic可能性がある問題を修正しました#8860 @ guo-shaoge
- 仮想生成列#8787 @ guo-shaogeを含むクエリを実行するとTiFlash がエラーを返す可能性がある問題を修正しました
- 非厳密な
ツール
バックアップと復元 (BR)
- BRが
AUTO_RANDOM列#52255 @ Leavrthを含むユニオンクラスター化インデックスのAUTO_RANDOMID割り当ての進行状況をバックアップできない問題を修正しました。 - ログバックアップタスクを一時停止後に削除しても、GCセーフポイント#52082 @ 3pointerがすぐに復元されない問題を修正しました。
- 特別なイベントタイミングにより、ログバックアップ#16739 @ YuJuncenでデータ損失が発生する可能性があるという稀な問題を修正しました。
- TiKV の再起動により、ログ バックアップのグローバル チェックポイントが実際のバックアップ ファイルの書き込みポイントよりも先に進められ、少量のバックアップ データが失われる可能性がある問題を修正しました#16809 @ YuJuncen
- フルバックアップ#50837 @ BornChanger中に
--concurrencyに関連する紛らわしい情報がログに表示される問題を修正 - 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 #17020 @ YuJuncenへのネットワーク接続が不安定な状態で一時停止中のログバックアップタスクを再開すると TiKV がpanic可能性がある問題を修正しました
- BRが
TiCDC
- TiCDC所有者ノードを退去させるAPI(
/api/v2/owner/resign)を呼び出すと、TiCDCタスクが予期せず再起動する問題を修正しました#10781 @ sdojjy - 下流の Pulsar が停止しているときに、changefeed を削除すると通常の TiCDC プロセスが停止し、他の changefeed プロセスも停止するという問題を修正しました#10629 @ asddongmen
- Grafana の所有権履歴パネルが不安定になる問題を修正#10796 @ hongyunyan
- PDを再起動するとTiCDCノードがエラー#10799 @ 3AceShowHandで再起動する可能性がある問題を修正しました
- PDディスクI/Oの高レイテンシーによりデータレプリケーション#9054 @ asddongmenで深刻なレイテンシーが発生する問題を修正
TIMEZONE種類のデフォルト値が正しいタイムゾーン#10931 @ 3AceShowHandに従って設定されない問題を修正DROP PRIMARY KEYとDROP UNIQUE KEYステートメントが正しく複製されない問題を修正#10890 @ asddongmen- TiCDC が上流に書き込まれた後に下流の
Exchange Partition ... With ValidationDDL の実行に失敗し、変更フィードが#10859 @ hongyunyanで停止する問題を修正しました。
- TiCDC所有者ノードを退去させるAPI(
TiDB Lightning
- ソースファイル#51800 @ lance6716内の互換性のない SQL ステートメントが原因で、 TiDB Lightning がデータインポート中に
no database selected報告する問題を修正しました。 - TiDB Lightningがサーバーモード#36374 @ kennytmでログに機密情報を出力する可能性がある問題を修正しました
- PDLeaderを強制終了すると、 TiDB Lightningがデータインポート#50501 @ Leavrth中に
invalid store ID 0エラーを報告する問題を修正しました。 - TiDB Lightningが
replace戦略#52886 @ lyzx2001を使用して競合するデータを処理するときにUnknown column in where clauseエラーを報告する問題を修正しました - Parquet 形式#52518 @ kennytmの空のテーブルをインポートするときにTiDB Lightning がパニックになる問題を修正しました
- ソースファイル#51800 @ lance6716内の互換性のない SQL ステートメントが原因で、 TiDB Lightning がデータインポート中に
パフォーマンステスト
TiDB v8.1.0 のパフォーマンスについては、 TiDB Cloud Dedicated クラスターのTPC-CパフォーマンステストレポートとSysbenchパフォーマンステストレポート参照してください。
寄稿者
TiDB コミュニティからの以下の貢献者に感謝いたします。
- アルトゥルメランチク (初回投稿者)
- キャビンフィーバーB
- ダンキシュ (初回投稿者)
- イマラソン (初回投稿者)
- ジフハウス
- ネガチョフ (初回投稿者)
- テストウィル
- yzhan1 (初回投稿者)
- zxc111 (初回投稿者)