TiDB 5.2 リリースノート
発売日:2021年8月27日
TiDB バージョン: 5.2.0
v5.2 の主な新機能と改善点は次のとおりです。
- 式インデックスで複数の関数の使用をサポートし、クエリのパフォーマンスを大幅に向上します。
- オプティマイザのカーディナリティ推定の精度を向上させ、最適な実行プランを選択できるようにします。
- トランザクションのロックイベントを監視し、デッドロックの問題をトラブルシューティングするためのロックビュー機能の一般提供(GA)を発表します。
- TiFlashの読み取りと書き込みの安定性を向上させるために、 TiFlash I/Oトラフィック制限機能を追加しました。
- TiKVは、以前のRocksDB書き込み停止メカニズムに代わる新しいフロー制御メカニズムを導入し、TiKVフロー制御の安定性を向上させました。
- データ移行 (DM) の運用と保守を簡素化し、管理コストを削減します。
- TiCDCは、TiCDCタスクの管理にHTTPプロトコルOpenAPIをサポートしています。Kubernetes環境とセルフホスト環境の両方で、よりユーザーフレンドリーな操作方法を提供します。(Experimental機能)
互換性の変更
注記:
以前の TiDB バージョンから v5.2 にアップグレードする場合、すべての中間バージョンの互換性変更ノートを知りたい場合は、対応するバージョンのリリースノート確認できます。
システム変数
| 変数名 | タイプを変更 | 説明 |
|---|---|---|
default_authentication_plugin | 新しく追加された | サーバーがアドバタイズする認証方法を設定します。デフォルト値はmysql_native_passwordです。 |
tidb_enable_auto_increment_in_generated | 新しく追加された | 生成列または式インデックスを作成する際に、 AUTO_INCREMENT列を含めるかどうかを決定します。デフォルト値はOFFです。 |
tidb_opt_enable_correlation_adjustment | 新しく追加された | オプティマイザが列順序の相関に基づいて行数を推定するかどうかを制御します。デフォルト値はONです。 |
tidb_opt_limit_push_down_threshold | 新しく追加された | Limit演算子またはTopN演算子をTiKVまで押し下げるかどうかを決定するしきい値を設定します。デフォルト値は100です。 |
tidb_stmt_summary_max_stmt_count | 修正済み | ステートメントサマリーテーブルがメモリに保存するステートメントの最大数を設定します。デフォルト値は200から3000に変更されます。 |
tidb_enable_streaming | 非推奨 | システム変数enable-streaming非推奨であり、今後使用することはお勧めしません。 |
コンフィグレーションファイルのパラメータ
| コンフィグレーションファイル | コンフィグレーション項目 | タイプを変更 | 説明 |
|---|---|---|---|
| TiDB構成ファイル | pessimistic-txn.deadlock-history-collect-retryable | 新しく追加された | INFORMATION\_SCHEMA.DEADLOCKSテーブルが再試行可能なデッドロック エラー メッセージを収集するかどうかを制御します。 |
| TiDB構成ファイル | security.auto-tls | 新しく追加された | 起動時にTLS証明書を自動生成するかどうかを決定します。デフォルト値はfalseです。 |
| TiDB構成ファイル | stmt-summary.max-stmt-count | 修正済み | ステートメントサマリーテーブルに保存できるSQLカテゴリの最大数を示します。デフォルト値は200から3000に変更されました。 |
| TiDB構成ファイル | experimental.allow-expression-index | 非推奨 | TiDB 構成ファイル内のallow-expression-index構成は非推奨です。 |
| TiKV設定ファイル | raftstore.cmd-batch | 新しく追加された | リクエストのバッチ処理を有効にするかどうかを制御します。有効にすると、書き込みパフォーマンスが大幅に向上します。デフォルト値はtrueです。 |
| TiKV設定ファイル | raftstore.inspect-interval | 新しく追加された | TiKVは一定の間隔でRaftstoreコンポーネントのレイテンシーを検査します。この設定項目は検査間隔を指定します。レイテンシーがこの値を超えると、検査はタイムアウトとしてマークされます。デフォルト値は500msです。 |
| TiKV設定ファイル | raftstore.max-peer-down-duration | 修正済み | ピアに許可される最長時間の非アクティブ期間を示します。タイムアウトが発生したピアはdownとマークされ、PDは後でそのピアを削除しようとします。デフォルト値は5mから10mに変更されました。 |
| TiKV設定ファイル | server.raft-client-queue-size | 新しく追加された | TiKV内のRaftメッセージのキューサイズを指定します。デフォルト値は8192です。 |
| TiKV設定ファイル | storage.flow-control.enable | 新しく追加された | フロー制御メカニズムを有効にするかどうかを決定します。デフォルト値はtrueです。 |
| TiKV設定ファイル | storage.flow-control.memtables-threshold | 新しく追加された | kvDBメモリテーブルの数がこのしきい値に達すると、フロー制御メカニズムが動作を開始します。デフォルト値は5です。 |
| TiKV設定ファイル | storage.flow-control.l0-files-threshold | 新しく追加された | kvDB L0ファイルの数がこのしきい値に達すると、フロー制御メカニズムが動作を開始します。デフォルト値は9です。 |
| TiKV設定ファイル | storage.flow-control.soft-pending-compaction-bytes-limit | 新しく追加された | KvDB内の保留中の圧縮バイト数がこのしきい値に達すると、フロー制御メカニズムは一部の書き込み要求を拒否し、エラーServerIsBusyを報告します。デフォルト値は「192GB」です。 |
| TiKV設定ファイル | storage.flow-control.hard-pending-compaction-bytes-limit | 新しく追加された | KvDB内の保留中の圧縮バイト数がこのしきい値に達すると、フロー制御メカニズムはすべての書き込み要求を拒否し、エラーServerIsBusyを報告します。デフォルト値は「1024GB」です。 |
その他
- アップグレード前に、システム変数
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システムテーブルにおいて、クエリ実行中のトランザクションとアイドル状態のトランザクションを区別できるようになりました。3 状態NormalRunning状態と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
LIKE演算子:MOD / %LENGTH()TRIM()関数COALESCE()追加POSITION()ASCII()LOG()関数CRC32()DEGREES()EXP()LN()LOG10()CONV()LOG2()POW()RADIANS()ROUND(decimal)SIN()MOD()- 日付関数
DATE_ADD(string, real)追加DATE()ADDDATE(string, real) - その他
INET6_NTOA()関数INET_ATON()追加INET6_ATONINET_NTOA() - 新しい照合順序が有効な場合、MPPモードでシャッフルハッシュ結合計算とシャッフルハッシュ集計計算をサポートします。
- 基本コードを最適化してMPPのパフォーマンスを向上させる
STRING型からDOUBLE型へのキャストをサポート- 複数のスレッドを使用して右外部結合の非結合データを最適化する
- MPPクエリで古いリージョンを自動的に無効化する機能をサポート
ツール
TiCDC
Dumpling
バグ修正
TiDB
SET型列#25669でマージ結合を使用すると誤った結果が返される問題を修正しましたIN式の引数#25591におけるデータ破損の問題を修正- GCのセッションがグローバル変数の影響を受けないようにする#24976
- ウィンドウ関数クエリ#25344で
limit使用するときに発生するpanic問題を修正 Limit#24636を使用してパーティションテーブルをクエリしたときに返される誤った値を修正しましたIFNULLENUMまたはSETタイプの列#24944に正しく反映されない問題を修正- 結合サブクエリの
countfirst_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オーナーが異常終了するバグを修正
- チェンジフィードの作成が成功した直後に失敗するバグを修正#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