TiDB 6.0.0 リリースノート
発売日: 2022年4月7日
TiDB バージョン: 6.0.0-DMR
注記:
TiDB 6.0.0-DMR のドキュメントはアーカイブ済みになりました。PingCAP では、TiDB データベースの最新のLTSバージョン使用することを推奨しています。
6.0.0-DMR の主な新機能または改善点は次のとおりです。
- SQL の配置ルールをサポートし、データ配置をより柔軟に管理します。
- カーネル レベルでデータとインデックス間の一貫性チェックを追加します。これにより、リソースのオーバーヘッドが非常に少なくなり、システムの安定性と堅牢性が向上します。
- 専門家以外のユーザー向けに、セルフサービス型のデータベース パフォーマンス監視および診断機能であるTop SQL を提供します。
- クラスターのパフォーマンス データを常に収集する継続的なプロファイリングをサポートし、技術専門家の MTTR を短縮します。
- ホットスポットの小さなテーブルをメモリにキャッシュすることで、アクセス パフォーマンスが大幅に向上し、スループットが向上し、アクセスレイテンシーが短縮されます。
- メモリ内の悲観的ロックを最適化します。悲観的ロックによって発生するパフォーマンスのボトルネックに対して、悲観的ロックのメモリ最適化により、レイテンシーを10% 削減し、QPS を 10% 向上させることができます。
- 実行プランを共有するように準備済みステートメントを強化することで、CPU リソースの消費が削減され、SQL 実行の効率が向上します。
- より多くの式のプッシュダウンとエラスティック スレッド プールの一般提供 (GA) をサポートすることで、MPP エンジンのコンピューティング パフォーマンスが向上します。
- 多数の移行タスクの管理を容易にするためにDM WebUIを追加します。
- 大規模クラスターでデータを複製する際の TiCDC の安定性と効率性が向上しました。TiCDC は現在、100,000 個のテーブルを同時に複製することをサポートしています。
- TiKV ノードの再起動後のリーダー バランシングを高速化し、再起動後のビジネス回復の速度を向上させます。
- 統計の自動更新のキャンセルをサポートし、リソースの競合を減らし、SQL パフォーマンスへの影響を制限します。
- TiDB クラスターの自動診断サービスであるPingCAPクリニック を提供します (テクニカル プレビュー版)。
- エンタープライズ レベルのデータベース管理プラットフォームである TiDB Enterprise Manager を提供します。
また、TiDB の HTAP ソリューションのコアコンポーネントとして、 TiFlash TMが今回のリリースで正式にオープンソース化されました。詳細については、 TiFlashリポジトリ参照してください。
リリース戦略の変更
TiDB v6.0.0 以降、TiDB は次の 2 種類のリリースを提供します。
長期サポートリリース
長期サポート (LTS) リリースは、約 6 か月ごとにリリースされます。LTS リリースでは、新しい機能と改善が導入され、リリース ライフサイクル内でパッチ リリースが受け入れられます。たとえば、v6.1.0 は LTS リリースになります。
開発マイルストーンリリース
開発マイルストーン リリース (DMR) は、約 2 か月ごとにリリースされます。DMR では新しい機能と改善が導入されますが、パッチ リリースは受け入れられません。ユーザーが本番環境で DMR を使用することは推奨されません。たとえば、v6.0.0-DMR は DMR です。
TiDB v6.0.0 は DMR であり、そのバージョンは 6.0.0-DMR です。
新機能
構文
SQLベースのデータ配置ルール
TiDB は、優れたスケーラビリティを備えた分散データベースです。通常、データは複数のサーバー、さらには複数のデータセンターにまたがって展開されます。そのため、データ スケジューリング管理は、TiDB の最も重要な基本機能の 1 つです。ほとんどの場合、ユーザーはデータのスケジュールと管理方法を気にする必要はありません。ただし、アプリケーションの複雑さが増すにつれて、分離とアクセスレイテンシーによって発生する展開の変更が TiDB の新たな課題になっています。v6.0.0 以降、TiDB は SQL インターフェイスに基づくデータ スケジューリングおよび管理機能を正式に提供しています。レプリカ数、ロール タイプ、データの配置場所などのディメンションで柔軟なスケジューリングと管理をサポートします。TiDB は、マルチサービス共有クラスターとクロス AZ 展開でのデータ配置のより柔軟な管理もサポートします。
データベースによるTiFlashレプリカの構築をサポートします。データベース内のすべてのテーブルにTiFlashレプリカを追加するには、1 つの SQL ステートメントを使用するだけでよいため、運用および保守コストが大幅に削減されます。
トランザクション
カーネルレベルでデータインデックスの一貫性のチェックを追加する
トランザクションの実行時にデータ インデックスの一貫性のチェックを追加します。これにより、リソース オーバーヘッドが非常に少なく、システムの安定性と堅牢性が向上します。チェックの動作は、変数
tidb_enable_mutation_checker
とtidb_txn_assertion_level
使用して制御できます。デフォルト構成では、ほとんどのシナリオで QPS の低下は 2% 以内に抑えられます。一貫性チェックのエラーの説明については、 ユーザードキュメント参照してください。
可観測性
Top SQL: 非専門家向けのパフォーマンス診断
Top SQL は、DBA およびアプリケーション開発者向けの TiDB ダッシュボードのセルフサービス型データベース パフォーマンス監視および診断機能であり、現在 TiDB v6.0 で一般提供されています。
専門家向けの既存の診断機能とは異なり、 Top SQLは非専門家向けに設計されています。相関関係を見つけるために何千もの監視チャートを調べたり、 Raft Snapshot、RocksDB、MVCC、TSO などの TiDB の内部メカニズムを理解したりする必要はありません。Top Top SQL を使用してデータベースの負荷を迅速に分析し、アプリのパフォーマンスを向上させるには、基本的なデータベースの知識 (インデックス、ロックの競合、実行プランなど) のみが必要です。
Top SQL はデフォルトでは有効になっていません。有効にすると、 Top SQL は各 TiKV または TiDB ノードの CPU 負荷をリアルタイムで提供します。そのため、一目で CPU 負荷の高い SQL ステートメントを特定し、データベースのホットスポットや突然の負荷増加などの問題を迅速に分析できます。たとえば、 Top SQL を使用して、単一の TiKV ノードの CPU を 90% 消費する異常なクエリを特定して診断できます。
継続的なプロファイリングをサポート
TiDB ダッシュボードでは、継続的プロファイリング機能が導入され、現在 TiDB v6.0 で一般提供されています。継続的プロファイリングはデフォルトでは有効になっていません。有効にすると、個々の TiDB、TiKV、PD インスタンスのパフォーマンス データが常に収集され、オーバーヘッドは無視できます。履歴パフォーマンス データを使用すると、技術専門家は、問題を再現するのが難しい場合でも、メモリ消費量が多いなどの問題の根本原因をさかのぼって特定できます。このようにして、平均復旧時間 (MTTR) を短縮できます。
パフォーマンス
キャッシュホットスポットの小さなテーブル
ホットスポットの小さなテーブルにアクセスするシナリオのユーザー アプリケーションの場合、TiDB はホットスポット テーブルをメモリに明示的にキャッシュすることをサポートしています。これにより、アクセス パフォーマンスが大幅に向上し、スループットが向上し、アクセスレイテンシーが短縮されます。このソリューションは、サードパーティのキャッシュ ミドルウェアの導入を効果的に回避し、アーキテクチャの複雑さを軽減し、運用と保守のコストを削減できます。このソリューションは、構成テーブルや為替レート テーブルなど、小さなテーブルに頻繁にアクセスされるが、めったに更新されないシナリオに適しています。
インメモリ悲観的ロック
TiDB v6.0.0 以降、メモリ内悲観的ロックがデフォルトで有効になっています。この機能を有効にすると、悲観的トランザクション ロックはメモリ内で管理されます。これにより、悲観的的ロックの永続化とロック情報のRaftレプリケーションが回避され、悲観的的トランザクション ロックの管理のオーバーヘッドが大幅に削減されます。悲観的ロックによって生じるパフォーマンスのボトルネックでは、悲観的ロックのメモリ最適化により、レイテンシーが10% 削減され、QPS が 10% 向上します。
リードコミット分離レベルでTSOを取得するための最適化
クエリのレイテンシーを削減するために、読み取り/書き込み競合がまれな場合、TiDB はコミット読み取り分離レベルに
tidb_rc_read_check_ts
システム変数を追加して、不要な TSO を減らします。この変数は、デフォルトでは無効になっています。変数を有効にすると、この最適化により、読み取り/書き込み競合がないシナリオで TSO の重複が回避され、レイテンシーが削減されます。ただし、読み取り/書き込み競合が頻繁に発生するシナリオでは、この変数を有効にするとパフォーマンスが低下する可能性があります。実行計画を共有するために準備されたステートメントを強化する
SQL 実行プランを再利用すると、SQL 文の解析時間を効果的に短縮し、CPU リソースの消費を抑え、SQL 実行効率を向上させることができます。SQL チューニングの重要な方法の 1 つは、SQL 実行プランを効果的に再利用することです。TiDB は、準備済みステートメントとの実行プランの共有をサポートしています。ただし、準備済みステートメントが閉じられると、TiDB は対応するプラン キャッシュを自動的にクリアします。その後、TiDB は繰り返される SQL 文を不必要に解析し、実行効率に影響を与える可能性があります。v6.0.0 以降、TiDB は
tidb_ignore_prepared_cache_close_stmt
番目のパラメータ (デフォルトでは無効) を通じてCOM_STMT_CLOSE
のコマンドを無視するかどうかの制御をサポートしています。パラメータを有効にすると、TiDB は準備済みステートメントを閉じるコマンドを無視し、実行プランをキャッシュに保持するため、実行プランの再利用率が向上します。クエリプッシュダウンの改善
TiDB は、コンピューティングとstorageを分離するネイティブアーキテクチャを備え、演算子をプッシュダウンすることで無効なデータをフィルター処理します。これにより、TiDB と TiKV 間のデータ転送が大幅に削減され、クエリの効率が向上します。v6.0.0 では、TiDB はより多くの式と
BIT
データ型を TiKV にプッシュダウンし、式とデータ型を計算する際のクエリの効率が向上します。ホットスポットインデックスの最適化
単調に増加するデータをバッチでセカンダリ インデックスに書き込むと、インデックス ホットスポットが発生し、全体的な書き込みスループットに影響します。v6.0.0 以降、TiDB は、書き込みパフォーマンスを向上させるために、
tidb_shard
関数を使用してインデックス ホットスポットを分散することをサポートしています。現在、tidb_shard
一意のセカンダリ インデックスにのみ影響します。このアプリケーション フレンドリなソリューションでは、元のクエリ条件を変更する必要がありません。このソリューションは、書き込みスループットが高い、ポイント クエリ、バッチ ポイント クエリのシナリオで使用できます。範囲クエリによって分散されたデータをアプリケーションで使用すると、パフォーマンスが低下する可能性があることに注意してください。したがって、このような場合には、検証せずにこの機能を使用しないでください。TiFlash MPP エンジンのパーティション テーブルの動的プルーニング モードをサポート (実験的)
このモードでは、TiDB はTiFlashの MPP エンジンを使用してパーティション テーブル上のデータを読み取って計算できるため、パーティション テーブルのクエリ パフォーマンスが大幅に向上します。
MPPエンジンの計算パフォーマンスを向上させる
より多くの関数と演算子をMPPエンジンにプッシュダウンするサポート
IS NOT
関数:IS
- 文字列関数:
REGEXP()
,NOT REGEXP()
- 数学関数:
GREATEST(int/real)
,LEAST(int/real)
LAST_DAY()
関数DAYOFYEAR()
DAYNAME()
DAYOFMONTH()
DAYOFWEEK()
MONTHNAME()
- 演算子: 反左外部セミ結合、左外部セミ結合
エラスティック スレッド プール (デフォルトで有効) が GA になります。この機能は、CPU 使用率を向上させることを目的としています。
安定性
実行計画のベースラインキャプチャを強化する
テーブル名、頻度、ユーザー名などのディメンションを含むブロックリストを追加することで、実行プランのベースライン キャプチャの使いやすさが向上します。キャッシュ バインディングのメモリ管理を最適化する新しいアルゴリズムを導入します。ベースライン キャプチャを有効にすると、システムはほとんどの OLTP クエリのバインディングを自動的に作成します。バインドされたステートメントの実行プランは固定されるため、実行プランの変更によるパフォーマンスの問題を回避できます。ベースライン キャプチャは、メジャー バージョン アップグレードやクラスターの移行などのシナリオに適用でき、実行プランの回帰によって発生するパフォーマンスの問題を軽減するのに役立ちます。
TiKV クォータ リミッターのサポート (実験的)
TiKV を導入したマシンのリソースが限られており、フォアグラウンドに過度のリクエスト負荷がかかると、バックグラウンドの CPU リソースがフォアグラウンドによって占有され、TiKV のパフォーマンスが不安定になります。TiDB v6.0.0 では、クォータ関連の設定項目を使用して、CPU や読み取り/書き込み帯域幅など、フォアグラウンドで使用されるリソースを制限できます。これにより、長期間にわたる高負荷のワークロード下でもクラスターの安定性が大幅に向上します。
TiFlashのzstd圧縮アルゴリズムをサポート
TiFlash、
profiles.default.dt_compression_method
とprofiles.default.dt_compression_level
2 つのパラメーターが導入され、ユーザーはパフォーマンスと容量のバランスに基づいて最適な圧縮アルゴリズムを選択できます。すべてのI/Oチェック(チェックサム)をデフォルトで有効にする
この機能は、v5.4.0 で実験的に導入されました。ユーザーのビジネスに明らかな影響を与えることなく、データの精度とセキュリティを強化します。
警告: 新しいバージョンのデータ形式は、v5.4.0 より前のバージョンにそのままダウングレードすることはできません。このようなダウングレード中は、ダウングレード後にTiFlashレプリカとレプリケートされたデータを削除する必要があります。または、 dttool 移行を参照してダウングレードを実行することもできます。
スレッドの使用率を向上させる
TiFlash は、非同期 gRPC および Min-TSO スケジューリング メカニズムを導入します。これらのメカニズムにより、スレッドのより効率的な使用が保証され、過剰なスレッドによるシステム クラッシュが回避されます。
データ移行
TiDB データ移行 (DM)
WebUI を追加 (実験的)
WebUI を使用すると、多数の移行タスクを簡単に管理できます。WebUI では、次の操作を実行できます。
- ダッシュボードで移行タスクをビュー
- 移行タスクの管理
- アップストリーム設定を構成する
- レプリケーションステータスのクエリ
- マスターとワーカーの情報をビュー
WebUI はまだ実験的であり、開発中です。したがって、試用のみに推奨されます。既知の問題として、WebUI と dmctl を使用して同じタスクを操作すると問題が発生する場合があります。この問題は、今後のバージョンで解決される予定です。
エラー処理メカニズムを追加する
移行タスクを中断する問題に対処するために、さらに多くのコマンドが導入されています。例:
- スキーマ エラーが発生した場合は、スキーマ ファイルを個別に編集するのではなく、
binlog-schema update
コマンドの--from-source/--from-target
パラメータを使用してスキーマ ファイルを更新できます。 - binlog の位置を指定して、DDL ステートメントを挿入、置換、スキップ、または元に戻すことができます。
- スキーマ エラーが発生した場合は、スキーマ ファイルを個別に編集するのではなく、
Amazon S3への完全なデータstorageをサポート
DM がすべてのデータ移行タスクまたは完全なデータ移行タスクを実行する場合、上流からの全データを格納するために十分なハードディスク容量が必要です。EBS と比較すると、Amazon S3 は低コストでほぼ無制限のstorageを備えています。現在、DM は Amazon S3 をダンプ ディレクトリとして構成することをサポートしています。つまり、すべてのデータ移行タスクまたは完全なデータ移行タスクを実行するときに、S3 を使用して全データを格納できます。
指定した時間から移行タスクを開始することをサポート
移行タスクに新しいパラメータ
--start-time
が追加されました。「2021-10-21 00:01:00」または「2021-10-21T00:01:00」の形式で時間を定義できます。この機能は、シャード MySQL インスタンスから増分データを移行およびマージするシナリオで特に役立ちます。具体的には、増分移行タスクでソースごとにbinlog開始ポイントを設定する必要はありません。代わりに、
safe-mode
の--start-time
パラメータを使用して、増分移行タスクをすばやく作成できます。
TiDB Lightning
許容可能なエラーの最大数の設定をサポート
設定項目
lightning.max-error
を追加しました。デフォルト値は 0 です。値が 0 より大きい場合、max-error 機能が有効になります。エンコード中に行にエラーが発生した場合、この行を含むレコードがターゲット TiDB のlightning_task_info.type_error_v1
に追加され、この行は無視されます。エラーのある行がしきい値を超えると、 TiDB Lightning は直ちに終了します。lightning.max-error
番目の構成と一致して、lightning.task-info-schema-name
の構成項目は、データ保存エラーを報告するデータベースの名前を記録します。この機能はすべてのタイプのエラーをカバーするわけではありません。たとえば、構文エラーは適用されません。
TiDBデータ共有サブスクリプション
100,000 個のテーブルを同時に複製するサポート
TiCDC は、データ処理フローを最適化することで、各テーブルの増分データ処理のリソース消費を削減し、大規模クラスターでデータを複製する際のレプリケーションの安定性と効率性を大幅に向上させます。内部テストの結果、TiCDC は 100,000 個のテーブルを同時に複製することを安定してサポートできることが示されています。
導入とメンテナンス
新しい照合順序ルールをデフォルトで有効にする
v4.0 以降、TiDB は、大文字と小文字を区別しない、アクセントを区別しない、およびパディング ルールにおいて MySQL と同じように動作する新しい照合順序ルールをサポートしています。新しい照合順序ルールは、デフォルトでは無効になっている
new_collations_enabled_on_first_bootstrap
パラメータによって制御されます。v6.0 以降、TiDB は新しい照合順序ルールをデフォルトで有効にします。この構成は、TiDB クラスターの初期化時にのみ有効になることに注意してください。TiKVノードの再起動後のリーダーバランシングを高速化
TiKV ノードの再起動後、不均等に分散されたリーダーは負荷分散のために再配分する必要があります。大規模クラスターでは、リーダー分散時間はリージョン数と正の相関関係にあります。たとえば、100K リージョンのリーダー分散には 20 ~ 30 分かかることがあり、不均等な負荷によるパフォーマンスの問題や安定性のリスクが生じやすくなります。TiDB v6.0.0 では、分散同時実行を制御するパラメータが提供され、デフォルト値が元の 4 倍に拡大されました。これにより、リーダーの再分散時間が大幅に短縮され、TiKV ノードの再起動後のビジネス回復が加速されます。
統計の自動更新のキャンセルをサポート
統計は、 SQL パフォーマンスに影響を与える最も重要な基本データの 1 つです。統計の完全性と適時性を確保するために、TiDB はオブジェクト統計をバックグラウンドで定期的に自動更新します。ただし、統計の自動更新によってリソースの競合が発生し、SQL パフォーマンスに影響を与える可能性があります。この問題に対処するために、v6.0 以降では統計の自動更新を手動でキャンセルできます。
PingCAPクリニック診断サービス(テクニカルプレビュー版)
PingCAPクリニック は、 TiDB クラスターの診断サービスです。このサービスは、クラスターの問題をリモートでトラブルシューティングするのに役立ち、クラスターの状態をローカルですばやく確認できます。PingCAP PingCAPクリニックを使用すると、TiDB クラスターのライフサイクル全体にわたって安定した動作を確保し、潜在的な問題を予測し、問題の発生確率を減らし、クラスターの問題をすばやくトラブルシューティングできます。
クラスターの問題のトラブルシューティングのために PingCAP テクニカル サポートにリモート アシスタンスを依頼する場合、 PingCAPクリニックサービスを使用して診断データを収集およびアップロードすることで、トラブルシューティングの効率を向上させることができます。
エンタープライズレベルのデータベース管理プラットフォーム、TiDB Enterprise Manager
TiDB Enterprise Manager (TiEM) は、TiDB データベースに基づくエンタープライズ レベルのデータベース管理プラットフォームであり、ユーザーがセルフホスト環境またはパブリック クラウド環境で TiDB クラスターを管理できるようにすることを目的としています。
TiEM は、TiDB クラスターのライフサイクル全体の視覚的な管理を提供するだけでなく、パラメーター管理、バージョン アップグレード、クラスター クローン、アクティブ/スタンバイ クラスターの切り替え、データのインポートとエクスポート、データのレプリケーション、データのバックアップと復元サービスなど、ワンストップ サービスも提供します。TiEM は、TiDB での DevOps の効率を向上させ、企業の DevOps コストを削減します。
現在、TiEM はTiDBエンタープライズエディションのみで提供されています。TiEM を入手するには、 TiDBエンタープライズページからお問い合わせください。
監視コンポーネントの構成のカスタマイズをサポート
TiUP を使用して TiDB クラスターをデプロイすると、 TiUP はPrometheus、Grafana、Alertmanager などの監視コンポーネントを自動的にデプロイし、スケールアウト後に新しいノードを監視スコープに自動的
topology.yaml
追加します。1 ファイルに構成項目を追加することで、監視コンポーネントの構成をカスタマイズできます。
互換性の変更
注記:
以前の TiDB バージョンから v6.0.0 にアップグレードする場合、すべての中間バージョンの互換性変更ノートを知りたい場合は、該当するバージョンのリリースノートを確認できます。
システム変数
変数名 | タイプを変更 | 説明 |
---|---|---|
placement_checks | 削除されました | DDL ステートメントがSQL の配置ルールで指定された配置ルールを検証するかどうかを制御しますtidb_placement_mode に置き換えられました。 |
tidb_enable_alter_placement | 削除されました | SQL で配置ルールを有効にするかどうかを制御します。 |
tidb_mem_quota_hashjoin tidb_mem_quota_indexlookupjoin tidb_mem_quota_indexlookupreader tidb_mem_quota_mergejoin tidb_mem_quota_sort tidb_mem_quota_topn | 削除されました | v5.0 以降、これらの変数はtidb_mem_quota_query に置き換えられ、システム変数ドキュメントから削除されました。互換性を確保するため、これらの変数はソース コードに保持されていました。TiDB 6.0.0 以降、これらの変数もコードから削除されています。 |
tidb_enable_mutation_checker | 新しく追加された | ミューテーション チェッカーを有効にするかどうかを制御します。デフォルト値はON です。v6.0.0 より前のバージョンからアップグレードする既存のクラスターの場合、ミューテーション チェッカーはデフォルトで無効になっています。 |
tidb_ignore_prepared_cache_close_stmt | 新しく追加された | 準備されたステートメントを閉じるコマンドを無視するかどうかを制御します。デフォルト値はOFF です。 |
tidb_mem_quota_binding_cache | 新しく追加された | キャッシュ保持バインディングのメモリ使用量しきい値を設定します。デフォルト値は67108864 (64 MiB) です。 |
tidb_placement_mode | 新しく追加された | DDL ステートメントがSQL の配置ルールで指定された配置ルールを無視するかどうかを制御します。デフォルト値はstrict で、これは DDL ステートメントが配置ルールを無視しないことを意味します。 |
tidb_rc_read_check_ts | 新しく追加された |
|
tidb_sysdate_is_now | 新しく追加された | SYSDATE 関数をNOW 関数に置き換えることができるかどうかを制御します。この構成項目は、MySQL オプションsysdate-is-now と同じ効果があります。デフォルト値はOFF です。 |
tidb_table_cache_lease | 新しく追加された | テーブル キャッシュのリース時間を秒単位で制御します。デフォルト値は3 です。 |
tidb_top_sql_max_meta_count | 新しく追加された | Top SQLによって 1 分あたりに収集される SQL ステートメント タイプの最大数を制御します。デフォルト値は5000 です。 |
tidb_top_sql_max_time_series_count | 新しく追加された | 負荷に最も寄与する SQL ステートメント (つまり、上位 N) を 1 分あたりTop SQLで記録できる数を制御します。デフォルト値は100 です。 |
tidb_txn_assertion_level | 新しく追加された | アサーション レベルを制御します。アサーションは、データとインデックス間の一貫性チェックであり、トランザクション コミット プロセスで書き込まれるキーが存在するかどうかをチェックします。デフォルトでは、チェックによってほとんどのチェック項目が有効になり、パフォーマンスにほとんど影響はありません。v6.0.0 より前のバージョンからアップグレードする既存のクラスターの場合、チェックはデフォルトで無効になっています。 |
コンフィグレーションファイルのパラメータ
コンフィグレーションファイル | コンフィグレーション | タイプを変更 | 説明 |
---|---|---|---|
ティビ | stmt-summary.enable stmt-summary.enable-internal-query stmt-summary.history-size stmt-summary.max-sql-length stmt-summary.max-stmt-count stmt-summary.refresh-interval | 削除されました | ステートメント サマリー テーブルに関連するコンフィグレーション。これらの構成項目はすべて削除されます。ステートメント サマリー テーブルを制御するには、SQL 変数を使用する必要があります。 |
ティビ | new_collations_enabled_on_first_bootstrap | 修正済み | 新しい照合順序のサポートを有効にするかどうかを制御します。v6.0 以降、デフォルト値はfalse からtrue に変更されました。この構成項目は、クラスターが初めて初期化されるときにのみ有効になります。最初のブートストラップの後は、この構成項目を使用して新しい照合順序フレームワークを有効または無効にすることはできません。 |
ティクヴ | backup.num-threads | 修正済み | 値の範囲は[1, CPU] に変更されます。 |
ティクヴ | raftstore.apply-max-batch-size | 修正済み | 最大値は10240 に変更されます。 |
ティクヴ | raftstore.raft-max-size-per-msg | 修正済み | 最小値が0 から0 より大きい値に変更されます。最大値は 3GB に設定されています。単位が MB からKB|MB|GB に変更されます。 |
ティクヴ | raftstore.store-max-batch-size | 修正済み | 最大値は10240 に設定されています。 |
ティクヴ | readpool.unified.max-thread-count | 修正済み | 調整可能な範囲は[min-thread-count, MAX(4, CPU)] に変更されます。 |
ティクヴ | rocksdb.enable-pipelined-write | 修正済み | デフォルト値はtrue からfalse に変更されます。この構成を有効にすると、以前のパイプライン書き込みが使用されます。この構成を無効にすると、新しいパイプラインコミット メカニズムが使用されます。 |
ティクヴ | rocksdb.max-background-flushes | 修正済み | CPU コア数が 10 の場合、デフォルト値は3 です。CPU コア数が 8 の場合、デフォルト値は 2 です。 |
ティクヴ | rocksdb.max-background-jobs | 修正済み | CPU コア数が 10 の場合、デフォルト値は9 です。CPU コア数が 8 の場合、デフォルト値は 7 です。 |
TiFlash | profiles.default.dt_enable_logical_split | 修正済み | DeltaTree ストレージ エンジンのセグメントが論理分割を使用するかどうかを決定します。デフォルト値はtrue からfalse に変更されます。 |
TiFlash | profiles.default.enable_elastic_threadpool | 修正済み | エラスティック スレッド プールを有効にするかどうかを制御します。デフォルト値はfalse からtrue に変更されます。 |
TiFlash | storage.format_version | 修正済み | TiFlashのデータ検証機能を制御します。デフォルト値は2 から3 に変更されます。format_version が3 に設定されている場合、ハードウェア障害による誤った読み取りを回避するために、すべてのTiFlashデータの読み取り操作に対して一貫性チェックが実行されます。新しい形式のバージョンは、v5.4 より前のバージョンにそのままダウングレードすることはできないことに注意してください。 |
ティビ | pessimistic-txn.pessimistic-auto-commit | 新しく追加された | 悲観的トランザクション モードがグローバルに有効になっている場合 ( tidb_txn_mode='pessimistic' )、自動コミット トランザクションが使用するトランザクション モードを決定します。 |
ティクヴ | pessimistic-txn.in-memory | 新しく追加された | メモリ内の悲観的ロックを有効にするかどうかを制御します。この機能を有効にすると、悲観的トランザクションは、悲観的ロックをディスクに書き込んだり、他のレプリカに複製したりするのではなく、可能な限り TiKVメモリに悲観的ロックを保存します。これにより、悲観的トランザクションのパフォーマンスが向上します。ただし、悲観的ロックが失われる可能性は低く、悲観的トランザクションがコミットに失敗する可能性があります。デフォルト値はtrue です。 |
ティクヴ | quota | 新しく追加された | フロントエンド リクエストによって占有されるリソースを制限する Quota Limiter に関連する設定項目を追加します。Quota Limiter は実験的機能であり、デフォルトでは無効になっています。新しいクォータ関連の設定項目は、 foreground-cpu-time 、 foreground-write-bandwidth 、 foreground-read-bandwidth 、およびmax-delay-duration です。 |
TiFlash | profiles.default.dt_compression_method | 新しく追加された | TiFlashの圧縮アルゴリズムを指定します。オプションの値はLZ4 、 zstd 、 LZ4HC で、すべて大文字と小文字は区別されません。デフォルト値はLZ4 です。 |
TiFlash | profiles.default.dt_compression_level | 新しく追加された | TiFlashの圧縮レベルを指定します。デフォルト値は1 です。 |
DM | loaders.<name>.import-mode | 新しく追加された | 完全インポート フェーズ中のインポート モード。v6.0 以降、DM は完全インポート フェーズ中にデータをインポートするために TiDB Lightning の TiDB バックエンド モードを使用します。以前の Loaderコンポーネントは使用されなくなりました。これは内部的な置き換えであり、日常業務に明らかな影響はありません。 デフォルト値は sql に設定されており、これは tidb-backend モードを使用することを意味します。まれに、 tidb-backend が完全に互換性がない場合があります。このパラメータをloader に設定することで、Loader モードにフォールバックできます。 |
DM | loaders.<name>.on-duplicate | 新しく追加された | 完全インポート フェーズ中に競合を解決する方法を指定します。デフォルト値はreplace 、これは新しいデータを使用して既存のデータを置き換えることを意味します。 |
ティCDC | dial-timeout | 新しく追加された | ダウンストリーム Kafka との接続を確立する際のタイムアウト。デフォルト値は10s です。 |
ティCDC | read-timeout | 新しく追加された | ダウンストリーム Kafka から返される応答を取得する際のタイムアウト。デフォルト値は10s です。 |
ティCDC | write-timeout | 新しく追加された | ダウンストリーム Kafka にリクエストを送信する際のタイムアウト。デフォルト値は10s です。 |
その他
- データ配置ポリシーには、次の互換性の変更があります。
- バインディングはサポートされていません。直接配置オプションは構文から削除されています。
CREATE PLACEMENT POLICY
およびALTER PLACEMENT POLICY
ステートメントは、VOTERS
およびVOTER_CONSTRAINTS
配置オプションをサポートしなくなりました。- TiDB 移行ツール (TiDB Binlog、TiCDC、 BR) が配置ルールと互換性を持つようになりました。配置オプションは、TiDB Binlogの特別なコメントに移動されました。
information_schema.placement_rules
システム テーブルの名前がinformation_schema.placement_policies
に変更されました。このテーブルには、配置ポリシーに関する情報のみが表示されるようになりました。placement_checks
システム変数はtidb_placement_mode
に置き換えられます。- TiFlashレプリカを持つテーブルに配置ルールを持つパーティションを追加することは禁止されています。
INFORMATION_SCHEMA
テーブルからTIDB_DIRECT_PLACEMENT
列目を削除します。
- SQL プラン管理 (SPM) バインディングの
status
値が変更されます。using
削除します。using
代わりにenabled
(使用可能) を追加します。disabled
を追加します (利用不可)。
- DMはOpenAPIインターフェースを変更する
- 内部機構の変更により、タスク管理に関するインターフェースは以前の実験的バージョンとの互換性がありません。適応するには新しいDM OpenAPI ドキュメントを参照する必要があります。
- DMは、完全なインポートフェーズ中に競合を解決する方法を変更します。
loader.<name>.on-duplicate
パラメータが追加されました。デフォルト値はreplace
で、これは新しいデータを使用して既存のデータを置き換えることを意味します。以前の動作を維持する場合は、値をerror
に設定できます。このパラメータは、完全なインポート フェーズでの動作のみを制御します。
- DMを使用するには、
dmctl
の対応するバージョンを使用する必要があります。- 内部メカニズムの変更により、DM を v6.0.0 にアップグレードした後、
dmctl
も v6.0.0 にアップグレードする必要があります。
- 内部メカニズムの変更により、DM を v6.0.0 にアップグレードした後、
- v5.4 (v5.4 のみ) では、TiDB は一部の noop システム変数に不正な値を許可します。v6.0.0 以降、TiDB はシステム変数に不正な値を設定することを許可しません#31538
改善点
ティビ
FLASHBACK
またはRECOVER
ステートメントを使用してテーブルを復元した後、テーブルの配置ルール設定を自動的にクリアします#31668- パフォーマンス概要ダッシュボードを追加して、一般的なクリティカルパスのコアパフォーマンスメトリックを表示し、TiDB でのメトリック分析を容易にします#31676
LOAD DATA LOCAL INFILE
ステートメント#24515でREPLACE
キーワードの使用をサポート- 範囲パーティションテーブル#26739の組み込み
IN
式のパーティションプルーニングをサポート - MPP 集計クエリで冗長な Exchange 操作を排除することでクエリの効率を向上#31762
TRUNCATE PARTITION
とDROP PARTITION
ステートメントで重複するパーティション名を許可することでMySQLとの互換性を向上#31681ADMIN SHOW DDL JOBS
ステートメント#23494の結果にCREATE_TIME
情報を表示することをサポートします- 新しい組み込み関数
CHARSET()
#3931をサポート - ベースラインキャプチャブロックリストをユーザー名でフィルタリングする機能をサポート#32558
- ベースラインキャプチャブロックリストでのワイルドカードの使用をサポート#32714
ADMIN SHOW DDL JOBS
とSHOW TABLE STATUS
ステートメントの結果を、現在のtime_zone
#26642に応じて時間を表示することで最適化します。DAYNAME()
とMONTHNAME()
関数をTiFlash #32594にプッシュダウンするサポートREGEXP
機能をTiFlash #32637にプッシュダウンするサポートDAYOFMONTH()
とLAST_DAY()
関数をTiFlash #33012にプッシュダウンするサポートDAYOFWEEK()
とDAYOFYEAR()
関数をTiFlash #33130にプッシュダウンするサポートIS_TRUE
IS_FALSE
関数#33047 TiFlashIS_TRUE_WITH_NULL
にプッシュダウンするサポートGREATEST
とLEAST
関数をTiFlash #32787にプッシュダウンするサポートUnionScan
オペレータ#32631の実行の追跡をサポート_tidb_rowid
列#31543を読み取るクエリにPointGetプランの使用をサポートEXPLAIN
ステートメントの出力で、名前を小文字に変換せずに元のパーティション名を表示することをサポート#32719- IN条件と文字列型列のRANGE COLUMNSパーティションのパーティションプルーニングを有効にする#32626
- システム変数がNULLに設定されている場合にエラーメッセージを返す#32850
- 非MPPモード#31465からブロードキャスト参加を削除する
- 動的プルーニングモード#32347でパーティションテーブル上でMPPプランの実行をサポート
- 共通テーブル式 (CTE) の述語のプッシュダウンをサポート#28163
Statement Summary
とCapture Plan Baselines
の構成を簡素化し、グローバルベースでのみ利用可能にする#30557- macOS 12 #31607でバイナリをビルドするときに報告されるアラームに対処するため、gopsutil を v3.21.12 に更新しました。
ティクヴ
- 多くのキー範囲を持つバッチに対するRaftstoreのサンプリング精度を向上#12327
debug/pprof/profile
に正しい「Content-Type」を追加して、プロファイルをより簡単に識別できるようにします#11521- Raftstore がハートビートを持っているときや読み取り要求を処理しているときに、リーダーのリースの時間を無期限に更新します。これにより、レイテンシージッターが削減されます#11579
- リーダーを切り替える際にコストが最も少ないストアを選択すると、パフォーマンスの安定性が向上します#10602
- Raftログを非同期に取得して、 Raftstore #11320をブロックすることによって発生するパフォーマンスジッターを軽減します。
- ベクトル計算#5751の
QUARTER
関数をサポート BIT
データ型を TiKV #30738にプッシュダウンするサポートMOD
関数とSYSDATE
関数をTiKV #11916にプッシュダウンするサポート- 解決ロックを必要とする領域の数を減らすことで、TiCDC の回復時間を短縮します (手順#11993
- 動的変更をサポート
raftstore.raft-max-inflight-msgs
#11865 - 動的プルーニングモード#11888を有効にするには
EXTRA_PHYSICAL_TABLE_ID_COL_ID
サポート - バケット#11759での計算をサポート
- RawKV API V2のキーを
user-key
+memcomparable-padding
+timestamp
#11965としてエンコードします。 - RawKV API V2の値を
user-value
+ttl
+ValueMeta
としてエンコードし、delete
ValueMeta
#11965としてエンコードする - 動的変更をサポート
raftstore.raft-max-size-per-msg
#12017 - Grafana #12014でマルチ k8 の監視をサポート
- レイテンシージッターを減らすためにリーダーシップをCDCオブザーバーに移譲する#12111
raftstore.apply_max_batch_size
とraftstore.store_max_batch_size
動的変更をサポート#11982- RawKV V2は
raw_get
またはraw_scan
リクエストを受信すると最新バージョンを返します#11965 - RCCheckTS 一貫性読み取り#12097サポート
storage.scheduler-worker-pool-size
(スケジューラプールのスレッド数) #12067の動的な変更をサポート- グローバルフォアグラウンドフローコントローラを使用してCPUと帯域幅の使用を制御し、TiKV #11855のパフォーマンス安定性を向上させます。
readpool.unified.max-thread-count
(UnifyReadPool のスレッド数) #11781動的変更をサポート- TiKV内部パイプラインを使用してRocksDBパイプラインを置き換え、
rocksdb.enable-multibatch-write
パラメータ#12059廃止します。
PD
TiFlash
- TiFlashファイルの論理分割を禁止し (デフォルト値の
profiles.default.dt_enable_logical_split
をfalse
に調整します。詳細についてはユーザードキュメント参照してください)、 TiFlash列storageのスペース使用効率を改善して、 TiFlashに同期されたテーブルのスペース占有が TiKV のテーブルのスペース占有と同等になるようにします。 - 以前のクラスタ管理モジュールを TiDB に統合することで、 TiFlashのクラスタ管理とレプリカ複製メカニズムを最適化し、小さなテーブルのレプリカ作成を高速化します#29924
- TiFlashファイルの論理分割を禁止し (デフォルト値の
ツール
バックアップと復元 (BR)
ティCDC
TiDB データ移行 (DM)
TiDB Lightning
バグ修正
ティビ
SCHEDULE = majority_in_primary
Regions
同じ値の場合に TiDB が配置ルールを使用してPrimaryRegion
を作成できないバグを修正#31271- インデックスルックアップ結合#30468使用してクエリを実行するときに発生する
invalid transaction
エラーを修正 show grants
つ以上の権限が付与されている場合に誤った結果を返すバグを修正しました#30855INSERT INTO t1 SET timestamp_col = DEFAULT
デフォルトでCURRENT_TIMESTAMP
#29926に設定されているフィールドのタイムスタンプをゼロタイムスタンプに設定するバグを修正しました。- 文字列型#31721の最大値と最小の非 null 値のエンコードを回避することで、結果の読み取り時に報告されるエラーを修正しました。
- データがエスケープ文字#31589で壊れている場合のロード データpanicを修正
- 照合順序を伴う
greatest
またはleast
関数が間違った結果を返す問題を修正#31789 - date_add および date_sub関数が誤ったデータ型を返す可能性があるバグを修正#31809
- 挿入ステートメントを使用して仮想的に生成された列にデータを挿入するときに発生する可能性のあるpanicを修正#31735
- 作成されたリストパーティション#31784に重複した列が存在する場合にエラーが報告されないバグを修正しました。
select for update union select
誤ったスナップショットを使用した場合に返される誤った結果を修正#31530- 復元操作が完了した後にリージョンが不均等に分散される可能性がある問題を修正#31034
json
型#31541のCOERCIBILITYが間違っているバグを修正- この型が組み込み関数#31320使用して処理されるときに、
json
型の誤った照合順序を修正しました。 - TiFlashレプリカの数が0に設定されている場合にPDルールが削除されないバグを修正#32190
alter column set default
テーブルスキーマ#31074を誤って更新する問題を修正- TiDBの
date_format
'\n'
MySQLと互換性のない方法で処理する問題を修正#32232 - 結合#31629使用してパーティションテーブルを更新するときにエラーが発生する可能性があるバグを修正しました
- 列挙値#32428の Nulleq 関数の誤った範囲計算結果を修正
upper()
とlower()
関数で起こりうるpanicを修正#32488- 他のタイプの列をタイムスタンプタイプの列に変更するときに発生するタイムゾーンの問題を修正#29585
- ChunkRPC #31981 #30880使用してデータをエクスポートする際の TiDB OOM を修正
- 動的パーティションプルーニングモード#32516でサブSELECT LIMITが期待どおりに動作しないバグを修正
INFORMATION_SCHEMA.COLUMNS
表#32655のビットデフォルト値の形式が間違っているか、一貫性がない問題を修正- サーバーの再起動後にパーティションテーブルの一覧表示でパーティションテーブルの整理が機能しない可能性があるバグを修正#32416
SET timestamp
実行後にadd column
間違ったデフォルトのタイムスタンプを使用する可能性があるバグを修正#31968- MySQL 5.5 または 5.6 クライアントから TiDB パスワードなしアカウントへの接続が失敗する可能性があるバグを修正#32334
- トランザクション#29851で動的モードでパーティション テーブルを読み取るときに誤った結果が発生する問題を修正
- TiDB がTiFlash #32814に重複したタスクをディスパッチする可能性があるバグを修正
timdiff
関数の入力にミリ秒が含まれている場合に返される誤った結果を修正#31680- パーティションを明示的に読み取り、IndexJoin プラン#32007を使用した場合に誤った結果が発生する問題を修正しました。
- 列タイプを同時に変更すると列名の変更が失敗するバグを修正#31075
- TiFlashプランの純コストの計算式が TiKV プランと一致しないバグを修正#30103
KILL TIDB
アイドル接続時にすぐに効果を発揮できないバグを修正#24031- 生成された列を持つテーブルをクエリするときに間違った結果が発生する可能性がある問題を修正#33038
left join
#31321を使用して複数のテーブルのデータを削除した場合の誤った結果を修正- オーバーフロー#31868の場合に
SUBTIME
関数が誤った結果を返すバグを修正 - 集計クエリに条件
having
が含まれている場合に演算子selection
をプッシュダウンできないバグを修正しました#33166 - クエリがエラーを報告したときに CTE がブロックされる可能性があるバグを修正#31302
- 非厳密モードでテーブルを作成するときに、varbinary または varchar 列の長さが長すぎるとエラーが発生する可能性があるバグを修正しました#30328
- フォロワーが指定されていない場合の
information_schema.placement_policies
のフォロワー数の誤りを修正#31702 - TiDB でインデックス作成時に列プレフィックス長を 0 に指定できる問題を修正#31972
- TiDBがスペースで終わるパーティション名を許可する問題を修正#31535
RENAME TABLE
文#29893のエラーメッセージを修正する
ティクヴ
- ピアステータスが
Applying
#11746ときにスナップショットファイルを削除すると発生するpanic問題を修正しました。 - フロー制御が有効で、
level0_slowdown_trigger
明示的に設定されている場合に QPS が低下する問題を修正#11424 - ピアを破棄するとレイテンシーが大きくなる可能性がある問題を修正#10210
- GCワーカーがビジー状態のときにTiKVがデータの範囲を削除できない(つまり内部コマンド
unsafe_destroy_range
が実行される)バグを修正#11903 StoreMeta
のデータが誤って削除されたときに TiKV がパニックを起こすバグを修正#11852- ARM プラットフォームでプロファイリングを実行するときに TiKV がパニックになるバグを修正#10658
- TiKV が 2 年以上実行されている場合にpanicする可能性があるバグを修正#11940
- SSE命令セット#12034欠落により発生するARM64アーキテクチャでのコンパイル問題を修正
- 初期化されていないレプリカを削除すると古いレプリカが再作成される可能性がある問題を修正#10533
- 古いメッセージにより TiKV がpanicを起こすバグを修正#12023
- TsSet 変換で未定義の動作 (UB) が発生する可能性がある問題を修正#12070
- レプリカ読み取りが線形化可能性#12109に違反する可能性があるバグを修正
- Ubuntu 18.04 #9765でTiKVがプロファイリングを実行するときに発生する潜在的なpanic問題を修正
- tikv-ctl が間違った文字列一致のために誤った結果を返す問題を修正#12329
- メモリメトリックのオーバーフローによって発生する断続的なパケット損失とメモリ不足 (OOM) の問題を修正しました#12160
- TiKV #12231を終了するときに誤って TiKV パニックを報告する潜在的な問題を修正しました。
- ピアステータスが
PD
TiFlash
- メモリ制限が有効になっているときに発生するTiFlashpanicの問題を修正#3902
- 期限切れのデータがゆっくりとリサイクルされる問題を修正#4146
Snapshot
複数の DDL 操作#4072と同時に適用された場合にTiFlashpanicが発生する可能性がある問題を修正- 読み取り負荷が高い状態で列を追加した後に発生する可能性のあるクエリエラーを修正#3967
- 負の引数を持つ
SQRT
関数がNull
ではなくNaN
を返す問題を修正しました#3598 INT
DECIMAL
にキャストするとオーバーフロー#3920が発生する可能性がある問題を修正- 複数値式#4016で
IN
の結果が正しくない問題を修正 - 日付の形式で
'\n'
無効な区切り文字として認識される問題を修正#4036 - 同時実行性の高いシナリオで学習者の読み取りプロセスに時間がかかりすぎる問題を修正#3555
DATETIME
DECIMAL
#4151にキャストするときに発生する誤った結果を修正- クエリがキャンセルされたときに発生するメモリリークの問題を修正#4098
- エラスティックスレッドプールを有効にするとメモリリークが発生する可能性があるバグを修正#4098
- ローカルトンネルが有効になっている場合、キャンセルされた MPP クエリによってタスクが永久にハングアップする可能性があるバグを修正#4229
- HashJoin ビルド側の障害により MPP クエリが永久にハングする可能性があるバグを修正#4195
- MPP タスクがスレッドを永久にリークする可能性があるバグを修正#4238
ツール
バックアップと復元 (BR)
ティCDC
batch-replace-enable
が無効になっている場合に MySQL シンクが重複したreplace
SQL 文を生成するバグを修正#4501- PDリーダーが強制終了するとTiCDCノードが異常終了するバグを修正#4248
- 一部のMySQLバージョン#4504のエラー
Unknown system variable 'transaction_isolation'
修正 Canal-JSON
string
#4635を誤って処理した場合に発生する可能性がある TiCDCpanic問題を修正しました。- 一部のケースでシーケンスが誤って複製されるバグを修正#4552
Canal-JSON
nil #4736サポートしていないために発生する可能性がある TiCDCpanic問題を修正- タイプ
Enum/Set
およびTinyText/MediumText/Text/LongText
の Avro コーデックの誤ったデータ マッピングを修正しました#4454 - Avroが
NOT NULL
列目をNULL可能フィールド#4818に変換するバグを修正 - TiCDC が終了できない問題を修正#4699
TiDB データ移行 (DM)
- ステータス#4281を照会するときにのみ同期メトリックが更新される問題を修正しました
- セーフモードでの更新ステートメントの実行エラーにより、DM ワーカーがpanicになる可能性がある問題を修正しました#4317
- 長いvarcharがエラーを報告するバグを修正
Column length too big
#4637 - 複数の DM ワーカーが同じアップストリーム#3737からデータを書き込むことで発生する競合の問題を修正しました。
- ログに「チェックポイントに変更はありません。同期フラッシュチェックポイントをスキップしてください」というメッセージが何百も出力され、レプリケーションが非常に遅くなる問題を修正しました#4619
- 悲観的モード#5002でシャードをマージし、上流から増分データを複製する際の DML 損失の問題を修正しました。
TiDB Lightning
Dumpling
TiDBBinlog
- 大規模なアップストリーム書き込みトランザクションが Kafka #1136にレプリケートされるときに TiDB Binlog がスキップされる可能性がある問題を修正しました。