TiDB 7.2.0 リリースノート
発売日: 2023年6月29日
TiDB バージョン: 7.2.0
クイックアクセス: クイックスタート
7.2.0 では、次の主要な機能と改善が導入されています。
カテゴリ | 特徴 | 説明 |
---|---|---|
スケーラビリティとパフォーマンス | リソース グループは、 ランナウェイ クエリの管理をサポートします (実験的) | クエリのタイムアウトをより細かく管理できるようになり、クエリの分類に基づいてさまざまな動作が可能になります。指定したしきい値を満たすクエリは、優先順位を下げたり終了したりできます。 |
TiFlash はパイプライン実行モデルをサポートします (実験的) | TiFlash は、スレッド リソース制御を最適化するためにパイプライン実行モデルをサポートしています。 | |
構文 | データインポート用の新しい SQL ステートメントIMPORT INTOをサポートします (実験的) | TiDB Lightningの導入とメンテナンスを簡素化するために、TiDB では新しい SQL ステートメントIMPORT INTO 導入されました。このステートメントは、Amazon S3 または Google Cloud Storage (GCS) から TiDB への直接リモートインポートを含む、 TiDB Lightningの物理インポートモードを統合します。 |
DB 操作と可観測性 | DDL は一時停止および再開操作をサポートします (実験的) | この新しい機能により、インデックス作成などのリソースを大量に消費する DDL 操作を一時的に停止して、リソースを節約し、オンライン トラフィックへの影響を最小限に抑えることができます。準備ができたら、キャンセルして再起動する必要なく、これらの操作をシームレスに再開できます。この機能により、リソースの使用率が向上し、ユーザー エクスペリエンスが向上し、スキーマの変更が効率化されます。 |
機能の詳細
パフォーマンス
次の2つのウィンドウ関数 TiFlash #7427 @ 翻訳者に押し下げることをサポートします
FIRST_VALUE
LAST_VALUE
TiFlashはパイプライン実行モデル(実験的) #6518 @ シーライズをサポートします
v7.2.0 より前では、 TiFlashエンジンの各タスクは実行中に個別にスレッド リソースを要求する必要があります。TiFlashはタスクの数を制御してスレッド リソースの使用を制限し、過剰使用を防止しますが、この問題を完全に排除することはできませんでした。この問題に対処するために、v7.2.0 以降、 TiFlash はパイプライン実行モデルを導入しています。このモデルは、すべてのスレッド リソースを集中管理し、タスク実行を均一にスケジュールして、スレッド リソースの使用率を最大化しながらリソースの過剰使用を回避します。パイプライン実行モデルを有効または無効にするには、
tidb_enable_tiflash_pipeline_model
システム変数を変更します。詳細についてはドキュメント参照してください。
TiFlashはスキーマレプリケーションのレイテンシーを短縮します#7630 @ ホンユンヤン
テーブルのスキーマが変更されると、 TiFlash は最新のスキーマを TiKV からタイムリーに複製する必要があります。v7.2.0 より前では、 TiFlash がテーブル データにアクセスし、データベース内のテーブル スキーマの変更を検出すると、 TiFlash は、 TiFlashレプリカのないテーブルも含め、このデータベース内のすべてのテーブルのスキーマを再度複製する必要があります。その結果、多数のテーブルがあるデータベースでは、 TiFlash を使用して 1 つのテーブルからデータを読み取るだけでよい場合でも、 TiFlash がすべてのテーブルのスキーマ複製を完了するまで待機するレイテンシーが長くなる可能性があります。
v7.2.0 では、 TiFlash はスキーマ レプリケーション メカニズムを最適化し、 TiFlashレプリカを持つテーブルのスキーマのレプリケーションのみをサポートします。TiFlash レプリカを持つテーブルでスキーマの変更が検出されると、 TiFlash はそのテーブルのスキーマのみをレプリケーションします。これにより、 TiFlashのスキーマ レプリケーションのレイテンシーが短縮され、 TiFlashデータ レプリケーションに対する DDL 操作の影響が最小限に抑えられます。この最適化は自動的に適用され、手動での構成は必要ありません。
統計収集のパフォーマンスを向上させる#44725 @ 翻訳者
TiDB v7.2.0 では、統計収集戦略が最適化され、重複した情報やオプティマイザーにとって価値の低い情報がスキップされます。統計収集の全体的な速度が 30% 向上しました。この改善により、TiDB はデータベースの統計をよりタイムリーに更新できるようになり、生成された実行プランがより正確になり、データベース全体のパフォーマンスが向上します。
デフォルトでは、統計収集では
JSON
、BLOB
、MEDIUMBLOB
、およびLONGBLOB
タイプの列がスキップされます。tidb_analyze_skip_column_types
システム変数を設定することで、デフォルトの動作を変更できます。 TiDB は、JSON
、BLOB
、およびTEXT
タイプとそのサブタイプのスキップをサポートしています。詳細についてはドキュメント参照してください。
データとインデックスの一貫性チェックのパフォーマンスを向上#43693 @ 翻訳:
ADMIN CHECK [TABLE|INDEX]
ステートメントは、テーブル内のデータとそれに対応するインデックス間の一貫性をチェックするために使用されます。v7.2.0 では、TiDB はデータの一貫性をチェックする方法を最適化し、ADMIN CHECK [TABLE|INDEX]
の実行効率を大幅に向上させました。大量のデータを扱うシナリオでは、この最適化によりパフォーマンスが数百倍向上します。最適化はデフォルトで有効(デフォルトでは
tidb_enable_fast_table_check
またはON
)になっており、大規模なテーブルでのデータ整合性チェックに必要な時間を大幅に短縮し、運用効率を高めます。詳細についてはドキュメント参照してください。
信頼性
予想よりも多くのリソースを消費するクエリを自動的に管理する (実験的) #43691 @ コナー1996 @ キャビンフィーバーB @ 栄光 @ ヒューシャープ @ ノルーシュ
データベースの安定性に対する最も一般的な課題は、突然の SQL パフォーマンスの問題によってデータベース全体のパフォーマンスが低下することです。SQL パフォーマンスの問題には、十分にテストされていない新しい SQL ステートメント、データ量の大幅な変更、実行プランの突然の変更など、多くの原因があります。これらの問題を根本的に完全に回避することは困難です。TiDB v7.2.0 では、予想よりも多くのリソースを消費するクエリを管理する機能が提供されています。この機能により、パフォーマンスの問題が発生した場合の影響範囲を迅速に縮小できます。
これらのクエリを管理するには、リソース グループのクエリの最大実行時間を設定できます。クエリの実行時間がこの制限を超えると、クエリは自動的に優先順位が下げられるか、キャンセルされます。また、テキストまたは実行プランによって識別されたクエリをすぐに照合する期間を設定することもできます。これにより、識別フェーズ中に問題のあるクエリが同時に実行され、予想よりも多くのリソースが消費されるのを防ぐことができます。
予想よりも多くのリソースを消費するクエリを自動的に管理することで、予期しないクエリ パフォーマンスの問題に迅速に対応するための効果的な手段が提供されます。この機能により、問題がデータベース全体のパフォーマンスに与える影響を軽減し、データベースの安定性を向上させることができます。
詳細についてはドキュメント参照してください。
履歴実行計画に従ってバインディングを作成する機能を強化する#39199 @ qw4990
TiDB v7.2.0 では、 過去の実行計画に従ってバインディングを作成するの機能が強化されています。この機能により、複雑なステートメントの解析とバインディングのプロセスが改善され、バインディングがより安定し、次の新しいヒントがサポートされます。
詳細についてはドキュメント参照してください。
オプティマイザの動作を細かく制御するためのオプティマイザ修正制御メカニズムを導入する#43169 @ 時間と運命
より合理的な実行プランを生成するために、TiDB オプティマイザーの動作は製品の反復を通じて進化します。ただし、特定のシナリオでは、変更によってパフォーマンスが低下する可能性があります。TiDB v7.2.0 では、オプティマイザーのきめ細かい動作の一部を制御できるオプティマイザー修正コントロールが導入されています。これにより、いくつかの新しい変更をロールバックまたは制御できます。
制御可能な各動作は、修正番号に対応する GitHub の問題によって説明されています。制御可能なすべての動作はオプティマイザー修正コントロールにリストされています。動作制御を実現するには、
tidb_opt_fix_control
システム変数を設定することで、1 つ以上の動作のターゲット値を設定できます。オプティマイザー修正制御メカニズムは、TiDB オプティマイザーをきめ細かいレベルで制御するのに役立ちます。アップグレード プロセスによって発生するパフォーマンスの問題を修正する新しい手段を提供し、TiDB の安定性を向上させます。
詳細についてはドキュメント参照してください。
軽量統計初期化が一般提供 (GA) #42160 @ 翻訳者に開始
v7.2.0 以降、軽量統計初期化機能が GA になります。軽量統計初期化により、起動時にロードする必要がある統計の数が大幅に削減され、統計のロード速度が向上します。この機能により、複雑なランタイム環境での TiDB の安定性が向上し、TiDB ノードの再起動時にサービス全体に与える影響が軽減されます。
v7.2.0 以降のバージョンの新しく作成されたクラスターの場合、TiDB はデフォルトで TiDB の起動時に軽量統計をロードし、ロードが完了するまで待ってからサービスを提供します。以前のバージョンからアップグレードされたクラスターの場合、この機能を有効にするには、TiDB 構成項目
lite-init-stats
およびforce-init-stats
~true
を設定できます。詳細についてはドキュメント参照してください。
構文
v7.2.0 以降では、
CHECK
制約を使用して、指定した条件を満たすようにテーブル内の 1 つCHECK
の列の値を制限できます。3 制約がテーブルに追加されると、TiDB はテーブルにデータを挿入または更新する前に、制約が満たされているかどうかを確認します。制約を満たすデータのみを書き込むことができます。この機能はデフォルトで無効になっています。有効にするには、
tidb_enable_check_constraint
システム変数をON
に設定します。詳細についてはドキュメント参照してください。
DB操作
DDL ジョブは一時停止と再開操作をサポートします (実験的) #18015 @ ゴドゥム
TiDB v7.2.0 より前では、DDL ジョブの実行中にビジネス ピークが発生した場合、ビジネスへの影響を軽減するために、DDL ジョブを手動でキャンセルすることしかできませんでした。v7.2.0 では、TiDB に DDL ジョブの一時停止および再開操作が導入されています。これらの操作により、ピーク時に DDL ジョブを一時停止し、ピーク終了後に再開できるため、アプリケーション ワークロードへの影響を回避できます。
たとえば、
ADMIN PAUSE DDL JOBS
またはADMIN RESUME DDL JOBS
使用して複数の DDL ジョブを一時停止および再開できます。ADMIN PAUSE DDL JOBS 1,2; ADMIN RESUME DDL JOBS 1,2;詳細についてはドキュメント参照してください。
データ移行
データのインポート効率を大幅に向上させる新しいSQL文
IMPORT INTO
を導入(実験的) #42930 @ D3ハンターIMPORT INTO
ステートメントは、 TiDB Lightningの物理インポートモード機能を統合します。このステートメントを使用すると、CSV、SQL、PARQUET などの形式のデータを TiDB の空のテーブルにすばやくインポートできます。このインポート方法により、 TiDB Lightningを個別に展開および管理する必要がなくなり、データ インポートの複雑さが軽減され、インポート効率が大幅に向上します。Amazon S3 または GCS に保存されているデータ ファイルの場合、 TiDB 分散実行フレームワーク (DXF)が有効になっていると、
IMPORT INTO
データ インポート ジョブを複数のサブジョブに分割し、それらを複数の TiDB ノードにスケジュールして並列インポートすることもサポートするため、インポートのパフォーマンスがさらに向上します。詳細についてはドキュメント参照してください。
TiDB Lightningは、Latin-1文字セットのソースファイルをTiDB #44434 @ ランス6716にインポートすることをサポートします。
この機能により、 TiDB Lightningを使用して Latin-1 文字セットを含むソース ファイルを TiDB に直接インポートできます。 v7.2.0 より前では、このようなファイルをインポートするには追加の前処理または変換が必要でした。 v7.2.0 以降では、 TiDB Lightningインポート タスクを構成するときに
character-set = "latin1"
指定するだけで済みます。その後、 TiDB Lightning はインポート プロセス中に文字セットの変換を自動的に処理し、データの整合性と正確性を確保します。詳細についてはドキュメント参照してください。
互換性の変更
注記:
このセクションでは、v7.1.0 から現在のバージョン (v7.2.0) にアップグレードするときに知っておく必要のある互換性の変更について説明します。v7.0.0 以前のバージョンから現在のバージョンにアップグレードする場合は、中間バージョンで導入された互換性の変更も確認する必要がある可能性があります。
行動の変化
- 更新イベントを処理する際、イベント内で主キーまたは null 以外の一意のインデックス値が変更されると、TiCDC はイベントを削除イベントと挿入イベントに分割します。詳細については、 ドキュメント参照してください。
システム変数
変数名 | タイプを変更 | 説明 |
---|---|---|
last_insert_id | 修正済み | MySQL と一致するように最大値を9223372036854775807 から18446744073709551615 に変更します。 |
tidb_enable_non_prepared_plan_cache | 修正済み | さらにテストを行った後、デフォルト値をOFF からON に変更します。これは、準備されていない実行プラン キャッシュが有効になっていることを意味します。 |
tidb_remove_orderby_in_subquery | 修正済み | さらにテストを行った後、デフォルト値をOFF からON に変更します。つまり、オプティマイザーはサブクエリ内のORDER BY 句を削除します。 |
tidb_analyze_skip_column_types | 新しく追加された | 統計を収集するANALYZE コマンドを実行するときに、統計収集でスキップされる列の種類を制御します。この変数はtidb_analyze_version = 2 にのみ適用されます。 ANALYZE TABLE t COLUMNS c1, ..., cn の構文を使用する場合、指定された列の種類がtidb_analyze_skip_column_types に含まれていると、この列の統計は収集されません。 |
tidb_enable_check_constraint | 新しく追加された | CHECK 制約を有効にするかどうかを制御します。デフォルト値はOFF で、この機能は無効であることを意味します。 |
tidb_enable_fast_table_check | 新しく追加された | チェックサムベースのアプローチを使用して、テーブル内のデータとインデックスの一貫性をすばやくチェックするかどうかを制御します。デフォルト値はON で、この機能が有効であることを意味します。 |
tidb_enable_tiflash_pipeline_model | 新しく追加された | TiFlashの新しい実行モデルパイプラインモデルを有効にするかどうかを制御します。デフォルト値はOFF で、パイプライン モデルが無効であることを意味します。 |
tidb_expensive_txn_time_threshold | 新しく追加された | 高価なトランザクションをログに記録するためのしきい値を制御します。デフォルトでは 600 秒です。トランザクションの期間がしきい値を超え、トランザクションがコミットもロールバックもされない場合、そのトランザクションは高価なトランザクションとみなされ、ログに記録されます。 |
コンフィグレーションファイルのパラメータ
コンフィグレーションファイル | コンフィグレーションパラメータ | タイプを変更 | 説明 |
---|---|---|---|
ティビ | lite-init-stats | 修正済み | さらにテストを行った後、デフォルト値をfalse からtrue に変更します。つまり、TiDB は、初期化の効率を向上させるために、TiDB の起動時にデフォルトで軽量統計初期化を使用します。 |
ティビ | force-init-stats | 修正済み | デフォルト値をfalse からtrue に変更してlite-init-stats に合わせます。つまり、TiDB は、起動時にサービスを提供する前に、統計の初期化が完了するまで待機します。 |
ティクヴ | [`rocksdb.[defaultcf | writecf | lockcf].compaction-guard-min-output-file-size`](/tikv-configuration-file.md#compaction-guard-min-output-file-size) |
ティクヴ | [`rocksdb.[defaultcf | writecf | lockcf].optimize-filters-for-memory`](/tikv-configuration-file.md#optimize-filters-for-memory-new-in-v720) |
ティクヴ | [`rocksdb.[defaultcf | writecf | lockcf].periodic-compaction-seconds`](/tikv-configuration-file.md#periodic-compaction-seconds-new-in-v720) |
ティクヴ | [`rocksdb.[defaultcf | writecf | lockcf].ribbon-filter-above-level`](/tikv-configuration-file.md#ribbon-filter-above-level-new-in-v720) |
ティクヴ | [`rocksdb.[defaultcf | writecf | lockcf].ttl`](/tikv-configuration-file.md#ttl-new-in-v720) |
TiDB Lightning | send-kv-pairs | 非推奨 | v7.2.0 以降、パラメータsend-kv-pairs は非推奨になりました。物理インポート モードで TiKV にデータを送信するときに、1 つのリクエストの最大サイズを制御するには、 send-kv-size 使用できます。 |
TiDB Lightning | character-set | 修正済み | データ インポートでサポートされる文字セットに新しい値オプションlatin1 が導入されました。このオプションを使用すると、Latin-1 文字セットを含むソース ファイルをインポートできます。 |
TiDB Lightning | send-kv-size | 新しく追加された | 物理インポート モードで TiKV にデータを送信する際の 1 つのリクエストの最大サイズを指定します。キーと値のペアのサイズが指定されたしきい値に達すると、 TiDB Lightning はそれらを直ちに TiKV に送信します。これにより、大きな幅の広いテーブルをインポートするときにTiDB Lightningノードがメモリ内にキーと値のペアを過剰に蓄積することで発生する OOM の問題を回避できます。このパラメータを調整することで、メモリ使用量とインポート速度のバランスを見つけることができ、インポート プロセスの安定性と効率が向上します。 |
データ移行 | strict-optimistic-shard-mode | 新しく追加された | この構成項目は、TiDB Data Migration v2.0 の DDL シャード マージ動作との互換性を保つために使用されます。この構成項目は、楽観的モードで有効にできます。これを有効にすると、レプリケーション タスクは、タイプ 2 DDL ステートメントに遭遇すると中断されます。複数のテーブルでの DDL 変更間に依存関係があるシナリオでは、タイムリーな中断が発生する可能性があります。上流と下流の間のデータ整合性を確保するには、レプリケーション タスクを再開する前に、各テーブルの DDL ステートメントを手動で処理する必要があります。 |
ティCDC | sink.protocol | 修正済み | ダウンストリームが Kafka の場合、新しい値オプション"open-protocol" を導入します。メッセージのエンコードに使用されるプロトコル形式を指定します。 |
ティCDC | sink.delete-only-output-handle-key-columns | 新しく追加された | DELETE イベントの出力を指定します。このパラメータは、プロトコル"canal-json" および"open-protocol" でのみ有効です。デフォルト値はfalse で、すべての列を出力することを意味します。 true に設定すると、主キー列または一意のインデックス列のみが出力されます。 |
改善点
ティビ
- インデックススキャン範囲を構築するロジックを最適化し、複雑な条件をインデックススキャン範囲#41572 #44389 @ 翻訳者に変換できるようにします。
- 新しい監視メトリック
Stale Read OPS
とStale Read Traffic
#43325 @ あなた06を追加 - 古い読み取りの再試行リーダーがロックに遭遇すると、TiDBはロックを解決した後、リーダーで強制的に再試行し、不要なオーバーヘッドを回避します#43659 @ あなた06
- 推定時間を使用して古い読み取りtsを計算し、古い読み取り#44215 @ あなた06のオーバーヘッドを削減します。
- 長時間実行されるトランザクションのログとシステム変数を追加する#41471 @ クレイジーcs520
- 圧縮された MySQL プロトコルを介して TiDB に接続することをサポートします。これにより、低帯域幅ネットワークでのデータ集約型クエリのパフォーマンスが向上し、帯域幅コストが節約されます。これは、
zlib
とzstd
ベースの両方の圧縮をサポートします#22605 @ ドヴェーデン utf8
とutf8bm3
両方を従来の 3 バイト UTF-8 文字セット エンコーディングとして認識します。これにより、従来の UTF-8 エンコーディングを持つテーブルを MySQL 8.0 から TiDB #26226 @ ドヴェーデンに移行しやすくなります。UPDATE
ステートメント#44751 @ Cbcウェストウルフでの割り当てに:=
使用することをサポートします
ティクヴ
PD
ツール
バックアップと復元 (BR)
ティCDC
- オブジェクトstorageサービスへのレプリケーションのシナリオでDDL操作が発生したときにデータファイルが格納されるディレクトリの構造を最適化します#8891 @ チャールズ・チュン96
- Kafka #8865 @ ハイラスティンへのレプリケーションのシナリオで OAUTHBEARER 認証をサポートする
- Kafka #9143 @ 3エースショーハンドへのレプリケーションのシナリオで
DELETE
操作のハンドルキーのみを出力するオプションを追加します
TiDB データ移行 (DM)
TiDB Lightning
バグ修正
ティビ
- CTE を含むクエリによって TiDB がハングする問題を修正#43749 #36896 @ グオシャオゲ
min, max
クエリ結果が正しくない問題を修正#43805 @ うわーSHOW PROCESSLIST
文がサブクエリ時間が長い文のトランザクションの TxnStart を表示できない問題を修正#40851 @ クレイジーcs520- コプロセッサータスク#43365 @ あなた06に
TxnScope
がないため、古い読み取りグローバル最適化が有効にならない問題を修正しました。 - フォロワー読み取りが再試行前にフラッシュバック エラーを処理せず、クエリ エラー#43673 @ あなた06が発生する問題を修正しました。
ON UPDATE
ステートメントが主キー#44565 @ ジグアンを正しく更新しない場合にデータとインデックスが不整合になる問題を修正しました- 権限テーブル#41048 @ bb7133の一部の列における大文字と小文字の区別の問題を修正
- MySQL 8.0.28以降のバージョン#43987 @ ヤンケオと一致するように、
UNIX_TIMESTAMP()
関数の上限を3001-01-19 03:14:07.999999 UTC
に変更します。 - 取り込みモード#44137 @ タンジェンタでインデックスの追加が失敗する問題を修正
- ロールバック状態で DDL タスクをキャンセルすると、関連するメタデータ#44143 @ 翻訳:にエラーが発生する問題を修正しました
- カーソルフェッチで
memTracker
使用するとメモリリークが発生する問題を修正#44254 @ ヤンケオ - データベースを削除すると GC の進行が遅くなる問題を修正#33069 @ 天菜まお
- インデックス結合#43686 @ アイリンキッド @ ミョンスのプローブフェーズでパーティションテーブル内の対応する行が見つからない場合に TiDB がエラーを返す問題を修正しました。
SUBPARTITION
使用してパーティション テーブル#41198 #41200 @ ミョンスを作成するときに警告が表示されない問題を修正しました- クエリが
MAX_EXECUTION_TIME
超えたために強制終了された場合に返されるエラーメッセージが MySQL #43031 @ ドヴェーデンのものと一致しない問題を修正しました。 LEADING
ヒントがブロック エイリアス#44645 @ qw4990のクエリをサポートしない問題を修正しましたLAST_INSERT_ID()
関数の戻り値の型を VARCHAR から LONGLONG に変更して、MySQL #44574 @ 定義2014の戻り値と一致するようにします。- 非相関サブクエリを含むステートメントで共通テーブル式 (CTE) を使用すると、誤った結果が返される可能性がある問題を修正しました#44051 @ ウィノロス
- 結合したテーブルの再配置により外部結合結果が不正確になる可能性がある問題を修正#44314 @ アイリンキッド
PREPARE stmt FROM "ANALYZE TABLE xxx"
tidb_mem_quota_query
#44320 @ クリサンによって殺される可能性がある問題を修正
ティクヴ
PD
TiFlash
ツール
バックアップと復元 (BR)
ティCDC
- 解決済みのTSが一部のケースで正しく進まない問題を修正#8963 @ チャールズ・チュン96
- Avro または CSV プロトコルが使用されている場合に
UPDATE
操作で古い値を出力できない問題を修正#9086 @ 3エースショーハンド - Kafka #8959 @ ハイラスティンにデータを複製するときに、ダウンストリーム メタデータを頻繁に読み取ることによって発生するダウンストリームの過度の負荷の問題を修正しました。
- TiDB または MySQL #9180 @ アズドンメンにデータを複製するときに、下流の双方向レプリケーション関連の変数を頻繁に設定することによって発生する下流ログが多すぎる問題を修正しました。
- PDノードがクラッシュするとTiCDCノードが#8868 @ アズドンメンで再起動する問題を修正
- TiCDC が下流の Kafka-on-Pulsar #8892 @ ハイラスティンで変更フィードを作成できない問題を修正しました
TiDB Lightning
寄稿者
TiDB コミュニティの以下の貢献者に感謝いたします。