TiDB 7.3.0 リリースノート
発売日: 2023年8月14日
TiDB バージョン: 7.3.0
クイックアクセス: クイックスタート
7.3.0 では、次の主要な機能が導入されています。さらに、7.3.0 には、TiDBサーバーとTiFlashのクエリ安定性を強化する一連の機能強化 (セクション機能の詳細で説明) も含まれています。これらの機能強化は、本質的に雑多であり、ユーザーに直接関係するものではないため、次の表には含まれていません。
機能の詳細
パフォーマンス
TiFlashはレプリカ選択戦略#44106 @ 徐淮宇をサポートします
v7.3.0 より前のバージョンでは、 TiFlash はパフォーマンスを最大化するために、データ スキャンと MPP 計算にすべてのノードのレプリカを使用していました。v7.3.0 以降では、 TiFlashにレプリカ選択戦略が導入され、
tiflash_replica_readシステム変数を使用して構成できるようになりました。この戦略では、 ゾーン属性のノードに基づいて特定のレプリカを選択し、データ スキャンと MPP 計算のために特定のノードをスケジュールすることがサポートされています。複数のデータ センターに展開され、各データ センターに完全なTiFlashデータ レプリカがあるクラスターの場合、現在のデータ センターからのみTiFlashレプリカを選択するようにこの戦略を構成できます。つまり、データ スキャンと MPP 計算は現在のデータ センターのTiFlashノードでのみ実行されるため、データ センター間での過剰なネットワーク データ転送が回避されます。
詳細についてはドキュメンテーション参照してください。
TiFlashはノード#40220 @ エルサ0520内でランタイムフィルターをサポートします。
ランタイム フィルターは、クエリ プランニング フェーズで生成される動的述語です。テーブル結合のプロセスでは、これらの動的述語によって結合条件を満たさない行を効果的にフィルター処理できるため、スキャン時間とネットワーク オーバーヘッドが削減され、テーブル結合の効率が向上します。v7.3.0 以降、 TiFlash はノード内でランタイム フィルターをサポートし、分析クエリの全体的なパフォーマンスが向上します。一部の TPC-DS ワークロードでは、パフォーマンスが 10% ~ 50% 向上します。
この機能は、v7.3.0 ではデフォルトで無効になっています。この機能を有効にするには、システム変数
tidb_runtime_filter_modeをLOCALに設定します。詳細についてはドキュメンテーション参照してください。
TiFlash は共通テーブル式 (CTE) の実行をサポートしています (実験的) #43333 @ ウィノロス
v7.3.0 より前では、 TiFlashの MPP エンジンは、デフォルトで CTE を含むクエリを実行できません。MPP フレームワーク内で最高の実行パフォーマンスを実現するには、システム変数
tidb_opt_force_inline_cteを使用して CTE のインライン化を強制する必要があります。v7.3.0 以降、TiFlash の MPP エンジンは、CTE をインライン化せずにクエリを実行することをサポートし、MPP フレームワーク内で最適なクエリ実行を可能にします。TPC-DS ベンチマーク テストでは、CTE をインライン化する場合と比較して、この機能により、CTE を含むクエリの全体的なクエリ実行速度が 20% 向上することが示されました。
この機能は実験的であり、デフォルトでは無効になっています。これはシステム変数
tidb_opt_enable_mpp_shared_cte_executionによって制御されます。
信頼性
新しいオプティマイザヒント#45520 @ qw4990を追加
v7.3.0 では、TiDB はテーブル間の結合方法を制御するためのいくつかの新しいオプティマイザーヒントを導入しています。
NO_MERGE_JOIN()マージ結合以外の結合方法を選択します。NO_INDEX_JOIN()インデックス ネスト ループ結合以外の結合方法を選択します。NO_INDEX_MERGE_JOIN()インデックス ネスト ループ マージ結合以外の結合方法を選択します。NO_HASH_JOIN()ハッシュ結合以外の結合方法を選択します。NO_INDEX_HASH_JOIN()インデックスネストループハッシュ結合以外の結合方法を選択します。
詳細についてはドキュメンテーション参照してください。
予想以上にリソースを使用するクエリを手動でマークする (実験的) #43691 @ コナー1996 @ キャビンフィーバーB
v7.2.0 では、TiDB は、予想以上にリソースを使用するクエリ (ランナウェイ クエリ) を自動的にダウングレードまたはキャンセルすることで、ランナウェイ クエリを自動的に管理します。実際には、ルールだけではすべてのケースをカバーできません。そのため、TiDB v7.3.0 では、ランナウェイ クエリを手動でマークする機能が導入されています。新しいコマンド
QUERY WATCHを使用すると、SQL テキスト、SQL ダイジェスト、または実行プランに基づいてランナウェイ クエリをマークし、マークされたランナウェイ クエリをダウングレードまたはキャンセルできます。この機能は、データベースで突然発生するパフォーマンスの問題に対して効果的な介入方法を提供します。クエリによって発生するパフォーマンスの問題の場合、根本原因を特定する前に、この機能によって全体的なパフォーマンスへの影響を迅速に軽減し、システムのサービス品質を向上させることができます。
詳細についてはドキュメンテーション参照してください。
構文
リストとリスト列のパーティションテーブルは、デフォルトのパーティション#20679 @ ミョンス @ bb7133をサポートします。
v7.3.0 より前では、
INSERTステートメントを使用してリストまたはリスト COLUMNSパーティションテーブルにデータを挿入する場合、データはテーブルの指定されたパーティション条件を満たす必要があります。挿入するデータがこれらの条件のいずれも満たさない場合、ステートメントの実行は失敗するか、または非準拠のデータは無視されます。v7.3.0 以降、List および List COLUMNS パーティション テーブルは、デフォルト パーティションをサポートします。デフォルト パーティションの作成後、挿入するデータがパーティション条件を満たさない場合、そのデータはデフォルト パーティションに書き込まれます。この機能により、List およびList COLUMNS パーティショニングの使いやすさが向上し、
INSERTステートメントの実行失敗や、パーティション条件を満たさないデータによるデータの無視が回避されます。この機能は、MySQL 構文に対する TiDB 拡張であることに注意してください。デフォルト パーティションを持つパーティションテーブルの場合、テーブル内のデータを MySQL に直接複製することはできません。
詳細についてはドキュメンテーション参照してください。
可観測性
統計収集の進行状況を表示する#44033 @ ホーキングレイ
大規模なテーブルの統計の収集には、多くの場合、長い時間がかかります。以前のバージョンでは、統計の収集の進行状況を確認できなかったため、完了時間を予測できませんでした。TiDB v7.3.0 では、統計の収集の進行状況を表示する機能が導入されています。システム テーブル
mysql.analyze_jobsまたはSHOW ANALYZE STATUSを使用して、サブタスクごとに全体的なワークロード、現在の進行状況、および推定完了時間を表示できます。大規模なデータのインポートや SQL パフォーマンスの最適化などのシナリオでは、この機能により、タスク全体の進行状況を把握し、ユーザー エクスペリエンスを向上させることができます。詳細についてはドキュメンテーション参照してください。
Plan Replayerは履歴統計#45038 @ 時間と運命のエクスポートをサポートします
v7.3.0 以降では、新しく追加された
dump with stats as of timestamp句により、Plan Replayer を使用して、特定の時点での指定された SQL 関連オブジェクトの統計をエクスポートできます。実行プランの問題の診断中に、履歴統計を正確に取得すると、問題が発生した時点で実行プランがどのように生成されたかをより正確に分析するのに役立ちます。これにより、問題の根本原因を特定し、実行プランの問題の診断の効率を大幅に向上できます。詳細についてはドキュメンテーション参照してください。
データ移行
TiDB Lightning は、競合データ検出および処理戦略#41629 @ ランス6716の新しいバージョンを導入します
以前のバージョンでは、 TiDB Lightning は論理インポート モードと物理インポート モードに対して異なる競合検出および処理方法を使用していましたが、設定が複雑で、ユーザーにとって理解しにくいものでした。また、物理インポート モードでは、
replaceまたはignore戦略を使用して競合を処理できません。v7.3.0 以降、 TiDB Lightning は論理インポート モードと物理インポート モードの両方に対して統合された競合検出および処理戦略を導入しています。競合が発生した場合、エラーを報告する (error)、競合データを置き換える (replace)、または無視する (ignore) ことを選択できます。競合レコードの数を制限できます。たとえば、指定された数の競合レコードを処理した後にタスクを中断して終了するなどです。さらに、システムはトラブルシューティングのために競合データを記録できます。競合の多いインポート データの場合、パフォーマンスを向上させるために、新しいバージョンの競合検出および処理戦略を使用することをお勧めします。ラボ環境では、新しいバージョンの戦略により、競合検出および処理のパフォーマンスが古いバージョンよりも最大 3 倍高速化されます。このパフォーマンス値は参考値です。実際のパフォーマンスは、構成、テーブル構造、競合データの割合によって異なる場合があります。新しいバージョンと古いバージョンの競合戦略を同時に使用することはできません。古い競合検出および処理戦略は、将来廃止される予定です。
詳細についてはドキュメンテーション参照してください。
TiDB Lightning はPartitioned Raft KV (実験的) #14916 @ GMHDBJDをサポートします
TiDB Lightning は、Partitioned Raft KV をサポートするようになりました。この機能により、 TiDB Lightningのデータ インポート パフォーマンスが向上します。
TiDB Lightning、より多くの診断ログを印刷することでトラブルシューティングを強化する新しいパラメータ
enable-diagnose-logが導入されました#45497 @ D3ハンターデフォルトでは、この機能は無効になっており、 TiDB Lightning は
lightning/main含むログのみを出力。有効にすると、 TiDB Lightning はすべてのパッケージ (client-goとtidbを含む) のログを出力、client-goとtidbに関連する問題の診断に役立ちます。詳細についてはドキュメンテーション参照してください。
互換性の変更
注記:
このセクションでは、v7.2.0 から現在のバージョン (v7.3.0) にアップグレードするときに知っておく必要のある互換性の変更について説明します。v7.1.0 以前のバージョンから現在のバージョンにアップグレードする場合は、中間バージョンで導入された互換性の変更も確認する必要がある可能性があります。
行動の変化
ティビ
- MPP は、 TiFlashエンジンによって提供される分散コンピューティング フレームワークであり、ノード間のデータ交換を可能にし、高性能で高スループットの SQL アルゴリズムを提供します。他のプロトコルと比較して、MPP プロトコルはより成熟しており、より優れたタスクおよびリソース管理を提供できます。v7.3.0 以降、TiDB が計算タスクをTiFlashにプッシュする場合、オプティマイザーはデフォルトで MPP プロトコルを使用して実行プランのみを生成します。1
tidb_allow_mppOFFに設定されている場合、TiDB をアップグレードした後にクエリがエラーを返す可能性があります。アップグレード前にtidb_allow_mppの値を確認し、ONに設定することをお勧めします。コスト見積もりに基づいて実行プランを生成するためにオプティマイザーが Cop、BatchCop、および MPP プロトコルのいずれかを選択する必要がある場合は、tidb_allow_tiflash_cop変数をONに設定できます。
- MPP は、 TiFlashエンジンによって提供される分散コンピューティング フレームワークであり、ノード間のデータ交換を可能にし、高性能で高スループットの SQL アルゴリズムを提供します。他のプロトコルと比較して、MPP プロトコルはより成熟しており、より優れたタスクおよびリソース管理を提供できます。v7.3.0 以降、TiDB が計算タスクをTiFlashにプッシュする場合、オプティマイザーはデフォルトで MPP プロトコルを使用して実行プランのみを生成します。1
バックアップと復元 (BR)
- BR は、完全なデータ復元を実行する前に、空のクラスター チェックを追加します。デフォルトでは、空でないクラスターへのデータの復元は許可されません。復元を強制する場合は、
--filterオプションを使用して、データを復元する対応するテーブル名を指定できます。
- BR は、完全なデータ復元を実行する前に、空のクラスター チェックを追加します。デフォルトでは、空でないクラスターへのデータの復元は許可されません。復元を強制する場合は、
TiDB Lightning
tikv-importer.on-duplicateは非推奨となり、conflict.strategyに置き換えられました。- 移行タスクを停止する前にTiDB Lightningが許容できる致命的でないエラーの最大数を制御する
max-errorパラメータは、インポート データの競合を制限しなくなりました。3 パラメータは、許容できる競合レコードの最大数を制御するようconflict.thresholdなりました。
ティCDC
- Kafka シンクが Avro プロトコルを使用する場合、
force-replicateパラメータがtrueに設定されると、TiCDC は変更フィードを作成するときにエラーを報告します。 delete-only-output-handle-key-columnsとforce-replicateパラメータの間に互換性がないため、両方のパラメータが有効になっていると、TiCDC は変更フィードを作成するときにエラーを報告します。- 出力プロトコルがオープン プロトコルの場合、
UPDATEイベントは変更された列のみを出力します。
- Kafka シンクが Avro プロトコルを使用する場合、
システム変数
コンフィグレーションファイルのパラメータ
システムテーブル
- 内部タイマーのメタデータを保存するための新しいシステム テーブル
mysql.tidb_timersを追加します。
廃止された機能
ティビ
- 統計の
Fast Analyze機能 (実験的) は、v7.5.0 で廃止される予定です。 - 統計の増分コレクション機能は、v7.5.0 で廃止されます。
- 統計の
改善点
ティビ
- 最適化フェーズ#22076 @ ウィノロス中に
EXPLAINステートメントがサブクエリを事前に実行するかどうかを制御するための新しいシステム変数tidb_opt_enable_non_eval_scalar_subqueryを導入します。 - グローバルキルが有効になっている場合、 Control+C #8854 @ ピンギュを押すことで現在のセッションを終了できます。
IS_FREE_LOCK()とIS_USED_LOCK()ロック関数#44493 @ ドヴェーデンをサポート- ディスク#45125 @ ヤンケオからダンプされたチャンクの読み取りパフォーマンスを最適化します。
- オプティマイザ修正コントロール#44855 @ 時間と運命を使用して、インデックス結合の内部テーブルの過大評価の問題を最適化します。
- 最適化フェーズ#22076 @ ウィノロス中に
ティクヴ
PD
TiFlash
- 物理ファイルの数を減らすために新しい DTFile 形式バージョン
storage.format_version = 5をサポートします (実験的) #7595 @ ホンユンヤン
- 物理ファイルの数を減らすために新しい DTFile 形式バージョン
ツール
バックアップと復元 (BR)
ティCDC
- オープンプロトコル出力のメッセージサイズを最適化して、
UPDATEイベント#9336 @ 3エースショーハンドを送信するときに更新された列の値のみが含まれるようにします。 - ストレージシンクは、HEX 形式のデータの 16 進エンコードをサポートするようになり、AWS DMS 形式仕様#9373 @ チャールズ・チュン96と互換性があります。
- Kafka Sinkは、メッセージが大きすぎる場合にハンドルキーデータのみ送信サポートし、メッセージのサイズを#9382 @ 3エースショーハンドに縮小します。
- オープンプロトコル出力のメッセージサイズを最適化して、
バグの修正
ティビ
- MySQL カーソルフェッチプロトコルを使用すると、結果セットのメモリ消費が
tidb_mem_quota_query制限を超え、TiDB OOM が発生する可能性がある問題を修正しました。修正後、TiDB は結果セットを自動的にディスクに書き込み、メモリを解放します#43233 @ ヤンケオ - データ競合#45561 @ ゲンリキによって発生する TiDBpanic問題を修正
indexMergeのクエリが#45279 @ 翻訳者で強制終了されたときに発生するハングアップの問題を修正しましたtidb_enable_parallel_apply有効になっている場合に MPP モードでクエリ結果が正しくない問題を修正#45299 @ 風の話し手- PD時間#44822 @ ジグアンに突然の変化があった場合に
resolve lockハングする可能性がある問題を修正 - GC ロック解決ステップで一部の悲観的ロックが見逃される可能性がある問題を修正#45134 @ ミョンケミンタ
ORDER BYクエリが動的プルーニングモード#45007 @ 定義2014で誤った結果を返す問題を修正しましたDEFAULT列目の値#45136 @ 定義2014と同じ列にAUTO_INCREMENTを指定できる問題を修正しました- システムテーブル
INFORMATION_SCHEMA.TIKV_REGION_STATUSをクエリすると、場合によっては誤った結果が返される問題を修正しました#45531 @ 定義2014 - 一部のケースでパーティションテーブルのプルーニングが不正確になる問題を修正#42273 @ ジフハウス
- パーティションテーブル#42435 @ L-メープルのパーティションを切り捨てるときにグローバルインデックスがクリアされない問題を修正しました。
- 1 つの TiDB ノード#45022 @ lcwangchaoで障害が発生した後、他の TiDB ノードが TTL タスクを引き継がない問題を修正しました。
- TTLが#45510 @ lcwangchaoで実行されているときのメモリリークの問題を修正
- パーティションテーブル#44966 @ リリンハイにデータを挿入する際の不正確なエラーメッセージの問題を修正
INFORMATION_SCHEMA.TIFLASH_REPLICAテーブル#7795 @ ロイド・ポティガーの読み取り権限の問題を修正- 間違ったパーティションテーブル名#44967 @ リバー2000iを使用するとエラーが発生する問題を修正
tidb_enable_dist_taskが有効になっている場合にインデックスの作成が停止する問題を修正#44440 @ タンジェンタ- BR #44716 @ 天菜まおを使用して
AUTO_ID_CACHE=1テーブルを復元するときに発生するduplicate entryエラーを修正します。 TRUNCATE TABLE実行に費やされた時間がADMIN SHOW DDL JOBS#44785 @ タンジェンタに表示されるタスク実行時間と一致しない問題を修正- メタデータの読み取りに 1 つの DDL リース#45176 @ ジムララよりも長い時間がかかる場合に TiDB のアップグレードが停止する問題を修正しました。
- ステートメントの
n負の数#44786 @ xheboxの場合に、ステートメントSELECT CAST(n AS CHAR)のクエリ結果が正しくない問題を修正しました。 tidb_opt_agg_push_downが有効になっている場合にクエリが誤った結果を返す可能性がある問題を修正#44795 @ アイリンキッドcurrent_date()のクエリがプラン キャッシュ#45086 @ qw4990を使用した場合に誤った結果が発生する問題を修正しました。
- MySQL カーソルフェッチプロトコルを使用すると、結果セットのメモリ消費が
ティクヴ
PD
- PD を再起動すると
defaultリソース グループが#6787 @ 栄光で再初期化される可能性がある問題を修正しました。 - etcd がすでに起動しているがクライアントがまだ接続していない場合、クライアントを呼び出すと PD がpanicになる可能性がある問題を修正しました#6860 @ ヒューシャープ
- リージョンの
health-check出力が、リージョンID #6560 @ じゃがいもをクエリして返されるリージョン情報と一致しない問題を修正しました。 unsafe recoveryで不合格になった学習者のピアがauto-detectモード#6690 @ v01dスターで無視される問題を修正- 配置ルールがルール#6662 @ rleungxを満たさないTiFlash学習者を選択する問題を修正しました
- ルール チェッカーがピア#6559 @ ノルーシュを選択した場合に、不健全なピアを削除できない問題を修正しました。
- PD を再起動すると
TiFlash
ツール
ティCDC
- PD #9294 @ アズドンメンが一時的に利用できないために変更フィードが失敗する問題を修正しました
- 一部の TiCDC ノードがネットワークから分離されている場合に発生する可能性のあるデータの不整合の問題を修正#9344 @ チャールズ・チュン96
- Kafka Sink がエラーに遭遇すると、changefeed の進行が無期限にブロックされる可能性がある問題を修正しました#9309 @ ヒック
- TiCDC ノードのステータスが#9354 @ スドジに変化したときに発生する可能性のあるpanic問題を修正しました。
- デフォルトの
ENUM値#9259 @ 3エースショーハンドエンコード エラーを修正
TiDB Lightning
寄稿者
TiDB コミュニティの以下の貢献者に感謝いたします。