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 にアップグレードする場合、すべての中間バージョンの互換性変更ノートを知りたい場合は、対応するバージョンのリリースノートを確認できます。

システム変数

変数名タイプを変更説明
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 memtables の数がこのしきい値に達すると、フロー制御メカニズムが動作を開始します。デフォルト値は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_modeWARNからOFFに変更されます。
  • アップグレード前に、 TiDB 構成feedback-probabilityの値を確認してください。値が0でない場合、アップグレード後に「回復可能な goroutine でpanic」エラーが発生しますが、このエラーはアップグレードには影響しません。
  • TiDB はMySQL 5.7の noop 変数innodb_default_row_formatと互換性を持つようになりました。この変数を設定しても効果はありません#23541
  • TiDB 5.2 以降では、システム セキュリティを向上させるために、クライアントからの接続のトランスポートレイヤーを暗号化することが推奨されます (必須ではありません)。TiDB は、TiDB で暗号化を自動的に構成して有効にする Auto TLS 機能を提供します。Auto TLS 機能を使用するには、TiDB をアップグレードする前に、TiDB 構成ファイルでsecurity.auto-tls trueに設定します。
  • MySQL 8.0 からの移行を容易にし、セキュリティを向上させるために、 caching_sha2_password認証方法をサポートします。

新機能

構文

  • 式インデックスで複数の関数の使用をサポート

    式インデックスは、式に作成できる特殊なインデックスの一種です。式インデックスが作成されると、TiDB は式ベースのクエリをサポートし、クエリのパフォーマンスが大幅に向上します。

    ユーザードキュメント , #25150

  • Oracleのtranslate機能をサポート

    translate関数は、文字列内のすべての文字を他の文字に置き換えます。TiDB では、この関数は Oracle のように空の文字列をNULLとして扱いません。

    ユーザードキュメント

  • HashAggの流出をサポート

    HashAgg のディスクへのスピルをサポートします。HashAgg 演算子を含む SQL ステートメントによってメモリ(OOM) が発生した場合、この演算子の同時実行性を1に設定してディスク スピルをトリガーし、メモリのストレスを軽減することができます。

    ユーザードキュメント , #25882

  • オプティマイザのカーディナリティ推定の精度を向上

    • TiDB の TopN/Limit の推定精度が向上します。たとえば、 order by col limit x条件を含む大きなテーブルに対するページネーション クエリの場合、TiDB は適切なインデックスをより簡単に選択し、クエリの応答時間を短縮できます。
    • 範囲外の推定の精度を向上します。たとえば、1 日の統計が更新されていない場合でも、TiDB はwhere date=Now()を含むクエリに対応するインデックスを正確に選択できます。
    • Limit/TopN を押し下げるオプティマイザーの動作を制御するtidb_opt_limit_push_down_threshold変数を導入します。これにより、誤った推定のために状況によっては Limit/TopN を押し下げることができないという問題が解決されます。

    ユーザードキュメント , #26085

  • オプティマイザのインデックス選択を改善する

    インデックス選択のためのプルーニング ルールを追加します。統計を比較に使用する前に、TiDB はこれらのルールを使用して、選択可能なインデックスの範囲を絞り込み、最適でないインデックスが選択される可能性を減らします。

    ユーザードキュメント

