📣
TiDB Cloud Premium はパブリックプレビュー中です。エンタープライズワークロード向けの無制限のスケーリング、即時の弾力性、高度なセキュリティを提供します。このページは自動翻訳されたものです。原文はこちらからご覧ください。

TiDB 5.2 リリースノート



発売日:2021年8月27日

TiDB バージョン: 5.2.0

バージョン5.2の主な新機能と改善点は以下のとおりです。

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

互換性の変更

システム変数

変数名変更の種類説明
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に設定してください。そうでない場合、アップグレードは失敗します。
  • TiDB クラスターを v4.0 から v5.2 にアップグレードすると、 tidb_multi_statement_modeのデフォルト値がWARNからOFFに変更されます。
  • アップグレード前に、TiDB 設定のfeedback-probabilityの値を確認してください。値が0でない場合、アップグレード後に「panic in the recoverable goroutine」というエラーが発生しますが、このエラーはアップグレードには影響しません。
  • 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()を含むクエリに対して対応するインデックスを正確に選択できます。

    • オプティマイザが Limit/TopN をプッシュダウンする動作を制御するためにtidb_opt_limit_push_down_threshold変数を導入します。これにより、誤った推定のために一部の状況で Limit/TopN をプッシュダウンすることができないという問題が解決されます。

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

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

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

    ユーザー向けドキュメント

トランザクション

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

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

    バージョン5.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状態はRunningIdleの状態に分割されました。

      ユーザー向けドキュメント:

    • クラスタ内のすべての 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スケジューラレイヤーでフロー制御が実行されます。

    • Raftstoreが停止していますが、これはRocksDBの書き込み停止が原因です。

    • Raftの選挙がタイムアウトし、その結果、ノードリーダーが移管されます。

      この新しいメカニズムは、書き込みトラフィックが多い場合にQPS(1秒あたりのクエリ数)が低下するのを軽減するために、フロー制御アルゴリズムを改善します。

      ユーザー向けドキュメント#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

    • TiKV への組み込み関数json_unquote()のプッシュダウンをサポートする #24415
    • デュアルテーブルからunionブランチを削除することをサポートします #25614
    • 集約事業者のコスト係数を最適化する #25241
    • MPP外部結合で、テーブルの行数に基づいて構築テーブルを選択できるようにする #25142
    • リージョンに基づいて、異なるTiFlashノード間でMPPクエリワークロードのバランスを取ることをサポートする #24724
    • MPPクエリ実行後にキャッシュ内の古いリージョンを無効化する機能をサポートする #24432
    • フォーマット指定子%b/%M/%r/%Tに対する組み込み関数str_to_date の MySQL 互換性を向上させる #25767
    • 同じクエリに対して異なるバインディングを再作成した後に、複数の TiDB で一貫性のないバインディング キャッシュが作成される可能性がある問題を修正します #26015
    • アップグレード後に既存のバインディングをキャッシュにロードできない問題を修正しました #23295
    • SHOW BINDINGSの結果を ( original_sqlupdate_time ) で並べ替えることをサポートする #26139
    • バインディングが存在する場合のクエリ最適化ロジックを改善し、クエリの最適化時間を短縮する #26141
    • "deleted"ステータスのバインディングに対してガベージコレクションを自動的に完了する機能をサポートする #26206
    • EXPLAIN VERBOSEの結果で、バインディングがクエリ最適化に使用されているかどうかを表示する機能のサポート #26930
    • 現在の TiDB インスタンスのバインディング キャッシュに対応するタイムスタンプを表示するための新しいステータス バリエーションlast_plan_binding_update_timeを追加します #26340
    • バインディング進化の開始時、またはベースライン進化を禁止するadmin evolve bindings実行時にエラーを報告する機能をサポートする(現在、実験的機能であるため、TiDB Self-Managed バージョンでは無効になっている)。これにより、他の機能に影響が出る。 #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
      • TiCDCは、回復不能なDMLエラーが発生するとすぐに失敗して終了する可能性がある #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
    • IFNULLENUMまたはSETタイプの列に正しく適用されない問題を修正します。 #24944
    • 結合サブクエリ内のcountfirst_rowに変更したことで発生した誤った結果を修正します #24865
    • ParallelApply演算子の下でTopNを使用した場合に発生するクエリのハング問題を修正します #24930
    • 複数列プレフィックスインデックスを使用したSQL文の実行時に、予想よりも多くの結果が返される問題を修正しました #24356
    • <=>演算子が正しく機能しない問題を修正しました #24477
    • 並列演算子Applyのデータ競合問題を修正 #23280
    • PartitionUnion オペレーターの IndexMerge 結果をソートする際にindex out of rangeエラーが報告される問題を修正しました #23919
    • tidb_snapshot変数に予想外に大きな値を設定するとトランザクション分離が損なわれる可能性がある問題を修正しました #25680
    • ODBC スタイルの定数 (例: {d '2020-01-01'} ) を式として使用できない問題を修正しました #25531
    • SELECT DISTINCT Batch Getに変換されることで誤った結果が生じる問題を修正します #25320
    • TiFlashからTiKVへのバックオフクエリがトリガーできない問題を修正#23665 #24421
    • only_full_group_byをチェックした際に発生するindex-out-of-rangeエラーを修正します#23839
    • 相関サブクエリにおけるインデックス結合の結果が間違っている問題を修正しました #25799
  • TiKV

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

    • 複数のスケジューラ間のスケジューリング競合により、期待されるスケジューリングが生成できない問題を修正します#3807 #3778
  • TiFlash

    • 分割エラーが原因でTiFlashが再起動を繰り返す問題を修正します。
    • TiFlashがデルタデータを削除できない可能性のある問題を修正します。
    • TiFlashがCAST関数で非バイナリ文字に誤ったパディングを追加するバグを修正しました。
    • 複雑なGROUP BY列を含む集計クエリを処理する際に、結果が正しくない問題を修正しました。
    • 書き込み負荷が高い場合に発生するTiFlash panic問題を修正します。
    • 右側の結合キーがnull許容でなく、左側の結合キーがnull許容である場合に発生するpanicを修正します。
    • read-indexリクエストの処理に時間がかかる可能性がある問題を修正します。
    • 読み込み負荷が高いときに発生するpanic問題を修正します。
    • Date_FormatpanicがSTRING型の引数とNULLの値で呼び出されたときに発生する可能性のあるパニック問題を修正します。
  • ツール

    • TiCDC

      • TiCDCのオーナーがチェックポイントを更新する際に異常終了するバグを修正しました #1902
      • 変更フィードが正常に作成された直後に失敗するバグを修正 #2113
      • ルールフィルターの形式が不正なためにchangefeedが失敗するバグを修正しました #1625
      • TiCDCオーナーがパニックになった際に発生する可能性のあるDDL損失問題を修正 #1260
      • デフォルトのソートエンジンオプションにおける4.0.xクラスターとのCLI互換性の問題を修正 #2373
      • TiCDC がErrSchemaStorageTableMiss エラーを受け取った際に、changefeed が予期せずリセットされる可能性があるバグを修正しました。 #2422
      • TiCDC ErrGCTTLExceeded エラーを受け取った際に changefeed を削除できないバグを修正しました。 #2391
      • TiCDCが大きなテーブルをcdclogに同期できないバグを修正#1259 #2424
      • TiCDCがテーブルを再スケジュールしている際に、複数のプロセッサが同じテーブルにデータを書き込む可能性があるバグを修正しました #2230
    • Backup & Restore (BR)

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

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

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

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