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 ™は、本リリースで正式にオープンソース化されました。詳細は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
SQLベースのデータ配置ルール
TiDBは、優れたスケーラビリティを備えた分散型データベースです。通常、データは複数のサーバー、あるいは複数のデータセンターにまたがって展開されます。そのため、データのスケジュール管理はTiDBの最も重要な基本機能の一つです。多くの場合、ユーザーはデータのスケジュール管理や管理方法を意識する必要はありません。しかし、アプリケーションの複雑性が増すにつれ、分離性やアクセスレイテンシーによるデプロイメントの変更がTiDBの新たな課題となっています。TiDBはv6.0.0以降、SQLインターフェースに基づくデータのスケジュール管理および管理機能を正式に提供しています。レプリカ数、ロールタイプ、データの配置場所といったディメンションにおいて、柔軟なスケジュール管理と管理をサポートします。また、マルチサービス共有クラスターやクロス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スナップショット、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は不要なTSOを削減するために、 コミット読み取り分離レベル位置に
tidb_rc_read_check_ts
システム変数を追加します。この変数はデフォルトで無効になっています。この変数を有効にすると、読み取り/書き込み競合が発生しないシナリオでは、この最適化により重複した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にプッシュダウンできるようになり、式とデータ型の計算におけるクエリ効率が向上しています。ホットスポットインデックスの最適化
単調に増加するデータを一括してセカンダリインデックスに書き込むと、インデックスのホットスポットが発生し、全体的な書き込みスループットに影響します。TiDB v6.0.0以降、書き込みパフォーマンスを向上させるために、
tidb_shard
の関数を使用してインデックスのホットスポットを分散させる機能をサポートしています。現在、tidb_shard
関数は一意のセカンダリインデックスにのみ適用されます。このアプリケーションフレンドリーなソリューションは、元のクエリ条件を変更する必要がありません。このソリューションは、書き込みスループットが高い場合、ポイントクエリ、バッチポイントクエリなどのシナリオで使用できます。ただし、範囲クエリによって分散されたデータをアプリケーションで使用すると、パフォーマンスが低下する可能性があることに注意してください。したがって、そのような場合には、検証なしにこの機能を使用しないでください。TiFlash MPP エンジンのパーティション テーブルの動的プルーニング モードをサポート (実験的)
このモードでは、TiDB はTiFlashの MPP エンジンを使用してパーティション テーブル上のデータを読み取って計算できるため、パーティション テーブルのクエリ パフォーマンスが大幅に向上します。
MPPエンジンの計算パフォーマンスを向上させる
より多くの関数と演算子をMPPエンジンにプッシュダウンするサポート
IS NOT
関数:IS
- 文字列関数:
REGEXP()
,NOT REGEXP()
LEAST(int/real)
関数:GREATEST(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チェック(チェックサム)をデフォルトで有効にする
この機能はバージョン5.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は10万テーブルの同時レプリケーションを安定的にサポートできることが示されています。
展開と保守
新しい照合順序ルールをデフォルトで有効にする
TiDB v4.0以降、大文字小文字を区別しない、アクセントを区別しない、およびパディングルールにおいてMySQLと同様に動作する新しい照合順序ルールがTiDBでサポートされています。新しい照合順序ルールは
new_collations_enabled_on_first_bootstrap
パラメータで制御されますが、このパラメータはデフォルトで無効になっています。v6.0以降、TiDBは新しい照合順序ルールをデフォルトで有効にします。この設定はTiDBクラスタの初期化時にのみ有効になることに注意してください。TiKVノードの再起動後のリーダーバランシングを高速化
TiKVノードの再起動後、不均等に分散されたリーダーノードを負荷分散のために再配分する必要があります。大規模クラスターでは、リーダーノードのバランス調整時間はリージョン数と正の相関関係にあります。例えば、10万リージョンのリーダーノードのバランス調整には20~30分かかる場合があり、負荷の不均等によるパフォーマンスの問題や安定性リスクが生じやすくなります。TiDB v6.0.0では、バランス調整の同時実行性を制御するパラメータが追加され、デフォルト値が従来の4倍に拡張されました。これにより、リーダーノードのバランス調整時間が大幅に短縮され、TiKVノードの再起動後の業務復旧が加速されます。
統計の自動更新のキャンセルをサポート
統計は、SQLパフォーマンスに影響を与える最も重要な基本データの一つです。統計の完全性と適時性を確保するため、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
ファイルに設定項目を追加することでカスタマイズできます。
互換性の変更
注記:
以前の TiDB バージョンから v6.0.0 にアップグレードする場合、すべての中間バージョンの互換性変更ノートを知りたい場合は、該当するバージョンのリリースノート確認できます。
システム変数
変数名 | タイプを変更 | 説明 |
---|---|---|
placement_checks | 削除済み | DDL ステートメントがSQL の配置ルールで指定された配置ルールを検証するかどうかを制御します。tidb_placement_mode に置き換えられまし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より前のバージョンからアップグレードした既存のクラスターでは、このチェックはデフォルトで無効になっています。 |
コンフィグレーションファイルのパラメータ
コンフィグレーションファイル | コンフィグレーション | タイプを変更 | 説明 |
---|---|---|---|
TiDB | 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変数を使用する必要があります。 |
TiDB | new_collations_enabled_on_first_bootstrap | 修正済み | 新しい照合順序のサポートを有効にするかどうかを制御します。バージョン6.0以降、デフォルト値はfalse からtrue に変更されました。この設定項目は、クラスターが初めて初期化されたときにのみ有効になります。最初のブートストラップ後は、この設定項目を使用して新しい照合順序順序フレームワークを有効化または無効化することはできません。 |
TiKV | backup.num-threads | 修正済み | 値の範囲は[1, CPU] に変更されます。 |
TiKV | raftstore.apply-max-batch-size | 修正済み | 最大値は10240 に変更されます。 |
TiKV | raftstore.raft-max-size-per-msg | 修正済み | 最小値が0 から0 より大きい値に変更されます。最大値は 3GB に設定されています。単位が MB からKB|MB|GB に変更されます。 |
TiKV | raftstore.store-max-batch-size | 修正済み | 最大値は10240 に設定されています。 |
TiKV | readpool.unified.max-thread-count | 修正済み | 調整可能な範囲は[min-thread-count, MAX(4, CPU)] に変更されます。 |
TiKV | rocksdb.enable-pipelined-write | 修正済み | デフォルト値がtrue からfalse に変更されました。この設定を有効にすると、従来のパイプライン書き込みが使用されます。この設定を無効にすると、新しいパイプラインコミットメカニズムが使用されます。 |
TiKV | rocksdb.max-background-flushes | 修正済み | CPU コア数が 10 の場合、デフォルト値は3 です。CPU コア数が 8 の場合、デフォルト値は 2 です。 |
TiKV | 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 より前のバージョンにそのままダウングレードすることはできないことに注意してください。 |
TiDB | pessimistic-txn.pessimistic-auto-commit | 新しく追加された | 悲観的トランザクション モードがグローバルに有効になっている場合 ( tidb_txn_mode='pessimistic' )、自動コミット トランザクションが使用するトランザクション モードを決定します。 |
TiKV | pessimistic-txn.in-memory | 新しく追加された | インメモリ悲観的ロックを有効にするかどうかを制御します。この機能を有効にすると、悲観的トランザクションは、悲観的ロックをディスクに書き込んだり他のレプリカに複製したりするのではなく、可能な限りTiKVメモリに悲観的ロックを保存します。これにより、悲観的トランザクションのパフォーマンスが向上しますが、悲観的ロックが失われる可能性がわずかながらあり、その結果、悲観的トランザクションがコミットに失敗する可能性があります。デフォルト値はtrue です。 |
TiKV | 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 で、これは新しいデータを使用して既存のデータを置き換えることを意味します。 |
TiCDC | dial-timeout | 新しく追加された | 下流のKafkaとの接続を確立する際のタイムアウト。デフォルト値は10s です。 |
TiCDC | read-timeout | 新しく追加された | 下流のKafkaから返されるレスポンスを取得する際のタイムアウト。デフォルト値は10s です。 |
TiCDC | 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以前のバージョンでは、TiDBは一部のnoopシステム変数に不正な値を許可していました。v6.0.0以降では、TiDBはシステム変数に不正な値を設定することを禁止します#31538
改善点
TiDB
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
関数をIS_TRUE_WITH_NULL
TiFlash #33047プッシュダウンする機能をサポート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にアップデートしました。
TiKV
- 多くのキー範囲を持つバッチに対するRaftstoreのサンプリング精度を向上#12327
debug/pprof/profile
の正しい「Content-Type」を追加して、プロファイルをより簡単に識別できるようにします#11521- Raftstore がハートビートを持っているときや読み取り要求を処理しているときにリーダーのリースの時間を無期限に更新し、レイテンシージッターを削減します#11579
- リーダーを切り替える際にコストが最も低いストアを選択することで、パフォーマンスの安定性が向上します#10602
- Raftログを非同期に取得することで、 Raftstore #11320をブロックすることによるパフォーマンスのジッターを軽減します。
- ベクトル計算#5751の
QUARTER
関数をサポート BIT
データ型を TiKV #30738にプッシュダウンする機能をサポートMOD
関数とSYSDATE
関数をTiKV #11916にプッシュダウンするサポート- 解決ロックのステップ#11993必要とする領域の数を減らすことで、TiCDC の回復時間を短縮します。
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)
TiCDC
TiDB データ移行 (DM)
TiDB Lightning
バグ修正
TiDB
SCHEDULE = majority_in_primary
が同じ値の場合にTiDBが配置ルールをRegions
PrimaryRegion
てテーブルを作成できないバグを修正しました#31271- インデックスルックアップ結合#30468使用してクエリを実行するときに発生する
invalid transaction
エラーを修正します - 2つ以上の権限が付与されているときに誤った結果#30855返すバグを修正しました
show grants
INSERT 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()
関数#32488でpanicが発生する可能性を修正- 他のタイプの列をタイムスタンプタイプの列に変更するときに発生するタイムゾーンの問題を修正しました#29585
- ChunkRPC #31981 #30880を使用してデータをエクスポートする際の TiDB OOM を修正
- 動的パーティションプルーニングモード#32516でサブSELECT LIMITが期待どおりに動作しないバグを修正しました
INFORMATION_SCHEMA.COLUMNS
表#32655のビットデフォルト値の形式が間違っている、または一貫性がない問題を修正しました。- サーバーの再起動後にパーティションテーブルの一覧表示でパーティションテーブルのプルーニングが機能しない可能性があるバグを修正#32416
add column
SET timestamp
後に間違ったデフォルトのタイムスタンプが使用される可能性があるバグを修正#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
条件#33166含まれている場合に演算子selection
プッシュダウンできないバグを修正しました。 - クエリがエラーを報告したときに CTE がブロックされる可能性があるバグを修正#31302
- 非厳密モードでテーブルを作成するときに、varbinary または varchar 列の長さが長すぎるとエラーが発生する可能性があるバグを修正しました#30328
information_schema.placement_policies
でフォロワーが指定されていない場合のフォロワー数が間違っていたのを修正#31702- TiDB でインデックスの作成時に列プレフィックス長を 0 に指定できる問題を修正#31972
- TiDBがスペースで終わるパーティション名を許可する問題を修正#31535
RENAME TABLE
文#29893のエラーメッセージを修正する
TiKV
- ピアステータスが
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)
TiCDC
- MySQLシンクが
batch-replace-enable
無効になっているときに重複した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
#4454のAvroコーデックの誤ったデータマッピングを修正 - Avroが
NOT NULL
列目をNULL可能なフィールド#4818に変換するバグを修正 - TiCDC が終了できない問題を修正#4699
- MySQLシンクが
TiDB データ移行 (DM)
- ステータス#4281照会するときにのみ同期メトリックが更新される問題を修正しました
- セーフモードでの更新ステートメントの実行エラーにより、DMワーカーがpanicになる可能性がある問題を修正しました#4317
- 長いvarcharsがエラーを報告するバグを修正
Column length too big
#4637 - 複数のDMワーカーが同じアップストリーム#3737からデータを書き込むことで発生する競合の問題を修正しました。
- ログに「チェックポイントに変更はありません。同期フラッシュチェックポイントをスキップしてください」というメッセージが数百件出力され、レプリケーションが非常に遅くなる問題を修正しました#4619
- 悲観的モード#5002でシャードをマージし、上流から増分データを複製する際のDML損失の問題を修正しました。
TiDB Lightning
Dumpling
TiDBBinlog
- 大規模な上流書き込みトランザクションが Kafka #1136にレプリケートされるときに TiDB Binlog がスキップされる可能性がある問題を修正しました