トランザクション

  • ロックビューの一般提供 (GA)

    ロックビュー機能は、ロックの競合や悲観的ロックのロック待機に関する詳細情報を提供するため、DBA はトランザクション ロック イベントを観察し、デッドロックの問題をトラブルシューティングできます。

    v5.2 では、ロックビューに次の機能強化が加えられました。

    • ロック ビュー関連のテーブルの SQL ダイジェスト列に加えて、対応する正規化された SQL テキストを表示する列をこれらのテーブルに追加します。SQL ダイジェストに対応するステートメントを手動でクエリする必要はありません。
    • クラスター内の一連の SQL ダイジェストに対応する正規化された SQL ステートメント (形式と引数のない形式) を照会するTIDB_DECODE_SQL_DIGESTS関数を追加します。これにより、トランザクションによって過去に実行されたステートメントを照会する操作が簡素化されます。
    • システム テーブルDATA_LOCK_WAITSDEADLOCKSに列を追加して、キーから解釈されたテーブル名、行 ID、インデックス値、その他のキー情報を表示します。これにより、キーが属するテーブルの検索やキー情報の解釈などの操作が簡素化されます。
    • DEADLOCKSテーブルで再試行可能なデッドロック エラーの情報の収集をサポートします。これにより、このようなエラーによって発生する問題のトラブルシューティングが容易になります。エラー収集はデフォルトでは無効になっていますが、 pessimistic-txn.deadlock-history-collect-retryable構成を使用して有効にすることができます。
    • TIDB_TRXシステム テーブルでクエリ実行トランザクションとアイドル トランザクションを区別することをサポートします。3 NormalRunningIdle状態に分割されます。

    ユーザードキュメント:

    • クラスター内のすべての 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 の低下を軽減します。

    ユーザードキュメント , #10137

  • クラスター内の単一の低速 TiKV ノードによって引き起こされる影響を自動的に検出して回復します。

    TiKV は、低速ノード検出メカニズムを導入しています。このメカニズムは、TiKV Raftstoreのレートを検査してスコアを計算し、ストア ハートビートを通じて PD にスコアを報告します。同時に、PD にevict-slow-store-schedulerスケジューラを追加して、単一の低速 TiKV ノードのリーダーを自動的に排除します。このようにして、クラスター全体への影響が軽減されます。同時に、低速ノードに関するアラート項目が追加され、問題を迅速に特定して解決するのに役立ちます。

    ユーザードキュメント , #10539

データ移行

  • データ移行(DM)の運用を簡素化

    DM v2.0.6 は、VIP を使用してデータ ソースの変更イベント (フェイルオーバーまたは計画変更) を自動的に識別し、新しいデータ ソース インスタンスに自動的に接続できるため、データ レプリケーションのレイテンシーが短縮され、操作手順が簡素化されます。

  • TiDB Lightning は、 CSV データ内のカスタマイズされた行末文字をサポートし、MySQL LOAD DATA CSV データ形式と互換性があります。そのため、データ フローアーキテクチャでTiDB Lightning を直接使用できます。

    #1297

TiDBデータ共有サブスクリプション

TiCDC は、HTTP プロトコル (OpenAPI) を使用して TiCDC タスクを管理することをサポートしています。これは、Kubernetes とセルフホスト環境の両方にとって、よりユーザーフレンドリーな操作方法です。 (Experimental機能)

#2411

展開と運用

Apple M1 チップを搭載した Mac コンピューターでtiup playgroundコマンドの実行をサポートします。

機能強化

  • ツール

    • ティCDC

      • TiDB用に設計されたバイナリMQフォーマットを追加します。これはJSON #1621に基づくオープンプロトコルよりもコンパクトです。
      • ファイルソーター#2114のサポートを削除
      • ログローテーション構成のサポート#2182
    • TiDB Lightning

      • カスタマイズされた行末記号をサポート( \r\nを除く) #1297
      • 式インデックスと仮想生成列に依存するインデックスをサポート#1407
    • Dumpling

      • MySQL互換データベースのバックアップをサポートしますが、 START TRANSACTION ... WITH CONSISTENT SNAPSHOTまたはSHOW CREATE TABLE #311サポートしていません。

改善点

  • ティビ

    • 組み込み関数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ベースライン進化を禁止する (これは実験的機能であるため、TiDB Self-Managed バージョンでは現在無効になっています) 他の機能#26333に影響します
  • PD

    • ホットリージョンスケジューリングにQPSディメンションを追加し、スケジューリングの優先順位の調整をサポートします#3869
    • TiFlash #3900の書き込みホットスポットのホットリージョンバランススケジューリングをサポート
  • TiFlash

    • 演算子の追加: MOD / %LIKE
    • COALESCE() POSITION()関数LENGTH()追加TRIM() ASCII()
    • LN()関数DEGREES() LOG2() LOG() LOG10() EXP() CONV() CRC32() POW() RADIANS() ROUND(decimal) SIN() MOD()
    • DATE_ADD(string, real)関数DATE()追加: ADDDATE(string, real)
    • INET6_ATONの関数INET_ATON()追加INET6_NTOA() INET_NTOA()
    • 新しい照合順序が有効な場合、MPP モードでシャッフルハッシュ結合計算とシャッフルハッシュ集計計算をサポートします。
    • 基本コードを最適化してMPPのパフォーマンスを向上させる
    • STRING型からDOUBLE型へのキャストをサポート
    • 複数のスレッドを使用して右外部結合の非結合データを最適化する
    • MPP クエリで古いリージョンを自動的に無効化する機能をサポート
  • ツール

    • ティCDC

      • kvクライアント#1899の増分スキャンに同時実行制限を追加する
      • TiCDCは常に内部的に古い値を引き出すことができます#2271
      • 回復不可能なDMLエラーが発生すると、TiCDCは失敗してすぐに終了する可能性があります#1928
      • resolve lockリージョンが初期化された直後には実行できません#2235
      • ワーカープールを最適化して、高同時実行時のゴルーチンの数を減らす#2201
    • Dumpling

      • TiDBメモリを節約するために、常に TiDB v3.x テーブルをtidb_rowidに分割することをサポートします#301
      • 安定性を向上させるために、 information_schemaへのDumplingのアクセスを減らす#305

