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はデフォルトでは有効になっていません。有効にすると、各TiKVノードまたはTiDBノードのCPU負荷をリアルタイムで確認できます。そのため、CPU負荷の高いTop 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にプッシュダウンできるようになり、式とデータ型の計算におけるクエリ効率が向上しています。ホットスポットインデックスの最適化
単調に増加するデータを一括してセカンダリインデックスに書き込むと、インデックスのホットスポットが発生し、全体的な書き込みスループットに影響します。TiDB v6.0.0以降、書き込みパフォーマンスを向上させるために、
tidb_shard番目の関数を使用してインデックスのホットスポットを分散させる機能をサポートしています。現在、tidb_shard関数は一意のセカンダリインデックスにのみ適用されます。このアプリケーションフレンドリーなソリューションは、元のクエリ条件を変更する必要がありません。このソリューションは、書き込みスループットが高い場合、ポイントクエリ、バッチポイントクエリなどのシナリオで使用できます。ただし、範囲クエリによって分散されたデータをアプリケーションで使用すると、パフォーマンスが低下する可能性があることに注意してください。したがって、そのような場合には、検証なしにこの機能を使用しないでください。TiFlash MPP エンジンのパーティション テーブルの動的プルーニング モードをサポート (実験的)
このモードでは、TiDB はTiFlashの MPP エンジンを使用してパーティション テーブル上のデータを読み取って計算できるため、パーティション テーブルのクエリ パフォーマンスが大幅に向上します。
MPPエンジンの計算パフォーマンスを向上させる
より多くの関数と演算子をMPPエンジンにプッシュダウンするサポート
- 論理関数
IS NOTIS - 文字列関数:
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_level2 つのパラメータが導入されており、ユーザーはパフォーマンスと容量のバランスに基づいて最適な圧縮アルゴリズムを選択できます。すべての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 より大きい場合、最大エラー機能が有効になります。エンコード中に行にエラーが発生した場合、その行を含むレコードがターゲット 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 にアップグレードする場合、すべての中間バージョンの互換性変更ノートを知りたい場合は、該当するバージョンのリリースノートを確認できます。
システム変数
コンフィグレーションファイルのパラメータ
その他
- データ配置ポリシーには、次の互換性の変更があります。
- バインディングはサポートされていません。直接配置オプションは構文から削除されました。
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_TRUEIS_FALSE関数IS_TRUE_WITH_NULLTiFlash #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_primaryPrimaryRegion同じ値の場合にTiDBが配置ルールをRegionsしてテーブルを作成できないバグを修正しました#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
- 挿入ステートメント#31735を使用して仮想的に生成された列にデータを挿入するときに発生する可能性のあるpanicを修正しました。
- 作成されたリストパーティション#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
SET timestampadd 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条件#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
batch-replace-enable無効になっているときに MySQL シンクが重複したreplaceSQL 文を生成するバグを修正#4501- PDリーダーが強制終了した際にTiCDCノードが異常終了するバグを修正#4248
- 一部のMySQLバージョン#4504のエラー
Unknown system variable 'transaction_isolation'を修正 Canal-JSONstring#4635を誤って処理した場合に発生する可能性のある TiCDCpanic問題を修正しました- 一部のケースでシーケンスが誤って複製されるバグを修正#4552
Canal-JSONnil #4736をサポートしていないために発生する可能性がある TiCDCpanic問題を修正しました- タイプ
Enum/SetおよびTinyText/MediumText/Text/LongText#4454のAvroコーデックの誤ったデータマッピングを修正 - Avroが
NOT NULL列目をNULL許容フィールド#4818に変換するバグを修正 - TiCDC が終了できない問題を修正#4699
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 がスキップされる可能性がある問題を修正しました