TiDB 5.2 リリースノート

発売日:2021年8月27日

TiDB バージョン: 5.2.0

v5.2 の主な新機能と改善点は次のとおりです。

  • クエリのパフォーマンスを大幅に向上させるために、式インデックスで複数の関数を使用するサポート
  • オプティマイザーのカーディナリティ推定の精度を向上させて、最適な実行計画を選択できるようにします
  • トランザクション ロック イベントを監視し、デッドロックの問題をトラブルシューティングするための Lock ビュー機能の一般提供 (GA) を発表
  • TiFlash の I/O トラフィック制限機能を追加して、TiFlash の読み取りと書き込みの安定性を向上させます
  • TiKV は、以前の RocksDB 書き込みストール メカニズムを置き換える新しいフロー制御メカニズムを導入して、TiKV フロー制御の安定性を向上させます。
  • データ移行 (DM) の運用と保守を簡素化し、管理コストを削減します。
  • TiCDC は、HTTP プロトコル OpenAPI をサポートして、TiCDC タスクを管理します。 Kubernetes とオンプレミス環境の両方で、よりユーザー フレンドリーな操作方法を提供します。 (実験的機能)

互換性の変更

ノート:

以前の 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は非推奨であり、今後使用することはお勧めしません。

Configuration / コンフィグレーションファイルのパラメーター

Configuration / コンフィグレーションファイルConfiguration / コンフィグレーション項目タイプを変更説明
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でない場合、アップグレード後に「回復可能なゴルーチンでpanic」エラーが発生しますが、このエラーはアップグレードには影響しません。
  • TiDB は現在、 MySQL 5.7の noop 変数innodb_default_row_formatと互換性があります。この変数を設定しても効果はありません。 #23541
  • TiDB 5.2 以降では、システムのセキュリティを向上させるために、クライアントからの接続のトランスポートレイヤーを暗号化することが推奨されています (必須ではありません)。 TiDB は、TiDB での暗号化を自動的に構成して有効にする Auto TLS 機能を提供します。自動 TLS 機能を使用するには、TiDB をアップグレードする前に、TiDB 構成ファイルでsecurity.auto-tlstrueに設定します。
  • MySQL 8.0 からの移行を容易にし、セキュリティを向上させるために、 caching_sha2_passwordの認証方法をサポートします。

新機能

SQL

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

    式インデックスは、式で作成できる特別なインデックスの一種です。式インデックスが作成されると、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 はこれらのルールを使用して、選択可能なインデックスの範囲を絞り込みます。これにより、最適でないインデックスが選択される可能性が減少します。

    ユーザー文書

取引

  • Lock ビューの一般提供 (GA)

    ロックビュー機能は、ペシミスティック ロックのロック競合とロック待機に関する詳細情報を提供します。これは、DBA がトランザクション ロック イベントを観察し、デッドロックの問題をトラブルシューティングするのに役立ちます。

    v5.2 では、Lock ビューに対して次の機能強化が行われました。

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

    ユーザー ドキュメント:

    • クラスター内のすべての TiKV ノードで発生している悲観的なロック待機イベントをビューします。 DATA_LOCK_WAITS
    • TiDB ノードで最近発生したデッドロック エラーをビューする: DEADLOCKS
    • TiDB ノードで実行中のトランザクションをビューする: TIDB_TRX
  • AUTO_RANDOMまたはSHARD_ROW_ID_BITS属性を持つテーブルにインデックスを追加するユーザー シナリオを最適化します。

安定性

  • TiFlash I/O トラフィック制限を追加

    この新機能は、ディスク帯域幅が小さく特定のサイズのクラウド ストレージに適しています。デフォルトでは無効になっています。

    TiFlash I/O Rate Limiter は、読み取りタスクと書き込みタスク間の 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 とオンプレミス環境の両方にとってよりユーザーフレンドリーな操作方法です。 (実験的機能)

#2411

展開と運用

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

機能強化

  • ツール

    • TiCDC

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

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

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

