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_mode
がWARN
から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-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()
を含むクエリの対応するインデックスを正確に選択できます。 - Limit/TopN を押し下げるオプティマイザーの動作を制御する
tidb_opt_limit_push_down_threshold
変数を導入します。これにより、状況によっては、誤った見積もりが原因で Limit/TopN を押し下げることができないという問題が解決されます。
- TiDB の TopN/Limit の推定の精度を向上させます。たとえば、
オプティマイザのインデックス選択を改善する
インデックス選択のプルーニング ルールを追加します。比較のために統計を使用する前に、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 の低下が軽減されます。
クラスター内の単一の遅い TiKV ノードによって引き起こされた影響を自動的に検出して回復します
TiKV では、低速ノード検出メカニズムが導入されています。このメカニズムは、TiKV Raftstore のレートを検査してスコアを計算し、ストア ハートビートを介して PD にスコアを報告します。一方、PD に
evict-slow-store-scheduler
のスケジューラーを追加して、単一の低速 TiKV ノードのリーダーを自動的に削除します。このようにして、クラスター全体への影響が軽減されます。同時に、遅いノードに関するより多くのアラート項目が導入され、問題を迅速に特定して解決するのに役立ちます。
データ移行
データ移行 (DM) の操作を簡素化
DM v2.0.6 は、VIP を使用してデータ ソースの変更イベント (フェイルオーバーまたはプランの変更) を自動的に識別し、新しいデータ ソース インスタンスに自動的に接続して、データ レプリケーションのレイテンシーを短縮し、操作手順を簡素化できます。
TiDB Lightningは、CSV データでカスタマイズされた行末記号をサポートし、MySQL LOAD DATA CSV データ形式と互換性があります。その後、 TiDB Lightningをデータ フローアーキテクチャで直接使用できます。
TiDB データ共有サブスクリプション
TiCDC は、HTTP プロトコル (OpenAPI) を使用して TiCDC タスクを管理することをサポートしています。これは、Kubernetes とオンプレミス環境の両方にとってよりユーザーフレンドリーな操作方法です。 (実験的機能)
展開と運用
Apple M1 チップを搭載した Mac コンピュータでのtiup playground
コマンドの実行をサポートします。
機能強化
ツール
TiCDC
TiDB Lightning
Dumpling
- MySQL 互換データベースのバックアップをサポートしますが、
START TRANSACTION ... WITH CONSISTENT SNAPSHOT
またはSHOW CREATE TABLE
#311はサポートしません
- MySQL 互換データベースのバックアップをサポートしますが、
改良点
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
ティフラッシュ
- 演算子の追加:
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
Dumpling
バグの修正
TiDB
SET
型の列#25669でマージ結合を使用すると、誤った結果が返される問題を修正します。IN
式の引数#25591のデータ破損の問題を修正します- GC のセッションがグローバル変数の影響を受けないようにする#24976
- ウィンドウ関数クエリで
limit
を使用すると発生するpanicの問題を修正します#25344 Limit
#24636を使用してパーティション分割されたテーブルをクエリするときに返される間違った値を修正しますENUM
またはSET
タイプの列#24944でIFNULL
が正しく反映されない問題を修正- 結合サブクエリの
count
をfirst_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 DISTINCT
をBatch Get
に変換すると誤った結果が生じる問題を修正#25320- TiFlash から TiKV へのバックオフ クエリがトリガーされない問題を修正します。 #23665 #24421
only_full_group_by
#23839のチェック時に発生するindex-out-of-range
のエラーを修正します。- 相関サブクエリのインデックス結合の結果が間違っている問題を修正#25799
TiKV
PD
ティフラッシュ
- 分割失敗により 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)
TiDB Lightning
- TiDB Lightningが Parquet ファイル#1272の
DECIMAL
データ型の解析に失敗するバグを修正 - テーブル スキーマの復元時にTiDB Lightningが「エラー 9007: 書き込み競合」エラーを報告するバグを修正します#1290
- TiDB Lightningが int ハンドルのオーバーフローによりデータのインポートに失敗する不具合を修正#1291
- ローカル バックエンド モード#1403でのデータ損失により、 TiDB Lightningでチェックサムの不一致エラーが発生する可能性があるバグを修正
- TiDB Lightningがテーブル スキーマを復元しているときに、クラスタ化されたインデックスでライティングの非互換性の問題を修正します#1362
- TiDB Lightningが Parquet ファイル#1272の
Dumpling