TiDB 7.4.0 リリースノート
発売日:2023年10月12日
TiDB バージョン: 7.4.0
クイックアクセス: クイックスタート
7.4.0 では、次の主な機能と改善が導入されています。
| カテゴリ | 特徴 | 説明 |
|---|---|---|
| 信頼性と可用性 | グローバルソートによるIMPORT INTOおよびADD INDEX操作のパフォーマンスと安定性を向上 (実験的) | v7.4.0より前のバージョンでは、 TiDB Distributed eXecution Framework (DXF)を使用したADD INDEXやIMPORT INTOなどのタスクは、局所的かつ部分的なソートを意味しており、最終的にはTiKVが部分的なソートを補うために多くの追加作業を実行することになりました。また、これらのジョブを実行するには、TiDBノードがソート用のローカルディスク領域をTiKVにロードする前に割り当てる必要がありました。v7.4.0で導入されたグローバルソート機能により、データはTiKVにロードされる前に、グローバルソートのために外部共有storage(このバージョンではS3)に一時的に保存されます。これにより、TiKVが余分なリソースを消費する必要がなくなり、 ADD INDEXやIMPORT INTOなどの操作のパフォーマンスと安定性が大幅に向上します。 |
| バックグラウンドタスクのリソース制御(実験的) | v7.1.0では、ワークロード間のリソースおよびstorageアクセスの干渉を軽減するためのリソース制御機能が導入されました。TiDB v7.4.0では、この制御がバックグラウンドタスクにも適用されます。v7.4.0では、自動分析、バックアップとリストア、 TiDB Lightningによるバルクロード、オンラインDDLなどのバックグラウンドタスクによって生成されるリソースをリソース制御が識別し、管理するようになりました。これは最終的にすべてのバックグラウンドタスクに適用されます。 | |
| TiFlashは ストレージとコンピューティングの分離とS3 (GA)をサポートします | TiFlash分散storageおよびコンピューティングアーキテクチャと S3 共有storageが一般提供開始:
| |
| SQL | TiDBはパーティションタイプの管理をサポート | v7.4.0 より前では、範囲/リスト パーティション テーブルは、 TRUNCATE 、 EXCHANGE 、 ADD 、 DROP 、 REORGANIZEなどのパーティション管理操作をサポートし、ハッシュ/キー パーティション テーブルは、 ADDやCOALESCEなどのパーティション管理操作をサポートします。現在、TiDB は次のパーティション タイプ管理操作もサポートしています。
|
MySQL 8.0 互換性: 照合順序utf8mb4_0900_ai_ciサポート | MySQL 8.0 の注目すべき変更点の 1 つは、デフォルトの文字セットが utf8mb4 になり、utf8mb4 のデフォルトの照合順序がutf8mb4_0900_ai_ciなったことです。TiDB v7.4.0 でこのサポートが追加されたことで、MySQL 8.0 との互換性が向上し、デフォルトの照合順序を持つ MySQL 8.0 データベースからの移行とレプリケーションがよりスムーズになりました。 | |
| DB操作と可観測性 | IMPORT INTOおよびADD INDEX SQL ステートメントを実行するためのそれぞれの TiDB ノードを指定します (実験的) | IMPORT INTOまたはADD INDEX SQL 文を、既存の TiDB ノードの一部、または新規に追加された TiDB ノードに対して実行するかどうかを柔軟に指定できます。このアプローチにより、他の TiDB ノードからのリソース分離が可能になり、業務への影響を防ぎながら、先行する SQL 文の実行に最適なパフォーマンスを確保できます。 |
機能の詳細
スケーラビリティ
分散実行フレームワーク (DXF) のバックエンド
ADD INDEXまたはIMPORT INTOタスクを並列実行するための TiDB ノードの選択をサポート (実験的) #46453 @ ywqzzyリソースを大量に消費するクラスターで
ADD INDEXまたはIMPORT INTOタスクを並列実行すると、TiDBノードのリソースを大量に消費し、クラスターのパフォーマンス低下につながる可能性があります。v7.4.0以降では、システム変数tidb_service_scope使用して、 TiDB 分散実行フレームワーク (DXF)以下の各TiDBノードのサービススコープを制御できます。既存のTiDBノードを複数選択するか、新しいTiDBノードにTiDBサービススコープを設定すると、すべての並列タスクADD INDEXとIMPORT INTOこれらのノードでのみ実行されます。このメカニズムにより、既存のサービスへのパフォーマンスへの影響を回避できます。詳細についてはドキュメント参照してください。
パーティション化されたRaft KVstorageエンジンの強化 (実験的) #11515 #12842 @ 忙しいカケス @ トニー・シュッキ @ タボキ @ バッファフライ @ 5kbps @ スペードA-タン @ ノルーシュ
TiDB v6.6.0 では、実験的機能として Partitioned Raft KVstorageエンジンが導入されました。このエンジンは、複数の RocksDB インスタンスを使用して TiKVリージョンデータを格納し、各リージョンのデータは個別の RocksDB インスタンスに独立して格納されます。
TiDB v7.4.0では、Partitioned Raft KVstorageエンジンの互換性と安定性がさらに向上しました。大規模データテストを通じて、DM、 Dumpling、 TiDB Lightning、TiCDC、 BR、PITRといったTiDBエコシステムツールおよび機能との互換性が確保されています。さらに、Partitioned Raft KVstorageエンジンは、読み取りと書き込みが混在するワークロードにおいてもより安定したパフォーマンスを提供し、特に書き込み負荷の高いシナリオに適しています。さらに、各TiKVノードは8コアCPUをサポートし、8TBのデータstorageと64GBのメモリを搭載できるようになりました。
詳細についてはドキュメント参照してください。
TiFlashは、分散storageおよびコンピューティングアーキテクチャ(GA)をサポートします#6882 @ ジェイソン・ファン @ ジンヘリン @ そよ風のような @ リデズ @ カルビンネオ @ ロイド・ポティガー
v7.0.0では、 TiFlashは実験的機能として、分散storageおよびコンピューティングアーキテクチャを導入しました。一連の改良を経て、v7.4.0以降、 TiFlashの分散storageおよびコンピューティングアーキテクチャがGAとなります。
このアーキテクチャでは、 TiFlashノードは2種類(コンピューティングノードと書き込みノード)に分かれており、S3 APIと互換性のあるオブジェクトstorageをサポートします。どちらのノードも、コンピューティング容量またはstorage容量を個別に拡張できます。分散storageおよびコンピューティングアーキテクチャでは、 TiFlashレプリカの作成、データのクエリ、オプティマイザーヒントの指定など、結合storageおよびコンピューティングアーキテクチャと同様にTiFlashを使用できます。
TiFlashの分散storageおよびコンピューティングアーキテクチャと結合storageおよびコンピューティングアーキテクチャは、同じクラスター内で使用したり、相互に変換したりすることはできません。TiFlashをデプロイする際に、使用するアーキテクチャを設定できます。
詳細についてはドキュメント参照してください。
パフォーマンス
JSON 演算子
MEMBER OFを TiKV #46307 @ wshwsh12にプッシュダウンする機能をサポートvalue MEMBER OF(json_array)
詳細についてはドキュメント参照してください。
任意のフレーム定義タイプのウィンドウ関数をTiFlash #7376 @ xzhangxian1008にプッシュダウンする機能をサポート
v7.4.0より前のTiFlashでは、
PRECEDINGまたはFOLLOWING含むウィンドウ関数をサポートしておらず、そのようなフレーム定義を含むウィンドウ関数はTiFlashにプッシュダウンできませんでした。v7.4.0以降、 TiFlashはすべてのウィンドウ関数のフレーム定義をサポートします。この機能は自動的に有効化され、フレーム定義を含むウィンドウ関数は、関連要件が満たされた場合に自動的にTiFlashにプッシュダウンされ、実行されます。クラウドストレージベースのグローバルソート機能を導入して、並列実行における
ADD INDEXおよびIMPORT INTOタスクのパフォーマンスと安定性を向上します (実験的) #45719 @ wjhuang2016v7.4.0より前のバージョンでは、Distributed eXecution Framework(DXF)で
ADD INDEXやIMPORT INTOようなタスクを実行する場合、各TiDBノードは、エンコードされたインデックスKVペアとテーブルデータKVペアのソートのために、かなりの量のローカルディスク領域を割り当てる必要がありました。しかし、グローバルソート機能がないため、処理中に異なるTiDBノード間および各ノード内でデータが重複する可能性があります。その結果、TiKVはこれらのKVペアをstorageエンジンにインポートする際に、常にコンパクション操作を実行する必要があり、ADD INDEXとIMPORT INTOのパフォーマンスと安定性に影響を与えます。v7.4.0では、TiDBにグローバルソートの機能が導入されました。エンコードされたデータをローカルに書き込んでソートする代わりに、クラウドstorageに書き込んでグローバルソートを行うようになりました。ソート後、インデックスデータとテーブルデータの両方がTiKVに並列でインポートされるため、パフォーマンスと安定性が向上します。
詳細についてはドキュメント参照してください。
非準備済みステートメントの実行プランのキャッシュをサポート (GA) #36598 @ qw4990
TiDB v7.0.0では、同時実行OLTPの負荷容量を向上させるための実験的機能として、非準備プランキャッシュが導入されました。v7.4.0ではこの機能がGAとなります。実行プランキャッシュはより多くのシナリオに適用され、TiDBの同時実行処理能力が向上します。
非準備プランキャッシュを有効にすると、メモリとCPUのオーバーヘッドが増加する可能性があり、すべての状況に適しているとは限りません。v7.4.0以降、この機能はデフォルトで無効になっています。1
tidb_enable_non_prepared_plan_cache有効にし、tidb_session_plan_cache_sizeでキャッシュサイズを制御できます。また、この機能はデフォルトではDML文をサポートしておらず、SQL文には一定の制限があります。詳細については、 制限参照してください。
詳細についてはドキュメント参照してください。
信頼性
TiFlashはクエリレベルのデータスピルをサポート#7738 @ ウィンドトーカー
TiFlash v7.0.0以降、
GROUP BYORDER BY3つの演算子のデータスピル制御がサポートされます。この機能により、データサイズが利用可能なメモリを超えた場合にクエリの終了やシステムクラッシュなどの問題を防ぐことができます。ただし、各演算子のスピルを個別に管理するのは煩雑で、全体JOINなリソース制御には効果的ではありません。v7.4.0では、 TiFlashにクエリレベルのデータスピルが導入されました。TiFlashTiFlashへのクエリのメモリ制限を
tiflash_mem_quota_query_per_nodeに設定し、データスピルをトリガーするメモリ比率をtiflash_query_spill_ratioに設定することで、クエリのメモリ使用量を効率的に管理し、 TiFlashのメモリリソースをより適切に制御できます。詳細についてはドキュメント参照してください。
ユーザー定義の TiKV 読み取りタイムアウト#45380 @ crazycs520をサポート
通常、TiKVはリクエストを数ミリ秒という非常に高速に処理します。しかし、TiKVノードがディスクI/Oジッターやネットワークレイテンシーに遭遇すると、リクエスト処理時間が大幅に増加する可能性があります。v7.4.0より前のバージョンでは、TiKVリクエストのタイムアウト制限は固定されており、調整できません。そのため、TiKVノードで問題が発生すると、TiDBは一定時間のタイムアウト応答を待機する必要があり、ジッター発生時のアプリケーションクエリパフォーマンスに顕著な影響が生じます。
TiDB v7.4.0 では、新しいシステム変数
tikv_client_read_timeoutが導入され、クエリで TiDB が TiKV に送信する RPC 読み取り要求のタイムアウトをカスタマイズできるようになりました。つまり、ディスクまたはネットワークの問題により TiKV ノードに送信された要求が遅延した場合、TiDB はより早くタイムアウトし、他の TiKV ノードに要求を再送信できるため、クエリのレイテンシーが短縮されます。すべての TiKV ノードでタイムアウトが発生した場合、TiDB はデフォルトのタイムアウトを使用して再試行します。さらに、クエリでオプティマイザヒント/*+ SET_VAR(TIKV_CLIENT_READ_TIMEOUT=N) */使用して、TiDB が TiKV RPC 読み取り要求を送信するタイムアウトを設定することもできます。この機能強化により、不安定なネットワークやstorage環境に TiDB が柔軟に適応できるようになり、クエリのパフォーマンスが向上し、ユーザーエクスペリエンスが強化されます。詳細についてはドキュメント参照してください。
オプティマイザヒント#45892 @ ウィノロスを使用して、一部のシステム変数の値を一時的に変更することをサポートします。
TiDB v7.4.0では、MySQL 8.0と同様のオプティマイザヒント
SET_VAR()が導入されました。ヒントSET_VAR()SQL文に含めることで、文の実行中にシステム変数の値を一時的に変更できます。これにより、様々な文の環境設定が容易になります。例えば、リソースを大量に消費するSQL文の並列処理を積極的に強化したり、変数を通じてオプティマイザの動作を変更したりすることが可能になります。変更可能なシステム変数は、ヒント
SET_VAR()のシステム変数で確認できます。明示的にサポートされていない変数を変更すると、予期しない動作が発生する可能性があるため、変更しないことを強くお勧めします。詳細についてはドキュメント参照してください。
TiFlashはリソース制御#7660 @ グオシャオゲをサポート
TiDB v7.1.0では、リソース制御機能が一般提供され、TiDBとTiKVのリソース管理機能を提供します。v7.4.0では、 TiFlashがリソース制御機能をサポートし、TiDB全体のリソース管理機能が向上しました。TiFlashのリソースTiFlashは既存のTiDBリソース制御機能と完全に互換性があり、既存のリソースグループはTiDB、TiKV、 TiFlashのリソースを同時に管理します。
TiFlashリソース制御機能を有効にするかどうかを制御するには、 TiFlashパラメータ
enable_resource_control設定します。この機能を有効にすると、 TiFlashはTiDBのリソースグループ設定に基づいてリソースのスケジュールと管理を実行し、全体的なリソースの適切な割り当てと使用を保証します。詳細についてはドキュメント参照してください。
TiFlashはパイプライン実行モデル(GA) #6518 @ シーライズをサポートします。
TiFlash v7.2.0 以降、パイプライン実行モデルが導入されました。このモデルは、すべてのスレッドリソースを一元管理し、タスク実行を均一にスケジュールすることで、スレッドリソースを最大限に活用し、リソースの過剰使用を回避します。v7.4.0 では、 TiFlash はスレッドリソースの使用状況の統計を改善し、パイプライン実行モデルは GA 機能となり、デフォルトで有効化されます。この機能はTiFlashリソース制御機能と相互に依存しているため、TiDB v7.4.0 では、以前のバージョンでパイプライン実行モデルの有効化/無効化に使用されていた変数
tidb_enable_tiflash_pipeline_model削除されました。代わりに、 TiFlashパラメータtidb_enable_resource_controlを設定することで、パイプライン実行モデルとTiFlashリソース制御機能を有効化または無効化できます。詳細についてはドキュメント参照してください。
オプティマイザモード#46080 @ 時間と運命のオプションを追加
TiDB v7.4.0 では、オプティマイザが使用する推定方法を制御する新しいシステム変数
tidb_opt_objectiveが導入されました。デフォルト値moderate、オプティマイザの従来の動作が維持され、実行時統計を使用してデータ変更に基づいて推定値を調整します。この変数をdeterminateに設定すると、オプティマイザは実行時修正を考慮せず、統計のみに基づいて実行プランを生成します。長期にわたって安定したOLTPアプリケーションや、既存の実行プランに自信がある場合は、テスト後にモード
determinateに切り替えることをお勧めします。これにより、プラン変更の可能性が軽減されます。詳細についてはドキュメント参照してください。
TiDB リソース制御はバックグラウンドタスクの管理をサポートします (実験的) #44517 @ 栄光
データバックアップや自動統計収集などのバックグラウンドタスクは、優先度が低いにもかかわらず、多くのリソースを消費します。これらのタスクは通常、定期的または不定期にトリガーされます。実行中に大量のリソースを消費するため、オンラインの高優先度タスクのパフォーマンスに影響を与えます。v7.4.0以降、TiDBリソース制御機能はバックグラウンドタスクの管理をサポートします。この機能により、低優先度タスクがオンラインアプリケーションに及ぼすパフォーマンスへの影響を軽減し、合理的なリソース割り当てを実現し、クラスターの安定性を大幅に向上させます。
TiDB は次の種類のバックグラウンド タスクをサポートしています。
lightning: TiDB LightningまたはIMPORT INTOを使用してインポート タスクを実行します。br: BRを使用してバックアップおよび復元タスクを実行します。PITR はサポートされていません。ddl: Reorg DDL のバッチ データ書き戻しフェーズ中のリソース使用量を制御します。stats: 手動で実行されるか、TiDB によって自動的にトリガーされる統計を収集するタスク。
デフォルトでは、バックグラウンドタスクとしてマークされたタスクタイプは空で、バックグラウンドタスクの管理は無効になっています。このデフォルトの動作は、TiDB v7.4.0より前のバージョンと同じです。バックグラウンドタスクを管理するには、
defaultリソースグループのバックグラウンドタスクタイプを手動で変更する必要があります。詳細についてはドキュメント参照してください。
ロック統計が一般公開(GA)される#46351 @ ハイラスティン
v7.4.0では、 ロック統計一般提供となります。運用上のセキュリティを確保するため、統計情報のロックとロック解除には、統計情報の収集と同じ権限が必要です。さらに、TiDBは特定のパーティションに対する統計情報のロックとロック解除をサポートし、柔軟性が向上しています。データベース内のクエリや実行プランに自信があり、変更を防止したい場合は、統計情報をロックすることで安定性を高めることができます。
詳細についてはドキュメント参照してください。
テーブル#46695 @ コーダープレイにハッシュ結合を選択するかどうかを制御するシステム変数を導入します。
MySQL 8.0では、新機能としてテーブルのハッシュ結合が導入されました。この機能は主に、比較的大きな2つのテーブルと結果セットを結合するために使用されます。ただし、トランザクションワークロードやMySQL 5.7で実行される一部のアプリケーションでは、テーブルのハッシュ結合はパフォーマンスリスクをもたらす可能性があります。MySQLには、ハッシュ結合をグローバルレベルとセッションレベルのどちらで選択するかを制御するための
optimizer_switch用意されています。TiDB v7.4.0以降、テーブルのハッシュ結合を制御するためのシステム変数
tidb_opt_enable_hash_join導入されました。これはデフォルトで有効になっています(ON)。実行プランでテーブル間のハッシュ結合を選択する必要がない場合は、この変数をOFFに変更することで、実行プランのロールバックの可能性を低減し、システムの安定性を向上させることができます。詳細についてはドキュメント参照してください。
統計キャッシュのメモリ制御は一般提供(GA) #45367 @ ホーキングレイ
TiDBインスタンスは、テーブル統計をキャッシュすることで、実行計画の生成を高速化し、SQLパフォーマンスを向上させることができます。v6.1.0以降、TiDBはシステム変数
tidb_stats_cache_mem_quota導入しました。このシステム変数を設定することで、統計キャッシュのメモリ使用量の上限を設定できます。キャッシュが上限に達すると、TiDBは非アクティブなキャッシュエントリを自動的に削除し、インスタンスのメモリ使用量を制御して安定性を向上させます。v7.4.0 以降、この機能は一般提供 (GA) されます。
詳細についてはドキュメント参照してください。
SQL
TiDBはパーティションタイプ管理#42728 @ ミョンスをサポート
v7.4.0より前のバージョンでは、TiDBのパーティションテーブルのパーティションタイプは変更できませんでした。v7.4.0以降では、パーティションテーブルを非パーティションテーブルに変更したり、非パーティションテーブルをパーティションテーブルに変更したり、パーティションタイプの変更がサポートされるようになりました。これにより、パーティションテーブルのパーティションタイプと数を柔軟に調整できるようになりました。例えば、
ALTER TABLE t PARTITION BY ...ステートメントを使用してパーティションタイプを変更できます。詳細についてはドキュメント参照してください。
TiDBは
ROLLUP修飾子とGROUPING関数#44487 @ アイリンキッドの使用をサポートしていますWITH ROLLUP修飾子とGROUPING関数は、多次元データ要約のためのデータ分析でよく使用されます。v7.4.0 以降では、GROUP BY節でWITH ROLLUP修飾子とGROUPING関数を使用できます。例えば、SELECT ... FROM ... GROUP BY ... WITH ROLLUP構文でWITH ROLLUP修飾子を使用できます。詳細についてはドキュメント参照してください。
DB操作
照合順序
utf8mb4_0900_ai_ciとutf8mb4_0900_bin#37566 @ ヤンケオ @ ジムララ @ bb7133をサポートTiDB v7.4.0 では、MySQL 8.0 からのデータ移行のサポートが強化され、
utf8mb4_0900_ai_ciとutf8mb4_0900_bin2 つの照合順序が追加されました。5utf8mb4_0900_ai_ciMySQL 8.0 のデフォルトの照合順序です。TiDB v7.4.0では、MySQL 8.0と互換性のあるシステム変数
default_collation_for_utf8mb4も導入されました。これにより、utf8mb4文字セットのデフォルトの照合順序を指定できるようになり、 MySQL 5.7以前のバージョンからの移行やデータレプリケーションとの互換性が確保されます。詳細についてはドキュメント参照してください。
可観測性
ログ#46071 @ lcwangchaoにセッション接続 ID とセッション エイリアスを追加することをサポート
SQL実行の問題をトラブルシューティングする際には、根本原因を特定するために、TiDBコンポーネントログの内容を相関させる必要があることがよくあります。v7.4.0以降、TiDBはセッション接続ID(
CONNECTION_ID)をセッション関連ログ(TiDBログ、スロークエリログ、TiKVコプロセッサからのスローログなど)に書き込むことができます。セッション接続IDに基づいて複数の種類のログの内容を相関させることで、トラブルシューティングと診断の効率を向上させることができます。さらに、セッションレベルのシステム変数
tidb_session_alias設定することで、上記のログにカスタム識別子を追加できます。ログにアプリケーション識別情報を挿入できるこの機能により、ログの内容とアプリケーションを関連付け、アプリケーションからログへのリンクを構築し、診断の難易度を軽減できます。TiDBダッシュボードは、実行計画をテーブルビューで表示することをサポートしています#1589 @ バウリン
v7.4.0 では、TiDB ダッシュボードは、診断エクスペリエンスを向上させるために、スロー クエリ ページとSQL ステートメントページで実行プランをテーブル ビューで表示することをサポートしています。
詳細についてはドキュメント参照してください。
データ移行
IMPORT INTO機能を#46704つでD3ハンター強化するバージョン7.4.0以降では、
IMPORT INTOステートメントにCLOUD_STORAGE_URIのオプションを追加することで、インポートのパフォーマンスと安定性を向上させるグローバルソート機能(実験的)を有効にすることができますCLOUD_STORAGE_URIのオプションでは、エンコードされたデータの保存先となるクラウドstorageのアドレスを指定できます。さらに、v7.4.0 では、
IMPORT INTO機能に次の機能が導入されています。Split_Fileオプションの構成をサポートします。これにより、大きな CSV ファイルを複数の 256 MiB の小さな CSV ファイルに分割して並列処理し、インポート パフォーマンスを向上させることができます。- 圧縮されたCSVファイルとSQLファイル
.snappyインポート.zstサポートします。サポートされている.zstd形式は、.gzip.gz。
詳細についてはドキュメント参照してください。
Dumplingは、データをCSVファイルにエクスポートする際に、ユーザー定義のターミネータをサポートします#46982 @ GMHDBJD
バージョン7.4.0より前のDumplingでは、データをCSVファイルにエクスポートする際に、行末文字として
"\r\n"使用します。そのため、行末文字として"\n"しか認識しない下流システムでは、エクスポートされたCSVファイルを解析できないか、解析前にサードパーティ製の変換ツールを使用する必要があります。バージョン7.4.0以降、 Dumplingに新しいパラメータ
--csv-line-terminatorが導入されました。このパラメータを使用すると、データをCSVファイルにエクスポートする際に、任意の終端文字を指定できます。このパラメータは"\r\n"と"\n"サポートしています。以前のバージョンとの一貫性を保つため、デフォルトの終端文字は"\r\n"です。詳細についてはドキュメント参照してください。
TiCDCはPulsar #9413 @ ヤムチナ @ アズドンメンへのデータ複製をサポート
Pulsarは、クラウドネイティブかつ分散型のメッセージストリーミングプラットフォームであり、リアルタイムデータストリーミングエクスペリエンスを大幅に向上させます。v7.4.0以降、TiCDCは変更データをPulsarに
canal-json形式で複製し、Pulsarとのシームレスな統合を実現します。この機能により、TiCDCはTiDBの変更を容易にキャプチャしてPulsarに複製できるため、データ処理と分析機能に新たな可能性をもたらします。Pulsarから新たに生成された変更データを読み取り、処理する独自のコンシューマーアプリケーションを開発することで、特定のビジネスニーズに対応できます。詳細についてはドキュメント参照してください。
TiCDC はクレームチェックパターン#9153 @ 3エースショーハンドで大きなメッセージの処理を改善します
バージョン7.4.0より前のTiCDCでは、Kafkaの最大メッセージサイズ(
max.message.bytes)を超える大きなメッセージを下流に送信できませんでした。バージョン7.4.0以降では、Kafkaを下流として変更フィードを設定する際に、大きなメッセージを保存する外部storageの場所を指定し、外部storage内の大きなメッセージのアドレスを含む参照メッセージをKafkaに送信できるようになりました。コンシューマーはこの参照メッセージを受信すると、外部storageのアドレスからメッセージの内容を取得できます。詳細についてはドキュメント参照してください。
互換性の変更
注記:
このセクションでは、v7.3.0から最新バージョン(v7.4.0)にアップグレードする際に知っておくべき互換性の変更点について説明します。v7.2.0以前のバージョンから最新バージョンにアップグレードする場合は、中間バージョンで導入された互換性の変更点も確認する必要があるかもしれません。
行動の変化
v7.4.0 以降、TiDB は MySQL 8.0 の必須機能と互換性があり、
version()8.0.11で始まるバージョンを返します。TiFlash を以前のバージョンから v7.4.0 にアップグレードした後、元のバージョンへのインプレースダウングレードはサポートされません。これは、v7.4 以降、 TiFlash がPageStorage V3 のデータ圧縮ロジックを最適化し、データ圧縮中に発生する読み取りおよび書き込みの増幅を削減しているためです。これにより、基盤となるstorageファイル名の一部が変更されます。
TSO タイムスタンプの論理部分を抽出できるように
TIDB_PARSE_TSO_LOGICAL()関数が追加されました。MySQL 8.0 との互換性を向上させるために
information_schema.CHECK_CONSTRAINTSテーブルが追加されました。複数の変更を含むトランザクションにおいて、更新イベントで主キーまたは非NULLの一意のインデックス値が変更された場合、TiCDCはイベントを削除イベントと挿入イベントに分割し、すべてのイベントが挿入イベントに先行する削除イベントの順序に従うようにします。詳細については、 ドキュメント参照してください。
システム変数
| 変数名 | タイプを変更 | 説明 |
|---|---|---|
tidb_enable_tiflash_pipeline_model | 削除済み | この変数は、 TiFlashパイプライン実行モデルを有効にするかどうかを制御するために使用されます。v7.4.0以降では、 TiFlashリソース制御機能を有効にすると、 TiFlashパイプライン実行モデルも自動的に有効になります。 |
tidb_enable_non_prepared_plan_cache | 修正済み | さらにテストを行った後、デフォルト値をONからOFFに変更します。これは、準備されていない実行プラン キャッシュが無効であることを意味します。 |
default_collation_for_utf8mb4 | 新しく追加された | utf8mb4文字セットのデフォルトの照合順序を制御します。デフォルト値はutf8mb4_binです。 |
tidb_cloud_storage_uri | 新しく追加された | 有効にするクラウドstorageURI を指定しますグローバルソート 。 |
tidb_opt_enable_hash_join | 新しく追加された | オプティマイザがテーブルに対してハッシュ結合を選択するかどうかを制御します。デフォルトの値はONです。3 にOFFすると、他に利用可能な実行プランがない限り、オプティマイザはテーブルのハッシュ結合を選択しません。 |
tidb_opt_objective | 新しく追加された | この変数はオプティマイザの目的を制御します。1 moderate TiDB v7.4.0 より前のバージョンのデフォルトの動作を維持し、オプティマイザはより多くの情報を使用してより優れた実行プランを生成しようとします。3 determinateはより保守的になる傾向があり、実行プランをより安定させます。 |
tidb_request_source_type | 新しく追加された | 現在のセッションのタスクタイプを明示的に指定します。タスクタイプはリソース管理によって識別および制御されます。例: SET @@tidb_request_source_type = "background" 。 |
tidb_schema_version_cache_limit | 新しく追加された | この変数は、TiDBインスタンスにキャッシュできる履歴スキーマバージョンの数を制限します。デフォルト値は16で、これはTiDBがデフォルトで16個の履歴スキーマバージョンをキャッシュすることを意味します。 |
tidb_service_scope | 新しく追加された | この変数はインスタンスレベルのシステム変数です。これを使用して、 TiDB 分散実行フレームワーク (DXF)配下のTiDBノードのサービススコープを制御できます。TiDBノードのtidb_service_scope backgroundに設定すると、DXFはそのTiDBノードでADD INDEXやIMPORT INTOなどのDXFタスクを実行するようにスケジュールします。 |
tidb_session_alias | 新しく追加された | 現在のセッションに関連するログ内のsession_alias列の値を制御します。 |
tiflash_mem_quota_query_per_node | 新しく追加された | TiFlashノードにおけるクエリの最大メモリ使用量を制限します。クエリのメモリ使用量がこの制限を超えると、 TiFlashはエラーを返し、クエリを終了します。デフォルト値は0で、無制限を意味します。 |
tiflash_query_spill_ratio | 新しく追加された | TiFlash クエリレベルのスピルのしきい値を制御します。デフォルト値は0.7です。 |
tikv_client_read_timeout | 新しく追加された | TiDBがクエリ内でTiKV RPC読み取りリクエストを送信する際のタイムアウトを制御します。デフォルト値0 、デフォルトのタイムアウト(通常は40秒)が使用されることを示します。 |
コンフィグレーションファイルのパラメータ
| コンフィグレーションファイル | コンフィグレーションパラメータ | タイプを変更 | 説明 |
|---|---|---|---|
| TiDB | enable-stats-cache-mem-quota | 修正済み | デフォルト値はfalseからtrueに変更され、TiDB 統計のキャッシュのメモリ制限がデフォルトで有効になることを意味します。 |
| TiKV | [`rocksdb.[defaultcf | writecf | lockcf].periodic-compaction-seconds`](/tikv-configuration-file.md#periodic-compaction-seconds-new-in-v720) |
| TiKV | [`rocksdb.[defaultcf | writecf | lockcf].ttl`](/tikv-configuration-file.md#ttl-new-in-v720) |
| TiFlash | flash.compact_log_min_gap | 新しく追加された | 現在のRaftステート マシンによって進められたapplied_indexと最後のディスク スピル時のapplied_indexの差がcompact_log_min_gap超えると、 TiFlash はTiKV からCompactLogコマンドを実行し、データをディスクにスピルします。 |
| TiFlash | profiles.default.enable_resource_control | 新しく追加された | TiFlashリソース制御機能を有効にするかどうかを制御します。 |
| TiFlash | storage.format_version | 修正済み | デフォルト値を4から5に変更します。新しい形式では、小さなファイルを結合することで物理ファイルの数を削減できます。 |
| TiFlash | task_scheduler_active_set_soft_limit | 修正済み | デフォルト値をvcpu * 0.25からvcpu * 2に変更します。 |
| Dumpling | --csv-line-terminator | 新しく追加された | CSVファイルの終端文字を指定します。このオプションは"\r\n"と"\n"サポートします。デフォルト値は"\r\n"で、以前のバージョンと同じです。 |
| TiCDC | claim-check-storage-uri | 新しく追加された | large-message-handle-option claim-checkに設定する場合、 claim-check-storage-uri有効な外部storageアドレスに設定する必要があります。そうでない場合、チェンジフィードの作成時にエラーが発生します。 |
| TiCDC | large-message-handle-compression | 新しく追加された | エンコード中に圧縮を有効にするかどうかを制御します。デフォルト値は空で、無効を意味します。 |
| TiCDC | large-message-handle-option | 修正済み | この設定項目は新しい値claim-checkを追加します。これをclaim-checkに設定すると、TiCDC Kafka シンクは、メッセージサイズが制限を超えた場合にメッセージを外部storageに送信することをサポートし、外部storage内のこの大きなメッセージのアドレスを含むメッセージを Kafka に送信します。 |
廃止および削除された機能
- マイダンパーバージョン7.5.0で廃止され、その機能の大部分はDumplingに置き換えられました。mydumperではなくDumplingを使用することを強くお勧めします。
- TiKVインポーターはバージョン7.5.0で廃止されます。代替としてTiDB Lightningの物理インポートモード使用することを強くお勧めします。
- TiCDCの
enable-old-valueのパラメータは削除されます#9667 @ 3エースショーハンド
改善点
TiDB
- パーティションテーブル#47071 #47104 #46804 @ ホーキングレイでの
ANALYZE操作のメモリ使用量とパフォーマンスを最適化します - 統計ガベージコレクション#31778 @ ウィノロスメモリ使用量とパフォーマンスを最適化します
- インデックスマージ交差のプッシュダウン
limit最適化してクエリパフォーマンス#46863 @ アイリンキッドを向上させる IndexLookup多くのテーブル取得タスクが含まれる場合に、誤ってフルテーブルスキャンを選択する可能性を最小限に抑えるようにコストモデルを改善します#45132 @ qw4990- 結合除去ルールを最適化して、
join on unique keys#46248 @ 修正データベースのクエリパフォーマンスを向上させます。 - 実行エラーを回避するために、複数値インデックス列の照合順序を
binaryに変更します#46717 @ ヤンケオ
- パーティションテーブル#47071 #47104 #46804 @ ホーキングレイでの
TiKV
- OOM #15458 @ 金星の上を防ぐためにリゾルバのメモリ使用量を最適化します
- ルータオブジェクトのLRUCacheを排除してメモリ使用量を削減し、OOM #15430 @ コナー1996を防止します。
- TiCDC リゾルバ#15412 @ 金星の上のメモリ使用量を削減
- RocksDB 圧縮#15324 @ 金星の上によるメモリ変動を削減
- Partitioned Raft KV #15269 @ 金星の上のフロー制御モジュールのメモリ消費を削減
- 接続再試行のプロセスでPDクライアントのバックオフメカニズムを追加し、エラー再試行中に再試行間隔を徐々に増やしてPD圧力#15428 @ ノルーシュを軽減します。
- RocksDB #15424の
background_compaction栄光で動的に調整するサポート
PD
TiFlash
ツール
バックアップと復元 (BR)
- リージョンリーダーシップの移行が発生すると、PITR ログバックアップの進行のレイテンシーが長くなるという問題を軽減します#13638 @ ユジュンセン
- HTTPクライアント#46011 @ リーヴルスで
MaxIdleConnsとMaxIdleConnsPerHostパラメータを設定することにより、ログバックアップとPITRリストアタスクの接続再利用のサポートを強化します。 - PD または外部 S3storageへの接続に失敗した場合のBRのフォールトトレランスを向上#42909 @ リーヴルス
- 新しい復元パラメータ
WaitTiflashReadyを追加します。このパラメータを有効にすると、 TiFlashレプリカが正常に複製された後に復元操作が完了します#43828 #46302 @ 3ポイントシュート - ログバックアップのCPUオーバーヘッドを削減
resolve lock#40759 @ 3ポイントシュート
TiCDC
TiDB Lightning
バグ修正
TiDB
- ハッシュパーティション化されていないテーブルに対して
BatchPointGet演算子が誤った結果を返す問題を修正しました#45889 @ 定義2014 - ハッシュパーティションテーブル#46779 @ ジフハウスに対して
BatchPointGet演算子が誤った結果を返す問題を修正しました - TiDBパーサーが状態のままになり、解析エラーが発生する問題を修正#45898 @ qw4990
EXCHANGE PARTITION制約#45922 @ ミョンスをチェックしない問題を修正tidb_enforce_mppシステム変数が正しく復元できない問題を修正#46214 @ djshow832LIKE節の_誤って処理される問題を修正#46287 #46618 @ 定義2014- TiDBがスキーマ#46325 @ ヒヒフフを取得できなかった場合に
schemaTsが0に設定される問題を修正しました AUTO_ID_CACHE=1#46444 @ 天菜まおに設定されている場合にDuplicate entry発生する可能性がある問題を修正しましたAUTO_ID_CACHE=1#46454 @ 天菜まおに設定されている場合に、panic後に TiDB がゆっくりと回復する問題を修正しました。AUTO_ID_CACHE=1#46545 @ 天菜まおに設定されている場合にnext_row_idinSHOW CREATE TABLEが間違っている問題を修正しました- サブクエリ#45838 @ djshow832で CTE を使用すると解析中に発生するpanic問題を修正しました
EXCHANGE PARTITION失敗またはキャンセルされた場合に、パーティションテーブルの制限が元のテーブルに残る問題を修正#45920 #45791 @ ミョンス- リストパーティションの定義で、
NULLと空の文字列#45694 @ ミョンスの両方の使用がサポートされていない問題を修正しました。 - パーティション交換#46492 @ ミョンス中にパーティション定義に準拠していないデータを検出できない問題を修正
tmp-storage-quota設定が#45161 #26806 @ wshwsh12で有効にならない問題を修正WEIGHT_STRING()関数が照合順序#45725 @ ドヴェーデンと一致しない問題を修正- インデックス結合のエラーによりクエリが停止する可能性がある問題を修正#45716 @ wshwsh12
DATETIMEまたはTIMESTAMP列を数値定数#38361 @ イービン87と比較するときに、MySQL と動作が一致しない問題を修正しました。- 符号なし型と
Duration型定数#45410 @ wshwsh12を比較したときに発生する誤った結果を修正しました - アクセスパスプルーニングロジックが
READ_FROM_STORAGE(TIFLASH[...])ヒントを無視し、Can't find a proper physical planエラー#40146 @ アイリンキッドが発生する問題を修正しました。 GROUP_CONCATORDER BY列#41986 @ アイリンキッドを解析できない問題を修正- 深くネストされた式に対してハッシュコードが繰り返し計算され、メモリ使用量が増加し、OOM #42788 @ アイリンキッドが発生する問題を修正しました。
- CAST に精度損失がないのに条件
cast(col)=rangeで FullScan が発生する問題を修正#45199 @ アイリンキッド - MPP実行プランで集計がユニオンを介してプッシュダウンされると、結果が正しくなくなる問題を修正#45850 @ アイリンキッド
in (?)とのバインディングがin (?, ... ?)#44298 @ qw4990と一致しない問題を修正しましたnon-prep plan cache実行プラン#47008 @ qw4990を再利用するときに接続照合順序を考慮しないことによって発生するエラーを修正しました- 実行されたプランがプランキャッシュ#46159 @ qw4990にヒットしない場合に警告が報告されない問題を修正しました
plan replayer dump explainエラー#46197 @ 時間と運命を報告する問題を修正- CTE を含む DML 文を実行するとpanic#46083 @ ウィノロスが発生する問題を修正しました
- 2つのサブクエリ#46160 @ qw4990を結合するときに
TIDB_INLJヒントが有効にならない問題を修正しました MERGE_JOINの結果が間違っている問題を修正#46580 @ qw4990
- ハッシュパーティション化されていないテーブルに対して
TiKV
- Titanが有効になっているときにTiKVが起動に失敗し、
Blob file deleted twiceエラーが#15454 @ コナー1996発生する問題を修正しました - スレッド自発的およびスレッド非自発的監視パネル#15413 @ スペードA-タンにデータがない問題を修正しました
- raftstore-applys #15371 @ コナー1996が継続的に増加するデータエラーを修正しました
- リージョン#13311 @ ジグアンのメタデータが正しくないことによって引き起こされるTiKVpanic問題を修正しました
sync_recoveryからsync#15366 @ ノルーシュに切り替えた後に QPS が 0 に低下する問題を修正しました- オンラインアンセーフリカバリがタイムアウト#15346 @ コナー1996で中止されない問題を修正
- CpuRecord #15304 @ 金星の上によって発生する潜在的なメモリリークの問題を修正しました
- バックアップクラスタがダウンし、プライマリクラスタが#12914 @ コナー1996でクエリされたときに
"Error 9002: TiKV server timeout"発生する問題を修正しました - プライマリクラスタが#12320 @ ディスクに回復した後に TiKV が再起動するとバックアップ TiKV が停止する問題を修正しました
- Titanが有効になっているときにTiKVが起動に失敗し、
PD
- フラッシュバック#6912 @ 金星の上中にリージョン情報が更新されず保存されない問題を修正
- ストア構成#6918 @ バッファフライの同期が遅いために PD リーダーの切り替えが遅くなる問題を修正しました
- Scatter Peers #6962 @ バッファフライでグループが考慮されない問題を修正しました
- RU消費量が0未満の場合にPDが#6973 @ キャビンフィーバーBでクラッシュする問題を修正
- 変更された分離レベルがデフォルトの配置ルール#7121 @ rleungxに同期されない問題を修正しました
- クラスタが大きい場合、クライアントが定期的に更新される
min-resolved-tsPD OOMを引き起こす可能性がある問題を修正しました#46664 @ HuSharp
TiFlash
ツール
バックアップと復元 (BR)
TiCDC
- PD のスケールアップおよびスケールダウン中に TiCDC が無効な古いアドレスにアクセスする問題を修正#9584 @ フビンズ @ アズドンメン
- 一部のシナリオでチェンジフィードが失敗する問題を修正#9309 #9450 #9542 #9685 @ ヒック @ チャールズ・チュン96
- アップストリーム#9430 @ スドジで 1 つのトランザクションで複数の行の一意のキーが変更されると、レプリケーション書き込み競合が発生する可能性がある問題を修正しました。
- アップストリーム#9476 #9488 @ チャールズ・チュン96 @ アズドンメンで同じDDL文で複数のテーブルの名前を変更するとレプリケーションエラーが発生する問題を修正
- CSVファイルで中国語の文字が検証されない問題を修正#9609 @ チャールズ・チュン96
- すべての変更フィードが削除された後に上流の TiDB GC がブロックされる問題を修正#9633 @ スドジ
scale-outが有効になっている場合のノード間の書き込みキーの不均等な配布の問題を修正#9665 @ スドジ- ログ#9690 @ スドジに機密ユーザー情報が記録される問題を修正
TiDB データ移行 (DM)
- DM が大文字と小文字を区別しない照合#9489 @ ヒヒフフで競合を正しく処理できない問題を修正しました
- DM バリデーターのデッドロック問題を修正し、再試行を#9257 @ D3ハンターに強化しました。
- 失敗した DDL がスキップされ、後続の DDL が実行されない場合に、DM によって返されるレプリケーション ラグが増大し続ける問題を修正しました#9605 @ D3ハンター
- オンライン DDL #9587 @ GMHDBJDをスキップするときに DM が上流のテーブル スキーマを適切に追跡できない問題を修正しました
- 楽観的モード#9588 @ GMHDBJDでタスクを再開するときに DM がすべての DML をスキップする問題を修正しました
- DMが楽観的モード#9788 @ GMHDBJDでパーティションDDLをスキップする問題を修正
TiDB Lightning
寄稿者
TiDB コミュニティからの以下の貢献者に感謝いたします。