改良点

  • TiDB

    • 組み込み関数json_unquote()を TiKV #24415にプッシュ ダウンするサポート
    • デュアル テーブル#25614からのunionのブランチの削除をサポート
    • 集計演算子のコスト ファクター#25241を最適化する
    • MPP 外部結合が、テーブルの行数#25142に基づいて構築テーブルを選択できるようにします。
    • リージョン#24724に基づく異なる TiFlash ノード間での MPP クエリ ワークロードのバランス調整をサポート
    • MPP クエリ実行後のキャッシュ内の古いリージョンの無効化をサポート#24432
    • フォーマット指定子の組み込み関数str_to_dateの MySQL 互換性を向上させる%b/%M/%r/%T #25767
    • 同じクエリに対して異なるバインディングを再作成した後、複数の TiDB で一貫性のないバインディング キャッシュが作成される可能性がある問題を修正します#26015
    • アップグレード後に既存のバインディングをキャッシュにロードできない問題を修正します#23295
    • ( original_sql , update_time ) #26139によるSHOW BINDINGSの結果の順序付けをサポート
    • バインディングが存在する場合のクエリ最適化のロジックを改善し、クエリの最適化時間を短縮します#26141
    • 「削除済み」ステータスのバインディングのガベージ コレクションの自動完了をサポート#26206
    • EXPLAIN VERBOSE #26930の結果でバインディングがクエリの最適化に使用されているかどうかを示すサポート
    • 新しいステータス バリエーションlast_plan_binding_update_timeを追加して、現在の TiDB インスタンスのバインディング キャッシュに対応するタイムスタンプを表示します#26340
    • 他の機能に影響を与えるベースラインの進化 (オンプレミスの TiDB バージョンでは現在、実験的機能であるため無効になっていadmin evolve bindings ) を禁止するために、バインディングの進化の開始時または実行時のエラー報告をサポートします#26333
  • PD

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

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

    • TiCDC

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

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

バグの修正

  • TiDB

    • SET型の列#25669でマージ結合を使用すると、誤った結果が返される問題を修正します。
    • IN式の引数#25591のデータ破損の問題を修正します
    • GC のセッションがグローバル変数の影響を受けないようにする#24976
    • ウィンドウ関数クエリでlimitを使用すると発生するpanicの問題を修正します#25344
    • Limit #24636を使用してパーティション分割されたテーブルをクエリするときに返される間違った値を修正します
    • ENUMまたはSETタイプの列#24944IFNULLが正しく反映されない問題を修正
    • 結合サブクエリのcountfirst_row #24865に変更することによって引き起こされる誤った結果を修正します。
    • TopN演算子#24930の下でParallelApplyを使用すると発生するクエリ ハングの問題を修正します。
    • 複数列のプレフィックス インデックス#24356を使用して SQL ステートメントを実行すると、予想よりも多くの結果が返される問題を修正します。
    • <=>オペレーターが正しく発効できない問題を修正#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

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

    • 複数のスケジューラー間でのスケジュールの競合により、期待されるスケジュールが生成されない問題を修正します#3807 #3778
  • ティフラッシュ

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

    • TiCDC

      • チェックポイント#1902の更新時にTiCDCオーナーが異常終了する不具合を修正
      • changefeed の作成が成功した直後に失敗するバグを修正#2113
      • ルール フィルター#1625の無効な形式が原因で変更フィードが失敗するバグを修正します。
      • TiCDC 所有者がパニックに陥ったときの潜在的な DDL 損失の問題を修正します#1260
      • デフォルトの sort-engine オプション#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データ型の解析に失敗するバグを修正
      • テーブル スキーマの復元時にTiDB Lightningが「エラー 9007: 書き込み競合」エラーを報告するバグを修正します#1290
      • TiDB Lightningが int ハンドルのオーバーフローによりデータのインポートに失敗する不具合を修正#1291
      • ローカル バックエンド モード#1403でのデータ損失により、 TiDB Lightningでチェックサムの不一致エラーが発生する可能性があるバグを修正
      • TiDB Lightningがテーブル スキーマを復元しているときに、クラスタ化されたインデックスでライティングの非互換性の問題を修正します#1362
    • Dumpling

      • Dumpling GC セーフポイントの設定が遅すぎるためにデータのエクスポートが失敗するバグを修正#290
      • 特定の MySQL バージョン#322でアップストリーム データベースからテーブル名をエクスポートするときにDumplingがスタックする問題を修正します。
エコシステム
TiDB
TiKV
TiSpark
Chaos Mesh
© 2022 PingCAP. All Rights Reserved.