バグ修正

  • ティビ

    • SET型列#25669でマージ結合を使用すると誤った結果が返される問題を修正
    • IN式の引数#25591のデータ破損の問題を修正
    • GCのセッションがグローバル変数の影響を受けないようにする#24976
    • ウィンドウ関数クエリ#25344limit使用した場合に発生するpanic問題を修正
    • Limit #24636を使用してパーティションテーブルをクエリしたときに返される誤った値を修正
    • IFNULL ENUMまたは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 DISTINCT Batch Getに変換すると誤った結果になる問題を修正#25320
    • TiFlashからTiKVへのバックオフクエリがトリガーされない問題を修正#23665 #24421
    • only_full_group_by #23839をチェックするときに発生するindex-out-of-rangeエラーを修正します)
    • 相関サブクエリのインデックス結合の結果が間違っている問題を修正#25799
  • ティクヴ

    • 間違ったtikv_raftstore_hibernated_peer_state指標#10330を修正する
    • コプロセッサ#10176の関数json_unquote()の間違った引数の型を修正
    • 場合によってはACIDの破壊を避けるために、正常なシャットダウン中にコールバックのクリアをスキップする#10353 #10307
    • Leader#10347のレプリカ読み取りで読み取りインデックスが共有されるバグを修正しました。
    • DOUBLEDOUBLE #25200に変換する間違った関数を修正
  • PD

    • 複数のスケジューラ間でスケジュールの競合が発生し、期待どおりのスケジュールを生成できない問題を修正#3807 #3778
  • TiFlash

    • 分割失敗によりTiFlash が再起動し続ける問題を修正
    • TiFlashがデルタデータを削除できない潜在的な問題を修正
    • TiFlash がCAST関数で非バイナリ文字に間違ったパディングを追加するバグを修正しました
    • 複雑なGROUP BYの集計クエリを処理するときに誤った結果が返される問題を修正しました。
    • 書き込み圧力が高い場合に発生するTiFlashpanic問題を修正
    • 右の結合キーが null 可能でなく、左の結合キーが null 可能な場合に発生するpanicを修正しました。
    • read-indexリクエストに長い時間がかかる可能性がある問題を修正
    • 読み取り負荷が大きい場合に発生するpanic問題を修正
    • Date_Format関数がSTRING型引数とNULL値で呼び出されたときに発生する可能性のあるpanic問題を修正しました。
  • ツール

    • ティCDC

      • チェックポイント#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)

      • BRが復元中にすべてのシステムテーブルの復元をスキップするバグを修正#1197 #1201
      • cdclog #870を復元するときにBR がDDL 操作を見逃すバグを修正
    • TiDB Lightning

      • TiDB LightningがParquetファイル#1272DECIMALデータ型を解析できないバグを修正
      • テーブル スキーマ#1290を復元するときにTiDB Lightningが「エラー 9007: 書き込み競合」エラーを報告するバグを修正しました。
      • TiDB Lightningがintハンドル#1291のオーバーフローによりデータのインポートに失敗するバグを修正
      • ローカルバックエンドモード#1403でのデータ損失により、 TiDB Lightningがチェックサム不一致エラーを取得する可能性があるバグを修正しました。
      • TiDB Lightning がテーブル スキーマ#1362を復元するときにクラスター化インデックスとの Lightning 非互換性の問題を修正
    • Dumpling

      • Dumpling GC セーフポイントの設定が遅すぎるためにデータのエクスポートが失敗するバグを修正#290
      • 特定の MySQL バージョン#322でアップストリーム データベースからテーブル名をエクスポートするときにDumpling が停止する問題を修正しました。

このページは役に立ちましたか?