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 memtable の数がこのしきい値に達すると、フロー制御メカニズムが動作し始めます。デフォルト値は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 機能を提供します。 Auto 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()含むクエリに対応するインデックスを正確に選択できます。
    • tidb_opt_limit_push_down_threshold変数を導入して、Limit/TopN を押し下げるオプティマイザーの動作を制御します。これにより、間違った推定により、状況によっては Limit/TopN を押し下げることができない問題が解決されます。

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

  • オプティマイザーのインデックス選択を改善しました。

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

    ユーザードキュメント

トランザクション

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

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

    v5.2 では、Lock ビューに次の機能強化が加えられています。

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

    ユーザードキュメント:

    • クラスター内のすべての 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コマンドの実行をサポートします。

機能強化

  • ツール

    • 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
    • 書式指定子%b/%M/%r/%T #25767の組み込み関数str_to_dateの MySQL 互換性を向上します。
    • 同じクエリに対して異なるバインディングを再作成した後、複数の TiDB で一貫性のないバインディング キャッシュが作成される可能性がある問題を修正します#26015
    • アップグレード#23295後に既存のバインディングをキャッシュにロードできない問題を修正
    • SHOW BINDINGSの結果を ( original_sql , update_time ) #26139で順序付けするサポート
    • バインディングが存在する場合のクエリ最適化のロジックを改善し、クエリの最適化時間を短縮します#26141
    • 「削除済み」ステータスのバインディングに対するガベージコレクションの自動完了のサポート#26206
    • EXPLAIN VERBOSE #26930の結果でバインディングがクエリ最適化に使用されているかどうかを示すサポート
    • 新しいステータス バリエーションlast_plan_binding_update_timeを追加して、現在の TiDB インスタンスのバインディング キャッシュに対応するタイムスタンプを表示します#26340
    • バインディングの進化を開始するとき、または他の機能に影響を与えるベースラインの進化 (実験的機能であるため TiDB セルフホスト バージョンでは現在無効になっています) を禁止するadmin evolve bindingsを実行するときのエラー レポートのサポート#26333
  • PD

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

    • 演算子の追加: 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_ATONINET6_NTOA()
    • 新しい照合順序が有効な場合、MPP モードでシャッフル ハッシュ結合計算とシャッフル ハッシュ集計計算をサポートします
    • 基本コードを最適化して MPP パフォーマンスを向上させる
    • STRING型からDOUBLE型へのキャストをサポート
    • 複数のスレッドを使用して右外部結合の非結合データを最適化する
    • MPP クエリでの古いリージョンの自動無効化のサポート
  • ツール

    • TiCDC

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

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

バグの修正

  • TiDB

    • SET型列#25669でマージ結合を使用すると不正な結果が返される問題を修正
    • IN式の引数#25591のデータ破損の問題を修正します。
    • GC のセッションがグローバル変数の影響を受けるのを回避します#24976
    • ウィンドウ関数クエリ#25344limit使用したときに発生するpanicの問題を修正します。
    • Limit #24636を使用してパーティションテーブルをクエリしたときに返される間違った値を修正しました。
    • ENUMまたはSETタイプの列#24944IFNULLが正しく反映されない問題を修正
    • 結合サブクエリの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

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

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

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

    • TiCDC

      • チェックポイント#1902の更新時にTiCDCオーナーが異常終了するバグを修正
      • 変更フィードの作成が成功した直後に失敗するバグを修正#2113
      • ルールフィルター#1625の無効な形式により変更フィードが失敗するバグを修正
      • TiCDC 所有者がパニックになった場合の潜在的な DDL 損失の問題を修正します#1260
      • デフォルトのソートエンジンオプション#2373での 4.0.x クラスターとの CLI 互換性の問題を修正
      • TiCDC がErrSchemaStorageTableMissエラー#2422を取得したときに変更フィードが予期せずリセットされる可能性があるバグを修正
      • TiCDC がErrGCTTLExceededエラー#2391を取得した場合に変更フィードを削除できないバグを修正
      • 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がスタックする問題を修正しました。

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

Playground
新規
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。
製品
TiDB Cloud
TiDB
価格
PoC お問い合わせ
エコシステム
TiKV
TiFlash
OSS Insight
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.