重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

TiDB5.2リリースノート

発売日:2021年8月27日

TiDBバージョン:5.2.0

警告

このバージョンにはいくつかの既知の問題があり、これらの問題は新しいバージョンで修正されています。最新の5.2.xバージョンを使用することをお勧めします。

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

  • 式インデックスでのいくつかの関数の使用をサポートして、クエリのパフォーマンスを大幅に向上させます
  • オプティマイザーのカーディナリティ推定の精度を向上させて、最適な実行プランの選択を支援します
  • ロックビュー機能の一般提供(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 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は、MySQL5.7のnoop変数innodb_default_row_formatと互換性がありMySQL 5.7。この変数を設定しても効果はありません。 #23541
  • TiDB 5.2以降、システムセキュリティを向上させるために、クライアントからの接続用にトランスポート層を暗号化することをお勧めします(必須ではありません)。 TiDBは、TiDBで暗号化を自動的に構成して有効にする自動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()を含むクエリに対応するインデックスを正確に選択できます。
    • tidb_opt_limit_push_down_threshold変数を導入して、Limit / TopNをプッシュダウンするオプティマイザーの動作を制御します。これにより、推定が間違っているために、状況によってはLimit/TopNをプッシュダウンできないという問題が解決されます。

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

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

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

    ユーザードキュメント

取引

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

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

    v5.2では、ロックビューに次の機能拡張が行われました。

    • ロックビュー関連テーブルの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レートリミッターは、読み取りタスクと書き込みタスクの間のI/Oリソースの過度の競合を回避するための新しいメカニズムを提供します。読み取りタスクと書き込みタスクへの応答のバランスを取り、読み取り/書き込みワークロードに応じてレートを自動的に制限します。

    ユーザードキュメント

  • TiKVフロー制御の安定性を向上させる

    TiKVは、以前のRocksDB書き込みストールメカニズムを置き換える新しいフロー制御メカニズムを導入します。書き込みストールメカニズムと比較して、この新しいメカニズムは、フォアグラウンド書き込みの安定性への影響を軽減します。

    具体的には、RocksDB圧縮のストレスが蓄積されると、次の問題を回避するために、RocksDBレイヤーではなくTiKVスケジューラーレイヤーでフロー制御が実行されます。

    • RocksDBの書き込みストールが原因でRaftstoreがスタックしています。
    • 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 LOADDATACSVデータ形式と互換性があります。その後、データフローアーキテクチャでTiDB Lightningを直接使用できます。

    #1297

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

TiCDCは、HTTPプロトコル(OpenAPI)を使用したTiCDCタスクの管理をサポートしています。これは、Kubernetesとオンプレミス環境の両方にとってよりユーザーフレンドリーな操作方法です。 (実験的特徴)

#2411

展開と運用

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

機能の強化

  • ツール

    • TiCDC

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

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

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

改善点

  • TiDB

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

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

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

    • TiCDC

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

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

バグの修正

  • TiDB

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

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

    • 複数のスケジューラー間のスケジューリングの競合が原因で、期待されるスケジューリングを生成できない問題を修正します#3807 #3778
  • 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
      • デフォルトのsort-engineオプション#2373での4.0.xクラスターとのCLI互換性の問題を修正します
      • TiCDCがErrSchemaStorageTableMissエラー#2422を取得したときにchangefeedが予期せずリセットされる可能性があるバグを修正します
      • TiCDCがErrGCTTLExceededエラー#2391を取得したときにチェンジフィードを削除できないバグを修正します
      • TiCDCが大きなテーブルを#1259に同期できないバグを修正し#2424
      • TiCDCがテーブルを再スケジュールしているときに複数のプロセッサが同じテーブルにデータを書き込む可能性があるバグを修正します#2230
    • バックアップと復元(BR)

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

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

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