TiDB 5.2 リリースノート
発売日:2021年8月27日
TiDB バージョン: 5.2.0
v5.2 の主な新機能と改善点は次のとおりです。
- 式インデックスで複数の関数の使用をサポートし、クエリのパフォーマンスを大幅に向上します。
- オプティマイザのカーディナリティ推定の精度を向上させ、最適な実行プランを選択できるようにします。
- トランザクションのロックイベントを監視し、デッドロックの問題をトラブルシューティングするためのロックビュー機能の一般提供(GA)を発表します。
- TiFlash I/Oトラフィック制限機能を追加し、 TiFlashの読み取りと書き込みの安定性を向上しました。
- TiKVは、以前のRocksDB書き込み停止メカニズムに代わる新しいフロー制御メカニズムを導入し、TiKVフロー制御の安定性を向上させました。
- データ移行 (DM) の運用と保守を簡素化し、管理コストを削減します。
- TiCDCは、TiCDCタスクの管理にHTTPプロトコルOpenAPIをサポートしています。Kubernetes環境とセルフホスト環境の両方で、よりユーザーフレンドリーな操作方法を提供します。(Experimental機能)
互換性の変更
注記:
以前の TiDB バージョンから v5.2 にアップグレードする場合、すべての中間バージョンの互換性変更ノートを知りたい場合は、対応するバージョンのリリースノートを確認できます。
システム変数
コンフィグレーションファイルのパラメータ
その他
- アップグレード前に、システム変数
tidb_evolve_plan_baselinesの値がONになっているかどうかを確認してください。値がONの場合はOFFに設定してください。そうでない場合、アップグレードは失敗します。 - v4.0 から v5.2 にアップグレードされた TiDB クラスターの場合、デフォルト値
tidb_multi_statement_modeがWARNからOFFに変更されます。 - アップグレード前に、TiDB設定の値が
feedback-probabilityあることを確認してください。値が0でない場合、アップグレード後に「回復可能なゴルーチンでpanic」エラーが発生しますが、このエラーはアップグレードには影響しません。 - TiDBはMySQL 5.7のnoop変数
innodb_default_row_formatと互換性を持つようになりました。この変数を設定しても効果はありません#23541 - TiDB 5.2以降では、システムセキュリティの向上のため、クライアントからの接続のトランスポートレイヤーを暗号化することが推奨されます(必須ではありません)。TiDBは、暗号化を自動的に設定して有効化するAuto TLS機能を提供しています。Auto TLS機能を使用するには、TiDBのアップグレード前に、TiDB設定ファイルで
security.auto-tlstrueに設定してください。 - MySQL 8.0 からの移行を容易にし、セキュリティを向上させるために、
caching_sha2_password認証方法をサポートします。
新機能
SQL
式インデックスで複数の関数の使用をサポート
式インデックスは、式に基づいて作成できる特殊なインデックスの一種です。式インデックスを作成すると、TiDBは式ベースのクエリをサポートし、クエリパフォーマンスを大幅に向上させます。
Oracleの
translate機能をサポートtranslate関数は、文字列内のすべての文字を他の文字に置き換えます。TiDBでは、この関数はOracleのように空文字列をNULLとして扱いません。HashAggの流出をサポート
HashAgg のディスクへのスピルをサポートします。HashAgg 演算子を含む SQL 文がメモリ不足 (OOM) を引き起こす場合、この演算子の同時実行数を
1に設定してディスクへのスピルをトリガーすることで、メモリ負荷を軽減できます。オプティマイザーのカーディナリティ推定の精度を向上
- TiDBのTopN/Limit推定精度を向上しました。例えば、
order by col limit x条件を含む大規模テーブルに対するページネーションクエリの場合、TiDBは適切なインデックスをより簡単に選択し、クエリ応答時間を短縮できます。 - 範囲外推定の精度を向上します。例えば、1日の統計情報が更新されていない場合でも、TiDBは
where date=Now()を含むクエリに対応するインデックスを正確に選択できます。 - Limit/TopN を押し下げるオプティマイザーの動作を制御する
tidb_opt_limit_push_down_threshold変数を導入します。これにより、誤った推定のために状況によっては Limit/TopN を押し下げることができない問題が解決されます。
- TiDBのTopN/Limit推定精度を向上しました。例えば、
オプティマイザのインデックス選択を改善する
インデックス選択のためのプルーニングルールを追加します。統計情報を比較に使用する前に、TiDBはこれらのルールを使用して選択可能なインデックスの範囲を絞り込み、最適でないインデックスが選択される可能性を低減します。
トランザクション
Lock ビューの一般提供 (GA)
ロックビュー機能は、ロックの競合や悲観的ロックのロック待機に関する詳細情報を提供するため、DBA はトランザクション ロック イベントを観察し、デッドロックの問題をトラブルシューティングできます。
v5.2 では、Lock ビューに次の機能強化が加えられました。
- ロックビュー関連テーブルのSQLダイジェスト列に加えて、対応する正規化されたSQLテキストを表示する列をこれらのテーブルに追加します。SQLダイジェストに対応するステートメントを手動でクエリする必要はありません。
- クラスタ内のSQLダイジェストセットに対応する正規化されたSQL文(フォーマットと引数のない形式)を照会する関数
TIDB_DECODE_SQL_DIGESTSを追加します。これにより、トランザクションによって過去に実行されたSQL文を照会する操作が簡素化されます。 - システムテーブル
DATA_LOCK_WAITSとDEADLOCKSに列を追加し、キーから解釈されたテーブル名、行ID、インデックス値などのキー情報を表示します。これにより、キーが属するテーブルの検索やキー情報の解釈といった操作が簡素化されます。 - 再試行可能なデッドロックエラーの情報を
DEADLOCKSテーブルに収集できるようになりました。これにより、このようなエラーによって発生する問題のトラブルシューティングが容易になります。エラー収集はデフォルトで無効になっていますが、pessimistic-txn.deadlock-history-collect-retryable設定で有効にできます。 TIDB_TRXシステムテーブルにおいて、クエリ実行中のトランザクションとアイドル状態のトランザクションを区別できるようになりました。3Normal状態はRunningとIdle状態に分割されました。
ユーザードキュメント:
- クラスター内のすべての TiKV ノードで発生している悲観的ロック待機イベントをビュー
DATA_LOCK_WAITS - TiDBノードで最近発生したデッドロックエラーをビュー:
DEADLOCKS - TiDBノードで実行中のトランザクションをビュー:
TIDB_TRX
属性
AUTO_RANDOMまたはSHARD_ROW_ID_BITSを持つテーブルにインデックスを追加するユーザー シナリオを最適化します。
安定性
TiFlash I/Oトラフィック制限を追加
この新機能は、ディスク帯域幅が小さく特定のサイズであるクラウドstorageに適しています。デフォルトでは無効になっています。
TiFlash I/Oレートリミッターは、読み取りタスクと書き込みタスク間のI/Oリソースの過剰な競合を回避するための新しいメカニズムを提供します。読み取りタスクと書き込みタスクへの応答のバランスを取り、読み取り/書き込みワークロードに応じてレートを自動的に制限します。
TiKVフロー制御の安定性を向上
TiKVは、以前のRocksDB書き込みストールメカニズムに代わる新しいフロー制御メカニズムを導入します。この新しいメカニズムは、書き込みストールメカニズムと比較して、フォアグラウンド書き込みの安定性への影響を軽減します。
具体的には、RocksDB の圧縮によるストレスが蓄積されると、RocksDBレイヤーではなく TiKV スケジューラレイヤーでフロー制御が実行され、以下の問題が回避されます。
- Raftstoreが停止しています。これは RocksDB の書き込み停止によって発生します。
- Raft選出がタイムアウトし、その結果ノード リーダーが移管されます。
この新しいメカニズムは、フロー制御アルゴリズムを改善し、書き込みトラフィックが多い場合の QPS の低下を軽減します。
クラスター内の単一の低速 TiKV ノードによって引き起こされる影響を自動的に検出して回復します。
TiKVは低速ノード検出メカニズムを導入しました。このメカニズムは、TiKV Raftstoreのレートを検査してスコアを計算し、ストアハートビートを介してPDにスコアを報告します。同時に、PDに
evict-slow-store-schedulerスケジューラを追加し、単一の低速TiKVノードのリーダーノードを自動的に排除します。これにより、クラスター全体への影響が軽減されます。同時に、低速ノードに関するアラート項目が追加され、問題を迅速に特定して解決するのに役立ちます。
データ移行
データ移行(DM)の運用を簡素化
DM v2.0.6 は、VIP を使用してデータ ソースの変更イベント (フェイルオーバーまたは計画変更) を自動的に識別し、新しいデータ ソース インスタンスに自動的に接続できるため、データ複製のレイテンシーが短縮され、操作手順が簡素化されます。
TiDB LightningはCSVデータ内のカスタマイズされた行末記号をサポートし、MySQL LOAD DATAのCSVデータ形式と互換性があります。そのため、 TiDB Lightningをデータフローアーキテクチャ内で直接使用できます。
TiDBデータ共有サブスクリプション
TiCDC は、HTTP プロトコル (OpenAPI) を使用して TiCDC タスクを管理することをサポートしています。これは、Kubernetes とセルフホスト環境の両方でよりユーザーフレンドリーな操作方法です。(Experimental機能)
展開と運用
Apple M1 チップを搭載した Mac コンピューターでtiup playgroundコマンドの実行をサポートします。
機能強化
ツール
TiCDC
TiDB Lightning
Dumpling
- MySQL互換データベースのバックアップをサポートしますが、
START TRANSACTION ... WITH CONSISTENT SNAPSHOTまたはSHOW CREATE TABLE#311はサポートしません。
- MySQL互換データベースのバックアップをサポートしますが、
改善点
TiDB
- 組み込み関数
json_unquote()をTiKV #24415にプッシュダウンする機能をサポート - デュアルテーブル#25614から
unionブランチを削除することをサポート - 集計オペレータのコスト係数#25241を最適化する
- MPP外部結合がテーブル行数#25142に基づいてビルドテーブルを選択できるようにします。
- リージョン#24724に基づいて、異なるTiFlashノード間でMPPクエリワークロードのバランスをとることをサポート
- MPPクエリ実行後にキャッシュ内の古い領域を無効にする機能をサポート#24432
- フォーマット指定子
%b/%M/%r/%T#25767の組み込み関数str_to_dateのMySQL互換性を改善 - 同じクエリに対して異なるバインディングを再作成した後に、複数の TiDB に矛盾したバインディング キャッシュが作成される可能性がある問題を修正しました#26015
- アップグレード#23295後に既存のバインディングをキャッシュにロードできない問題を修正しました
SHOW BINDINGSの結果を (original_sql,update_time) #26139で順序付けすることをサポートします- バインディングが存在する場合のクエリ最適化のロジックを改善し、クエリ#26141の最適化時間を短縮します。
- 「削除済み」ステータスのバインディングのガベージコレクションの自動完了をサポート#26206
EXPLAIN VERBOSE#26930の結果で、バインディングがクエリの最適化に使用されているかどうかの表示をサポートします。- 現在の TiDB インスタンス#26340のバインディング キャッシュに対応するタイムスタンプを表示するための新しいステータス バリエーション
last_plan_binding_update_timeを追加します。 - バインディング進化の開始時または
admin evolve bindings実行時にエラーを報告することをサポートして、他の機能#26333に影響を与えるベースライン進化 (実験的機能であるため、現在 TiDB セルフマネージド バージョンでは無効になっています) を禁止します。
- 組み込み関数
PD
TiFlash
- 加算演算子:
MOD / %,LIKE POSITION()LENGTH()関数COALESCE()追加TRIM()ASCII()DEGREES()関数EXP()LOG2()LOG()LOG10()LN()CONV()CRC32()POW()RADIANS()ROUND(decimal)SIN()MOD()DATE()関数DATE_ADD(string, real)追加:ADDDATE(string, real)INET6_ATONINET6_NTOA()関数INET_ATON()追加:INET_NTOA()- 新しい照合順序が有効な場合、MPP モードでシャッフル ハッシュ結合計算とシャッフル ハッシュ集計計算をサポートします。
- 基本コードを最適化してMPPのパフォーマンスを向上させる
STRING型からDOUBLE型へのキャストをサポート- 複数のスレッドを使用して右外部結合の非結合データを最適化する
- MPPクエリで古いリージョンを自動的に無効化する機能をサポート
- 加算演算子:
ツール
TiCDC
Dumpling
バグ修正
TiDB
SET型列#25669でマージ結合を使用すると誤った結果が返される問題を修正しましたIN式の引数#25591におけるデータ破損の問題を修正- GCのセッションがグローバル変数の影響を受けないようにする#24976
- ウィンドウ関数クエリ#25344で
limit使用するときに発生するpanic問題を修正 Limit#24636を使用してパーティションテーブルをクエリしたときに返される誤った値を修正しましたIFNULLENUMまたはSETタイプの列#24944に正しく反映されない問題を修正- 結合サブクエリの
countをfirst_row#24865に変更することで発生する誤った結果を修正しました ParallelApplyTopN演算子#24930の下で使用された場合に発生するクエリ ハングの問題を修正しました- マルチカラムプレフィックスインデックスを使用してSQL文を実行すると予想よりも多くの結果が返される問題を修正#24356
<=>演算子が正しく機能しない問題を修正#24477- 並列
Apply演算子#23280のデータ競合問題を修正 - PartitionUnion演算子#23919のIndexMerge結果をソートするときに
index out of rangeエラーが報告される問題を修正しました tidb_snapshot変数を予想外に大きな値に設定するとトランザクション分離#25680が損なわれる可能性がある問題を修正しました- ODBCスタイルの定数(たとえば、
{d '2020-01-01'})を式#25531として使用できない問題を修正しました。 SELECT DISTINCTBatch Getに変換すると誤った結果になる問題を修正#25320- TiFlashからTiKVへのクエリのバックオフがトリガーされない問題を修正#23665 #24421
only_full_group_by#23839をチェックするときに発生するindex-out-of-rangeエラーを修正します)- 相関サブクエリのインデックス結合の結果が間違っている問題を修正#25799
TiKV
PD
TiFlash
- 分割失敗によりTiFlash が再起動し続ける問題を修正
- TiFlashがデルタデータを削除できない潜在的な問題を修正
- TiFlashが
CAST関数内の非バイナリ文字に間違ったパディングを追加するバグを修正しました - 複雑な
GROUP BY列の集計クエリを処理するときに誤った結果が返される問題を修正しました - 書き込み圧力が高い場合に発生するTiFlashpanic問題を修正
- 右の結合キーが null 値不可で、左の結合キーが null 値の場合に発生するpanicを修正しました。
read-indexリクエストに長い時間がかかる可能性がある問題を修正しました- 読み取り負荷が大きい場合に発生するpanicの問題を修正しました
Date_Format番目の関数がSTRING番目の型引数とNULL値で呼び出されたときに発生する可能性のあるpanic問題を修正しました。
ツール
TiCDC
- チェックポイント#1902更新時にTiCDCオーナーが異常終了するバグを修正
- changefeed が正常に作成された直後に失敗するバグを修正#2113
- ルールフィルタ#1625の無効なフォーマットによりchangefeedが失敗するバグを修正
- TiCDC 所有者がパニックに陥った場合の潜在的な DDL 損失の問題を修正#1260
- デフォルトのソートエンジンオプション#2373での 4.0.x クラスターの CLI 互換性の問題を修正しました。
- TiCDCが
ErrSchemaStorageTableMissエラー#2422を取得したときに、changefeedが予期せずリセットされる可能性があるバグを修正しました。 - TiCDCが
ErrGCTTLExceededエラー#2391を取得したときにchangefeedを削除できないバグを修正 - TiCDCがcdclog #1259 #2424への大きなテーブルの同期に失敗するバグを修正
- TiCDC がテーブル#2230を再スケジュールしているときに、複数のプロセッサが同じテーブルにデータを書き込む可能性があるバグを修正しました。
バックアップと復元 (BR)
TiDB Lightning
- TiDB LightningがParquetファイル#1272の
DECIMALデータ型を解析できないバグを修正 - TiDB Lightning がテーブルスキーマ#1290を復元するときに「エラー 9007: 書き込み競合」エラーを報告するバグを修正しました
- TiDB Lightningがintハンドル#1291のオーバーフローによりデータのインポートに失敗するバグを修正しました
- ローカルバックエンドモード#1403でのデータ損失により、 TiDB Lightningがチェックサム不一致エラーを起こす可能性があるバグを修正しました。
- TiDB Lightningがテーブル スキーマ#1362を復元するときにクラスター化インデックスとの Lightning の非互換性の問題を修正しました
- TiDB LightningがParquetファイル#1272の
Dumpling