TiDB5.2リリースノート
発売日:2021年8月27日
TiDBバージョン:5.2.0
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のラフトメッセージのキューサイズを指定します。デフォルト値は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_mode
がWARN
からOFF
に変更されます。 - アップグレードする前に、TiDB構成
feedback-probability
の値を確認してください。値が0
でない場合、アップグレード後に「回復可能なゴルーチンのパニック」エラーが発生しますが、このエラーはアップグレードには影響しません。 - TiDBは、MySQL5.7のnoop変数
innodb_default_row_format
と互換性があります。この変数を設定しても効果はありません。 #23541 - TiDB 5.2以降、システムセキュリティを向上させるために、クライアントからの接続用にトランスポート層を暗号化することをお勧めします(必須ではありません)。 TiDBは、TiDBで暗号化を自動的に構成して有効にする自動TLS機能を提供します。自動TLS機能を使用するには、TiDBをアップグレードする前に、TiDB構成ファイルの
security.auto-tls
をtrue
に設定します。 - MySQL 8.0からの移行を容易にし、セキュリティを向上させるために、
caching_sha2_password
の認証方法をサポートします。
新機能
SQL
式インデックスでのいくつかの関数の使用のサポート
式インデックスは、式に作成できる特殊なインデックスの一種です。式インデックスが作成された後、TiDBは式ベースのクエリをサポートします。これにより、クエリのパフォーマンスが大幅に向上します。
Oracleの
translate
機能をサポートするtranslate
関数は、文字列内で出現するすべての文字を他の文字に置き換えます。 TiDBでは、この関数はOracleのように空の文字列をNULL
として扱いません。こぼれるHashAggをサポートする
HashAggをディスクにこぼすことをサポートします。 HashAgg演算子を含むSQLステートメントがメモリ不足(OOM)を引き起こした場合、この演算子の同時実行性を
1
に設定して、ディスクスピルをトリガーし、メモリストレスを軽減することができます。オプティマイザのカーディナリティ推定の精度を向上させる
- TiDBによるTopN/Limitの推定の精度を向上させます。たとえば、
order by col limit x
の条件を含む大きなテーブルのページネーションクエリの場合、TiDBは適切なインデックスをより簡単に選択し、クエリの応答時間を短縮できます。 - 範囲外推定の精度を向上させます。たとえば、1日の統計が更新されていない場合でも、TiDBは
where date=Now()
を含むクエリに対応するインデックスを正確に選択できます。 tidb_opt_limit_push_down_threshold
変数を導入して、Limit / TopNをプッシュダウンするオプティマイザーの動作を制御します。これにより、推定が間違っているためにLimit/TopNをプッシュダウンできない場合があるという問題が解決されます。
- TiDBによるTopN/Limitの推定の精度を向上させます。たとえば、
オプティマイザのインデックス選択を改善する
インデックス選択のプルーニングルールを追加します。統計を比較に使用する前に、TiDBはこれらのルールを使用して、選択される可能性のあるインデックスの範囲を絞り込みます。これにより、最適でないインデックスを選択する可能性が低くなります。
取引
Lock Viewの一般提供(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がスタックしています。
- いかだ選挙がタイムアウトし、その結果、ノードリーダーが転送されます。
この新しいメカニズムは、フロー制御アルゴリズムを改善して、書き込みトラフィックが多い場合のQPSの低下を軽減します。
クラスタの単一の低速TiKVノードによって引き起こされた影響を自動的に検出して回復します
TiKVは、低速ノード検出メカニズムを導入しています。このメカニズムは、TiKV Raftstoreのレートを検査してスコアを計算し、ストアのハートビートを介してスコアをPDに報告します。一方、PDに
evict-slow-store-scheduler
のスケジューラーを追加して、単一の低速TiKVノードのリーダーを自動的に削除します。このようにして、クラスタ全体への影響が軽減されます。同時に、問題をすばやく特定して解決するのに役立つ、低速ノードに関するアラート項目がさらに導入されています。
データ移行
データ移行(DM)の操作を簡素化する
DM v2.0.6は、VIPを使用してデータソースの変更イベント(フェイルオーバーまたは計画変更)を自動的に識別し、新しいデータソースインスタンスに自動的に接続して、データ複製の待ち時間を短縮し、操作手順を簡素化できます。
TiDB Lightningは、CSVデータでカスタマイズされたラインターミネータをサポートし、MySQL LOADDATACSVデータ形式と互換性があります。その後、データフローアーキテクチャで直接TiDBLightningを使用できます。
TiDBデータ共有サブスクリプション
TiCDCは、HTTPプロトコル(OpenAPI)を使用したTiCDCタスクの管理をサポートしています。これは、Kubernetesとオンプレミス環境の両方にとってよりユーザーフレンドリーな操作方法です。 (実験的特徴)
展開と運用
AppleM1チップを搭載したMacコンピュータでのtiup playground
コマンドの実行をサポートします。
機能の強化
ツール
TiCDC
TiDB Lightning
Dumpling
- MySQL互換データベースのバックアップをサポートしますが、
START TRANSACTION ... WITH CONSISTENT SNAPSHOT
またはSHOW CREATE TABLE
をサポートしませ#311
- MySQL互換データベースのバックアップをサポートしますが、
改善
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
by(original_sql
)update_time
の結果の注文を#26139- バインディングが存在する場合のクエリ最適化のロジックを改善し、クエリの最適化時間を短縮します#26141
- 「削除済み」ステータスのバインディングのガベージコレクションの自動完了をサポート#26206
- #26930の結果でクエリ最適化にバインディングが使用されているかどうかを
EXPLAIN VERBOSE
サポート - 新しいステータスバリエーション
last_plan_binding_update_time
を追加して、現在のTiDBインスタンス#26340のバインディングキャッシュに対応するタイムスタンプを表示します。 - バインディングエボリューションを開始するとき、または
admin evolve bindings
を実行して、他の機能に影響を与えるベースラインエボリューション(オンプレミスのTiDBバージョンでは実験的機能であるため現在無効になっています)を禁止するときのエラーの報告をサポートします#26333
- 内蔵機能
PD
TiFlash
LIKE
の追加:MOD / %
- 文字列
TRIM()
をPOSITION()
しCOALESCE()
LENGTH()
ASCII()
POW()
LOG2()
MOD()
LOG10()
SIN()
RADIANS()
ROUND(decimal)
CONV()
CRC32()
DEGREES()
EXP()
LN()
LOG()
- 日付関数の
DATE_ADD(string, real)
DATE()
ADDDATE(string, real)
- 他の関数を
INET6_NTOA()
しINET_ATON()
INET6_ATON
INET_NTOA()
- 新しい照合順序が有効になっている場合、MPPモードでシャッフルハッシュ結合計算とシャッフルハッシュ集計計算をサポートします
- 基本コードを最適化してMPPパフォーマンスを向上させる
STRING
タイプからDOUBLE
タイプへのキャストをサポート- 複数のスレッドを使用して、右外部結合で結合されていないデータを最適化します
- MPPクエリで古いリージョンを自動的に無効にすることをサポート
ツール
TiCDC
Dumpling
バグの修正
TiDB
SET
型列#25669でマージ結合を使用すると誤った結果が返される問題を修正します。IN
式の引数#25591のデータ破損の問題を修正します- GCのセッションがグローバル変数の影響を受けないようにする#24976
- ウィンドウ関数クエリ#25344で
limit
を使用するときに発生するパニックの問題を修正します Limit
を使用してパーティションテーブルをクエリするときに返される誤った値を修正し#24636IFNULL
がENUM
またはSET
タイプの列#24944で正しく有効にならない問題を修正します- 結合サブクエリの
count
を#24865に変更することによって引き起こされる間違った結果を修正しfirst_row
TopN
演算子#24930でParallelApply
を使用した場合に発生するクエリハングの問題を修正します。- 複数列のプレフィックスインデックスを使用して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へのクエリのバックオフをトリガーできない問題を修正し#24421 #23665
only_full_group_by
をチェックするときに発生するindex-out-of-range
のエラーを修正します#23839 )- 相関サブクエリでのインデックス結合の結果が間違っている問題を修正します#25799
TiKV
PD
TiFlash
- 分割の失敗が原因でTiFlashが再起動し続ける問題を修正します
- TiFlashがデルタデータを削除できないという潜在的な問題を修正します
- TiFlashが
CAST
関数の非バイナリ文字に間違ったパディングを追加するバグを修正します - 複雑な
GROUP BY
列の集計クエリを処理するときの誤った結果の問題を修正します - 書き込み圧力が高い場合に発生するTiFlashパニックの問題を修正します
- 右のジョンキーがNULL可能ではなく、左の結合キーがNULL可能である場合に発生するパニックを修正します
read-index
のリクエストに時間がかかる可能性のある問題を修正します- 読み取り負荷が大きいときに発生するパニックの問題を修正します
Date_Format
の関数がSTRING
の型の引数とNULL
の値で呼び出されたときに発生する可能性のあるパニックの問題を修正します
ツール
TiCDC
- チェックポイント#1902を更新するときにTiCDC所有者が異常終了するバグを修正します
- 作成が成功した直後にchangefeedが失敗するバグを修正します#2113
- ルールフィルター#1625の形式が無効なためにchangefeedが失敗するバグを修正します
- TiCDC所有者がパニックに陥ったときに発生する可能性のあるDDL損失の問題を修正します#1260
- デフォルトのsort-engineオプション#2373での4.0.xクラスターとのCLI互換性の問題を修正します
- TiCDCが
ErrSchemaStorageTableMiss
エラー#2422を取得したときにchangefeedが予期せずリセットされる可能性があるバグを修正します - TiCDCが
ErrGCTTLExceeded
エラー#2391を取得したときにchangefeedを削除できないバグを修正します - TiCDCが大きなテーブルを#1259に同期できないバグを修正し#2424 。
- TiCDCがテーブルを再スケジュールしているときに複数のプロセッサが同じテーブルにデータを書き込む可能性があるバグを修正します#2230
バックアップと復元(BR)
TiDB Lightning
- TiDBLightningがParquetファイル#1272の
DECIMAL
データ型の解析に失敗するバグを修正します - テーブルスキーマの復元時にTiDBLightningが「エラー9007:書き込みの競合」エラーを報告するバグを修正します#1290
- intハンドル#1291のオーバーフローが原因でTiDBLightningがデータのインポートに失敗するバグを修正します
- ローカルバックエンドモードでのデータ損失が原因でTiDBLightningがチェックサム不一致エラーを受け取る可能性があるバグを修正します#1403
- TiDBLightningがテーブルスキーマを復元しているときのクラスター化インデックスとのLightingの非互換性の問題を修正します#1362
- TiDBLightningがParquetファイル#1272の
Dumpling