TiDB 7.6.0 リリースノート
発売日:2024年1月25日
TiDB バージョン: 7.6.0
クイックアクセス: クイックスタート
7.6.0 では、次の主な機能と改善が導入されています。
| カテゴリ | 機能/拡張機能 | 説明 |
|---|---|---|
| スケーラビリティとパフォーマンス | データベース間のSQLバインディング | 同じスキーマを持つ数百のデータベースを管理する場合、これらのデータベース全体にSQLバインディングを適用する必要があることがよくあります。例えば、SaaSまたはPaaSデータプラットフォームでは、各ユーザーは通常、同じスキーマを持つ別々のデータベースを操作し、それらに対して類似のSQLクエリを実行します。このような場合、各データベースにSQLを個別にバインドするのは現実的ではありません。TiDB v7.6.0では、スキーマが同等なすべてのデータベース間で一致するバインディングを可能にする、データベース間SQLバインディングが導入されています。 |
| スナップショットの復元を最大10倍高速化(実験的) | BR v7.6.0では、クラスターのスナップショット復元を高速化するための、実験的粗粒度リージョン分散アルゴリズムが導入されました。多数のTiKVノードを持つクラスターでは、このアルゴリズムにより、ノード間の負荷がより均等に分散され、ノードごとのネットワーク帯域幅がより有効に活用されるため、クラスターのリソース効率が大幅に向上します。いくつかの実環境では、この改善により復元プロセスが最大10倍程度高速化されることが示されています。 | |
| バッチ処理によるテーブル作成が最大 10 倍高速化 (実験的) | v7.6.0での新しいDDLアーキテクチャの実装により、バッチテーブル作成のパフォーマンスが大幅に向上し、最大10倍高速化しました。この大幅な機能強化により、多数のテーブル作成に必要な時間が大幅に短縮されます。この高速化は、数万から数十万に及ぶ大量のテーブルが頻繁に使用されるSaaSシナリオにおいて特に顕著です。 | |
| アクティブ PD フォロワーを使用して PD のリージョン情報クエリ サービスを強化します (実験的) | TiDB v7.6.0では、PDフォロワーがリージョン情報クエリサービスを提供できる実験的機能「Active PD Follower 」が導入されました。この機能により、多数のTiDBノードとリージョンを持つクラスターにおいて、PDクラスターのGetRegionおよびScanRegionsリクエスト処理能力が向上し、PDリーダーのCPU負荷が軽減されます。 | |
| 信頼性と可用性 | TiProxy をサポート (実験的) | デプロイメント ツールを使用して簡単にデプロイできる TiProxy サービスを完全にサポートし、ローリング リスタート、アップグレード、またはスケーリング イベントを通じて TiDB への接続を管理および維持できるようにします。 |
| データ移行(DM)がMySQL 8.0(GA)を正式にサポート | これまで、DMを使用したMySQL 8.0からのデータ移行は実験的機能であり、本番環境ではご利用いただけませんでした。TiDB v7.6.0では、この機能の安定性と互換性が向上し、本番環境においてMySQL 8.0からTiDBへのデータ移行をスムーズかつ迅速に実行できるようになります。v7.6.0では、この機能が一般提供(GA)されます。 |
機能の詳細
スケーラビリティ
アクティブPDFollower機能を使用して、PDのリージョン情報クエリサービスのスケーラビリティを強化します(実験的) #7431 @ キャビンフィーバーB
多数のリージョンを持つTiDBクラスターでは、ハートビート処理とタスクのスケジューリングによるオーバーヘッドの増加により、PDリーダーのCPU負荷が高くなる可能性があります。クラスターに多数のTiDBインスタンスがあり、リージョン情報へのリクエストが同時に発生すると、PDリーダーのCPU負荷がさらに高まり、PDサービスが利用できなくなる可能性があります。
高可用性を確保するため、TiDB v7.6.0では、PDのリージョン情報クエリサービスのスケーラビリティを向上させるActive PD Follower機能をサポートしています。Active PD Follower機能を有効にするには、システム変数
pd_enable_follower_handle_regionをONに設定します。この機能を有効にすると、TiDBはリージョン情報リクエストをすべてのPDサーバーに均等に分散し、PDフォロワーもリージョンリクエストを処理できるようになるため、PDリーダーのCPU負荷が軽減されます。詳細についてはドキュメント参照してください。
パフォーマンス
BRはスナップショットの復元速度を最大10倍向上させます(実験的) #33937 #49886 @ 3ポイントシュート
TiDBクラスターのスケールアップに伴い、業務停止時間を最小限に抑えるために、障害発生時にクラスターを迅速に復旧することがますます重要になっています。バージョン7.6.0より前のバージョンでは、リージョン分散アルゴリズムがパフォーマンス復旧における主要なボトルネックとなっていました。バージョン7.6.0では、 BRはリージョン分散アルゴリズムを最適化し、復旧タスクを多数の小さなタスクに迅速に分割し、それらをすべてのTiKVノードに一括で分散します。新しい並列復旧アルゴリズムは、各TiKVノードのリソースを最大限に活用することで、迅速な並列復旧を実現します。いくつかの実環境において、大規模なリージョンシナリオにおいて、クラスターのスナップショット復旧速度が約10倍向上しました。
新しい粗粒度リージョン散布アルゴリズムは実験的です。使用するには、
brコマンドの--granularity="coarse-grained"パラメータを設定します。例:br restore full \ --pd "${PDIP}:2379" \ --storage "s3://${Bucket}/${Folder}" \ --s3.region "${region}" \ --granularity "coarse-grained" \ --send-credentials-to-tikv=true \ --log-file restorefull.log詳細についてはドキュメント参照してください。
Titanエンジンはデフォルトで有効になっています#16245 @ コナー1996 @ v01dstar @ トニー・シュッキ
TiDB v7.6.0以降では、特にJSONをサポートするTiDB全体のテーブル書き込みシナリオをより適切にサポートするために、Titanエンジンがデフォルトで有効化されています。Titanエンジンは、32KBを超える大きな値をRocksDBのLSMツリーから自動的に分離し、Titanに個別に保存することで、大きな値の処理を最適化します。Titanエンジンは、TiKVで使用されるRocksDB機能と完全に互換性があります。この戦略的な変更は、書き込み増幅効果を軽減するだけでなく、大きな値を含む書き込み、更新、およびポイントクエリのシナリオにおけるパフォーマンスを向上させます。さらに、Range Scanシナリオでは、Titanエンジンの最適化により、デフォルト構成のRocksDBに匹敵するパフォーマンスを実現しています。
この設定変更は、以前のバージョンとの互換性を維持しています。既存のTiDBクラスタをTiDB v7.6.0以降にアップグレードする場合、Titanエンジンはデフォルトで無効化されます。お客様の特定の要件に応じて、Titanエンジンを手動で有効化または無効化することができます。
詳細についてはドキュメント参照してください。
以下の文字列関数を TiKV #48170 @ ゲンリキにプッシュダウンすることをサポートします
LOWER()UPPER()
詳細についてはドキュメント参照してください。
次の JSON関数をTiFlashにプッシュダウンすることをサポートします#48350 #48986 #48994 #49345 #49392 @ シーライズ @ イービン87
JSON_UNQUOTE()JSON_ARRAY()JSON_DEPTH()JSON_VALID()JSON_KEYS()JSON_CONTAINS_PATH()
詳細についてはドキュメント参照してください。
テーブル作成のパフォーマンスを10倍向上(実験的) #49752 @ gmhdbjd
以前のバージョンでは、上流データベースから数万のテーブルをTiDBに移行する場合、TiDBによるテーブル作成には時間がかかり、非効率的でした。v7.6.0以降、TiDBは新しいTiDB DDL V2アーキテクチャを導入しました。これは、システム変数
tidb_ddl_version設定することで有効にできます。以前のバージョンと比較して、新しいバージョンのDDLはバッチテーブル作成のパフォーマンスを10倍向上させ、テーブル作成時間を大幅に短縮します。詳細についてはドキュメント参照してください。
定期的な完全圧縮をサポート(実験的) #12729 アファインバーグ
TiDBはv7.6.0以降、TiKVの定期的なフルコンパクションをサポートしています。この機能は、ガベージコレクション(GC)の拡張機能として機能し、冗長なデータバージョンを排除します。アプリケーションのアクティビティに明らかなピークと谷が見られるようなシナリオでは、この機能を使用してアイドル期間中にデータコンパクションを実行し、ピーク時のパフォーマンスを向上させることができます。
TiKV設定項目
periodic-full-compact-start-times設定することで、TiKVが定期的なフルコンパクションを開始する特定の時間を設定できます。また、periodic-full-compact-start-max-cpu設定することで、TiKVの定期的なフルコンパクションの最大CPU使用率を制限できます。デフォルト値はperiodic-full-compact-start-max-cpuで、0.1です。これは、TiKVのCPU使用率が10%未満の場合にのみ定期的なフルコンパクションがトリガーされることを意味します。これにより、アプリケーショントラフィックへの影響が軽減されます。詳細についてはドキュメント参照してください。
信頼性
クロスデータベース実行プランバインディング#48875 @ qw4990
TiDB上でSaaSサービスを実行する場合、データの保守と管理を容易にするために、テナントごとにデータを別々のデータベースに保存するのが一般的です。その結果、同じテーブルとインデックス定義、そして類似したSQL文を持つデータベースが数百個も存在することになります。このようなシナリオでは、あるSQL文の実行プランバインディングを作成すると、通常、このバインディングは他のデータベースのSQL文にも適用されます。
このシナリオでは、TiDB v7.6.0 でクロスデータベース バインディング機能が導入され、異なるデータベースであっても、同じスキーマを持つ SQL 文に同じ実行プランをバインドできるようになりました。クロスデータベース バインディングを作成する際は、次の例に示すように、ワイルドカード
*使用してデータベース名を表す必要があります。バインディングが作成されると、テーブルt1とt2どのデータベースにあるかに関係なく、TiDB はこのバインディングを使用して、同じスキーマを持つすべての SQL 文の実行プランを生成しようとします。これにより、データベースごとにバインディングを作成する手間が省けます。CREATE GLOBAL BINDING FOR USING SELECT /*+ merge_join(t1, t2) */ t1.id, t2.amount FROM *.t1, *.t2 WHERE t1.id = t2.id;さらに、クロスデータベースバインディングは、ユーザーデータとワークロードの不均一な分散や急激な変化によって引き起こされるSQLパフォーマンスの問題を効果的に軽減します。SaaSプロバイダーは、クロスデータベースバインディングを使用することで、大量のデータを扱うユーザーによって検証された実行プランを修正し、すべてのユーザーの実行プランを修正できます。SaaSプロバイダーにとって、この機能は利便性とユーザーエクスペリエンスを大幅に向上させます。
データベース間バインディングによって発生するシステムオーバーヘッド(1%未満)のため、TiDBはデフォルトでこの機能を無効にしています。データベース間バインディングを使用するには、まずシステム変数
tidb_opt_enable_fuzzy_binding有効にする必要があります。詳細についてはドキュメント参照してください。
可用性
プロキシコンポーネントTiProxy (実験的) #413 @ djshow832 @ xheboxサポート
TiProxyは、TiDBの公式プロキシコンポーネントであり、クライアントとTiDBサーバーの間に配置されます。TiDBの負荷分散機能と接続の永続化関数を提供し、TiDBクラスタのワークロードのバランスを向上させ、メンテナンス作業中のデータベースへのユーザーアクセスに影響を与えません。
- TiDBクラスタのローリング再起動、ローリングアップグレード、スケールインなどのメンテナンス作業中は、TiDBサーバに変更が発生し、クライアントとTiDBサーバ間の接続が中断される可能性があります。TiProxyを使用することで、これらのメンテナンス作業中にクライアントへの影響を最小限に抑え、接続を他のTiDBサーバにスムーズに移行できます。
- TiDBサーバーへのクライアント接続は、他のTiDBサーバに動的に移行できません。複数のTiDBサーバのワークロードが不均衡な場合、クラスタ全体のリソースは十分であるにもかかわらず、特定のTiDBサーバでリソース枯渇が発生し、レイテンシーが大幅に増加するという状況が発生する可能性があります。この問題に対処するため、TiProxyは接続の動的移行機能を提供します。これにより、クライアントに影響を与えることなく、接続をあるTiDBサーバーから別のTiDBサーバに移行できるため、TiDBクラスタの負荷分散が実現します。
TiProxy はTiUP、 TiDB Operator、および TiDB Dashboard に統合されており、構成、展開、保守が容易になります。
詳細についてはドキュメント参照してください。
SQL
LOAD DATA明示的なトランザクションとロールバックをサポート#49079 @ エキシウムMySQLと比較すると、TiDBのバージョン7.6.0より前のバージョンでは、
LOAD DATA文のトランザクション動作が異なるため、この文を使用する際には追加の調整が必要になる場合があります。具体的には、v4.0.0より前のバージョンでは、LOAD DATA文は20000行ごとにコミットします。v4.0.0からv6.6.0までは、TiDBはデフォルトですべての行を1つのトランザクションでコミットし、システム変数tidb_dml_batch_size設定することで、一定数の行ごとにコミットすることもできます。v7.0.0以降では、tidb_dml_batch_sizeLOAD DATAには適用されなくなり、TiDBはすべての行を1つのトランザクションでコミットします。v7.6.0以降、TiDBはトランザクション内の
LOAD DATA他のDML文と同様に、特にMySQLと同様に処理します。トランザクション内のLOAD DATA文は、現在のトランザクションを自動的にコミットしたり、新しいトランザクションを開始したりしなくなりました。さらに、トランザクション内のLOAD DATA文は明示的にコミットまたはロールバックできます。さらに、LOAD DATA文はTiDBのトランザクションモード設定(楽観的トランザクションまたは悲観的トランザクション)の影響を受けます。これらの改善により、MySQLからTiDBへの移行プロセスが簡素化され、より統一された制御可能なデータインポートエクスペリエンスが提供されます。詳細についてはドキュメント参照してください。
DB操作
FLASHBACK CLUSTER正確なTSO #48372 @ 生まれ変わった人指定をサポートしますTiDB v7.6.0では、フラッシュバック機能がより強力かつ正確になりました。指定した履歴タイムスタンプへのクラスターのロールバックをサポートするだけでなく、
FLASHBACK CLUSTER TO TSO使用して正確なリカバリTSOを指定できるため、データリカバリの柔軟性が向上します。例えば、この機能はTiCDCと併用できます。データレプリケーションを一時停止し、下流のTiDBクラスターでオンライン前の読み取り/書き込みテストを実施した後、この機能により、クラスターは一時停止中のTSOに迅速かつ確実にロールバックし、TiCDCを使用してデータのレプリケーションを続行できます。これにより、オンライン前の検証プロセスが合理化され、データ管理が簡素化されます。FLASHBACK CLUSTER TO TSO 445494839813079041;詳細についてはドキュメント参照してください。
長時間アイドル状態のトランザクションの自動終了をサポート#48714 @ crazycs520
ネットワークの切断やアプリケーション障害が発生すると、
COMMIT/ROLLBACKステートメントがデータベースへの転送に失敗する可能性があります。これにより、データベースロックの解放が遅れ、トランザクションロックの待機が発生し、データベース接続が急増する可能性があります。このような問題はテスト環境では一般的ですが、本番環境でも時折発生する可能性があり、迅速な診断が困難な場合があります。これらの問題を回避するために、TiDB v7.6.0 では、長時間アイドル状態のトランザクションを自動的に終了するtidb_idle_transaction_timeoutシステム変数が導入されました。トランザクション状態のユーザーセッションがアイドル状態のままで、この変数の値を超える期間が経過すると、TiDB はトランザクションのデータベース接続を終了し、ロールバックします。詳細についてはドキュメント参照してください。
実行プランバインディングを作成するための構文を簡素化する#48876 @ qw4990
TiDB v7.6.0では、実行プランバインディングを作成するための構文が簡素化されました。実行プランバインディングを作成する際に、元のSQL文を指定する必要がなくなりました。TiDBはヒント付きのSQL文に基づいて元のSQL文を識別します。この改善により、実行プランバインディングの作成の利便性が向上します。例えば、次のようになります。
CREATE GLOBAL BINDING USING SELECT /*+ merge_join(t1, t2) */ * FROM t1, t2 WHERE t1.id = t2.id;詳細についてはドキュメント参照してください。
TiDB #49237 @ ジグアンの単一行レコードのサイズ制限を動的に変更する機能をサポート
v7.6.0 より前では、トランザクション内の単一行レコードのサイズは、 TiDB 構成項目
txn-entry-size-limitによって制限されていました。サイズ制限を超えると、 TiDB はentry too largeエラーを返します。この場合、 TiDB 構成ファイルを手動で変更し、 TiDB を再起動して変更を有効にする必要があります。 管理オーバーヘッドを削減するために、 TiDB v7.6.0 では、txn-entry-size-limit構成項目の値を動的に変更することをサポートするシステム変数tidb_txn_entry_size_limitが導入されました。 この変数のデフォルト値は0です。つまり、 TiDB はデフォルトで構成項目txn-entry-size-limitの値を使用します。 この変数がゼロ以外の値に設定されている場合、 TiDB はトランザクション内の行レコードのサイズをこの変数の値に制限します。 この改善により、 TiDB を再起動せずにシステム構成を調整する柔軟性が向上しました。詳細についてはドキュメント参照してください。
BRはデフォルトで、ユーザーデータ#48567 @ 生まれ変わった人 #49627 @ リーヴルスなどのシステムテーブルを復元します。
v5.1.0以降、スナップショットをバックアップすると、 BRは
mysqlスキーマ内のシステムテーブルを自動的にバックアップしますが、デフォルトではこれらのシステムテーブルをリストアしません。v6.2.0では、 BRにパラメータ--with-sys-tableが追加され、一部のシステムテーブルのデータのリストアがサポートされるようになりました。これにより、操作の柔軟性が向上します。管理オーバーヘッドをさらに削減し、より直感的なデフォルト動作を提供するため、v7.6.0以降、 BRはパラメータ
--with-sys-tableデフォルトで有効化します。つまり、 BRは復元時に一部のシステムテーブル、特にユーザーアカウントとテーブル統計データをデフォルトで復元します。この改善により、バックアップと復元の操作がより直感的になり、手動設定の負担が軽減され、全体的な操作性が向上します。詳細についてはドキュメント参照してください。
可観測性
リソース制御に関する可観測性を強化する#49318 @ 栄光 @ バッファフライ @ ノルーシュ
リソースグループを使用してアプリケーションのワークロードを分離するユーザーが増えるにつれ、リソースコントロールはリソースグループに基づいた拡張データを提供します。これにより、リソースグループのワークロードと設定を監視し、次のような問題を迅速に特定し、正確に診断できるようになります。
- 遅いクエリ : リソース グループ名、リソース ユニット (RU) の消費量、およびリソースの待機時間を追加します。
- 明細書概要表 : リソース グループ名、RU 消費量、リソースの待機時間を追加します。
- システム変数
tidb_last_query_infoに、SQL文によって消費されたリソース量ロシア示す新しいエントリru_consumptionを追加します。この変数を使用して、セッション内の最後の文のリソース消費量を取得できます。 - リソース グループに基づいてデータベース メトリックを追加します: QPS/TPS、実行時間 (P999/P99/P95)、障害数、接続数。
- すべてのリソース グループの毎日消費された RU の履歴レコードを記録するために、システム テーブル
request_unit_by_groupを追加します。
詳細については、 遅いクエリを特定する 、 明細書概要表 、 リソース管理の主要な監視指標参照してください。
データ移行
MySQL 8.0 の移行のためのデータ移行 (DM) サポートが一般提供 (GA) #10405 @ lyzx2001に開始されます
これまで、DMを使用したMySQL 8.0からのデータ移行は実験的機能であり、本番環境ではご利用いただけませんでした。TiDB v7.6.0では、この機能の安定性と互換性が向上し、本番環境においてMySQL 8.0からTiDBへのデータ移行をスムーズかつ迅速に実行できるようになります。v7.6.0では、この機能が一般提供(GA)されます。
詳細についてはドキュメント参照してください。
TiCDC は、双方向レプリケーション (BDR) モードでの DDL ステートメントのレプリケーションをサポートしています (実験的) #10301 #48519 @ okJiang @ アズドンメン
v7.6.0以降、TiCDCは双方向レプリケーションが設定されたDDL文のレプリケーションをサポートします。以前は、TiCDCはDDL文のレプリケーションをサポートしていなかったため、TiCDCの双方向レプリケーションを利用するユーザーは、両方のTiDBクラスターに個別にDDL文を適用する必要がありました。この機能により、TiCDCはクラスターに
PRIMARYBDRロールを割り当て、そのクラスターから下流のクラスターへのDDL文のレプリケーションを可能にします。詳細についてはドキュメント参照してください。
TiCDCは、チェンジフィード#10289 @ ホンユニャンの下流同期ステータスの照会をサポートしています。
TiCDC v7.6.0以降、指定されたレプリケーションタスク(changefeed)の下流同期ステータスを照会するための新しいAPI
GET /api/v2/changefeed/{changefeed_id}/syncedが導入されました。このAPIを使用することで、TiCDCが受信した上流データが下流システムに完全に同期されているかどうかを確認できます。詳細についてはドキュメント参照してください。
TiCDC は、CSV 出力プロトコル#9969 @ 張金鵬87で 3 文字の区切り文字のサポートを追加しました。
バージョン7.6.0以降、CSV出力プロトコルの区切り文字を1~3文字に指定できるようになりました。この変更により、TiCDCは2文字の区切り文字(
||や$^など)または3文字の区切り文字(|@|など)を使用してファイル出力を生成するように設定できます。詳細についてはドキュメント参照してください。
互換性の変更
注記:
このセクションでは、v7.5.0から最新バージョン(v7.6.0)にアップグレードする際に知っておくべき互換性の変更点について説明します。v7.4.0以前のバージョンから最新バージョンにアップグレードする場合は、中間バージョンで導入された互換性の変更点も確認する必要があるかもしれません。
MySQLの互換性
- TiDB v7.6.0より前のバージョンでは、
LOAD DATA操作はすべての行を単一のトランザクションでコミットするか、トランザクションをバッチでコミットしていました。これはMySQLの動作とは若干異なります。v7.6.0以降、TiDBはMySQLと同様にトランザクション内のLOAD DATAの操作を処理します。トランザクション内のLOAD DATAの文は、現在のトランザクションを自動的にコミットしたり、新しいトランザクションを開始したりしなくなりました。また、トランザクション内のLOAD DATA文は明示的にコミットまたはロールバックできます。さらに、LOAD DATA文はTiDBのトランザクションモード設定(楽観的トランザクションまたは悲観的トランザクション)の影響を受けます#49079 @ エキシウム
システム変数
| 変数名 | タイプを変更 | 説明 |
|---|---|---|
tidb_auto_analyze_partition_batch_size | 修正済み | さらにテストを行った後、デフォルト値を1から128に変更します。 |
tidb_sysproc_scan_concurrency | 修正済み | 大規模クラスターでは、 scan操作の同時実行性をANALYZEニーズに合わせて高めに調整できます。したがって、最大値を256から4294967295に変更します。 |
tidb_analyze_distsql_scan_concurrency | 新しく追加された | ANALYZE操作を実行する際のscan操作の同時実行性を設定します。デフォルト値は4です。 |
tidb_ddl_version | 新しく追加された | TiDB DDL V2有効にするかどうかを制御します。有効にするには値を2に、無効にするには値を1設定します。デフォルト値は1です。TiDB DDL V2 を有効にすると、DDL 文は TiDB DDL V2 を使用して実行されます。テーブル作成用の DDL 文の実行速度は、TiDB DDL V1 と比較して 10 倍向上します。 |
tidb_enable_global_index | 新しく追加された | パーティションテーブルGlobal indexes作成をサポートするかどうかを制御します。デフォルト値はOFFです。5 Global index現在開発段階にあります。このシステム変数の値を変更することは推奨されません。 |
tidb_idle_transaction_timeout | 新しく追加された | ユーザーセッションにおけるトランザクションのアイドルタイムアウトを制御します。ユーザーセッションがトランザクション状態にあり、この変数の値を超える期間アイドル状態が続くと、TiDBはセッションを終了します。デフォルト値の0無制限を意味します。 |
tidb_ignore_inlist_plan_digest | 新しく追加された | TiDBがプランダイジェストを生成する際に、異なるクエリ間のリストIN内の要素の差異を無視するかどうかを制御します。デフォルト値OFF 、差異を無視しないことを意味します。 |
tidb_opt_enable_fuzzy_binding | 新しく追加された | データベース間バインディング機能を有効にするかどうかを制御します。デフォルト値OFF 、データベース間バインディングが無効であることを意味します。 |
tidb_txn_entry_size_limit | 新しく追加された | TiDB設定項目performance.txn-entry-size-limit動的に変更します。これにより、TiDB内の単一行のデータサイズが制限されます。この変数のデフォルト値は0で、TiDBはデフォルトで設定項目txn-entry-size-limitの値を使用します。この変数が0以外の値に設定された場合、 txn-entry-size-limitも同じ値に設定されます。 |
pd_enable_follower_handle_region | 新しく追加された | アクティブPDFollower機能(実験的)を有効にするかどうかを制御します。値がOFF場合、TiDB は PD リーダーからのみリージョン情報を取得します。値がON場合、TiDB はリージョン情報要求をすべての PD サーバーに均等に分散し、PD フォロワーもリージョン要求を処理できるため、PD リーダーの CPU 負荷が軽減されます。 |
コンフィグレーションファイルのパラメータ
| コンフィグレーションファイル | コンフィグレーションパラメータ | タイプを変更 | 説明 |
|---|---|---|---|
| TiDB | tls-version | 修正済み | デフォルト値は "" です。TiDB のデフォルトでサポートされる TLS バージョンがTLS1.1以上からTLS1.2以上に変更されました。 |
| TiKV | raftstore.report-min-resolved-ts-interval | 名前変更 | 名前をより正確にするために、この構成項目の名前はraftstore.pd-report-min-resolved-ts-intervalに変更されました。 raftstore.report-min-resolved-ts-interval無効になりました。 |
| TiKV | blob-file-compression | 修正済み | Titanで値を圧縮するために使用されるアルゴリズム。単位はvalueです。TiDB v7.6.0以降、デフォルトの圧縮アルゴリズムはzstdです。 |
| TiKV | rocksdb.defaultcf.titan.min-blob-size | 修正済み | TiDB v7.6.0以降、新規クラスターのデフォルト値は32KBです。v7.6.0にアップグレードする既存のクラスターの場合、デフォルト値は1KBままです。 |
| TiKV | rocksdb.titan.enabled | 修正済み | Titanを有効または無効にします。v7.5.0以前のバージョンでは、デフォルト値はfalseです。v7.6.0以降では、新規クラスタのみデフォルト値はtrueです。v7.6.0以降のバージョンにアップグレードされた既存のクラスタでは、元の設定が保持されます。 |
| TiKV | cdc.incremental-scan-concurrency-limit | 新しく追加された | 実行待ちの履歴データの増分スキャンタスクの最大キュー長を設定します。デフォルト値は10000で、最大10000個のタスクをキューに入れて実行できます。 |
| TiKV | gc.num-threads | 新しく追加された | enable-compaction-filter falseに設定すると、このパラメータはGCスレッドの数を制御します。デフォルト値は1です。 |
| TiKV | raftstore.periodic-full-compact-start-times | 新しく追加された | TiKVが定期的なフルコンパクションを開始する特定のタイミングを設定します。デフォルト値の[] 、定期的なフルコンパクションが無効であることを意味します。 |
| TiKV | raftstore.periodic-full-compact-start-max-cpu | 新しく追加された | TiKV定期フルコンパクションの最大CPU使用率を制限します。デフォルト値は0.1です。 |
| TiKV | raftstore.pd-report-min-resolved-ts-interval | 新しく追加された | raftstore.report-min-resolved-ts-intervalから改名されました。TiKVがPDリーダーにResolved TSを報告する最小間隔を指定します。デフォルト値は"1s"です。 |
| TiKV | zstd-dict-size | 新しく追加された | zstd辞書の圧縮サイズを指定します。デフォルト値は"0KB"で、 zstd辞書の圧縮を無効にすることを意味します。 |
| TiFlash | logger.level | 修正済み | ログ記録のコストを削減するために、デフォルト値を"debug"から"INFO"に変更します。 |
| TiDB Lightning | tidb.pd-addr | 修正済み | PDサーバーのアドレスを設定します。v7.6.0以降、TiDBは複数のPDアドレスの設定をサポートします。 |
| TiDB Lightning | block-size | 新しく追加された | 物理インポートモード( backend='local' )でローカルファイルをソートするためのI/Oブロックサイズを制御します。デフォルト値は16KiBです。ディスクIOPSがボトルネックになっている場合は、この値を増やすことでパフォーマンスを向上させることができます。 |
| BR | --granularity | 新しく追加された | --granularity="coarse-grained"指定すると、粗粒度のリージョン散布アルゴリズム(実験的)が使用されます。これにより、大規模なリージョンシナリオにおける復元速度が向上します。 |
| TiCDC | compression | 新しく追加された | REDO ログ ファイルを圧縮する動作を制御します。 |
| TiCDC | sink.cloud-storage-config | 新しく追加された | オブジェクトstorageにデータを複製するときに、履歴データの自動クリーンアップを設定します。 |
システムテーブル
- TiDB でサポートされているすべてのキーワードの情報を表示するための新しいシステム テーブル
INFORMATION_SCHEMA.KEYWORDSを追加します。 - システム テーブル
INFORMATION_SCHEMA.SLOW_QUERYに、リソース制御に関連する次のフィールドを追加します。Resource_group: ステートメントがバインドされているリソース グループ。Request_unit_read: ステートメントによって消費された読み取り RU の合計。Request_unit_write: ステートメントによって消費された書き込み RU の合計。Time_queued_by_rc: ステートメントが利用可能なリソースを待機する合計時間。
オフラインパッケージの変更
v7.6.0 以降、 TiDB-community-server バイナリパッケージには、プロキシコンポーネントTiProxyのインストール パッケージであるtiproxy-{version}-linux-{arch}.tar.gzが含まれるようになりました。
非推奨の機能
- TLSv1.0およびTLSv1.1プロトコルのサポートはTiDB v7.6.0で非推奨となり、v8.0.0で削除される予定です。TLSv1.2またはTLSv1.3にアップグレードしてください。
- 実行計画のベースライン進化機能は、TiDB v8.0.0で廃止されます。同等の機能は、以降のバージョンで再設計される予定です。
tidb_disable_txn_auto_retryシステム変数は TiDB v8.0.0 で非推奨となります。それ以降、TiDB は楽観的トランザクションの自動再試行をサポートしなくなります。
改善点
TiDB
- 非バイナリ照合順序が設定され、クエリに
LIKE含まれている場合、オプティマイザは実行効率を向上させるためにIndexRangeScan生成します#48181 #49138 @ 時間と運命 - 特定のシナリオで
OUTER JOINをINNER JOINに変換する能力を強化する#49616 @ qw4990 - ノードが#47298 @ ywqzzyで再起動されるシナリオでの分散実行フレームワーク (DXF) タスクのバランスを改善します。
- 通常の
ADD INDEXタスク#47758 @ 接線にフォールバックする代わりに、複数の加速されたADD INDEXDDL タスクをキューに入れて実行できるようにサポートします。 ALTER TABLE ... ROW_FORMAT#48754 @ ホーキングレイの互換性を向上させるCANCEL IMPORT JOB文を同期文#48736 @ D3ハンターに変更します。- 空のテーブルにインデックスを追加する速度を向上#49682 @ ジムララ
- 相関サブクエリの列が上位レベルの演算子によって参照されていない場合、相関サブクエリは直接削除できます#45822 @ キング・ディラン
EXCHANGE PARTITION操作により、統計#47354 @ ハイラスティンのメンテナンス更新がトリガーされます- TiDBは、連邦情報処理標準(FIPS) #47948 @ 天菜まおの要件を満たすバイナリファイルの構築をサポートしています。
- いくつかの型変換を処理する際の TiDB 実装を最適化し、関連する問題を修正しました#47945 #47864 #47829 #47816 @ ヤンケオ @ lcwangchao
- スキーマバージョンを取得する際、TiDBはデフォルトでKVタイムアウト機能を使用して読み取り、低速なメタリージョンリーダーの読み取りがスキーマバージョンの更新に与える影響を軽減します#48125 @ cfzjywxk
- 非バイナリ照合順序が設定され、クエリに
TiKV
PD
TiFlash
ツール
バックアップと復元 (BR)
TiCDC
- 並列度#10098 @ チャールズ・チュン96を増やすことで、TiCDC がオブジェクトstorageにデータを複製する際のパフォーマンスが向上します。
sink-uri構成#10106 @ 3エースショーハンドでcontent-compatible=true設定することにより、 TiCDC Canal-JSON コンテンツ フォーマット公式Canal出力のコンテンツ形式と互換性がある作成をサポートします。
TiDB データ移行 (DM)
TiDB Lightning
バグ修正
TiDB
- TiDBがパニックを起こしてエラーを報告する問題を修正
invalid memory address or nil pointer dereference#42739 @ CbcWestwolf - DDL
jobID0 #46296 @ ジフハウスに復元されたときに発生する TiDB ノードpanicの問題を修正しました - 同じクエリプランで、場合によっては#47634 @ キング・ディランの異なる
PLAN_DIGEST値が発生する問題を修正しました - DUALテーブルを最初のサブノードとして
UNION ALL実行するとエラー#48755 @ ウィノロスが発生する可能性がある問題を修正しました。 - 共通テーブル式 (CTE) を含むクエリで、
tidb_max_chunk_size小さい値#48808 @ グオシャオゲに設定されている場合にruntime error: index out of range [32] with length 32報告される問題を修正しました。 AUTO_ID_CACHE=1#46324 @ 天菜まお使用時の Goroutine リークの問題を修正- MPPで計算された
COUNT(INT)の結果が正しくない可能性がある問題を修正#48643 @ アイリンキッド - パーティション列タイプが
DATETIME#48814 @ crazycs520の場合にALTER TABLE ... LAST PARTITION実行が失敗する問題を修正しました - データの末尾にスペースが含まれている場合に
LIKEで_ワイルドカードを使用すると、クエリ結果が不正確になる可能性がある問題を修正しました#48983 @ 時間と運命 tidb_server_memory_limit#48741 @ 徐淮嶼による長期メモリ圧迫により TiDB の CPU 使用率が上昇する問題を修正ENUM型の列を結合キー#48991 @ ウィノロスとして使用した場合にクエリ結果が正しくない問題を修正しました- メモリ制限を超えたときに CTE を含むクエリが予期せず停止する問題を修正#49096 @ アイリンキッド
- 監査ログ用のエンタープライズプラグインを使用すると、TiDBサーバーが大量のリソースを消費する可能性がある問題を修正#49273 @ lcwangchao
- 特定のシナリオでオプティマイザがTiFlash選択パスを DUAL テーブルに誤って変換する問題を修正#49285 @ アイリンキッド
WITH RECURSIVECTE を含むUPDATEまたはDELETEステートメントで誤った結果が生成される可能性がある問題を修正しました#48969 @ ウィノロス- IndexHashJoin 演算子を含むクエリがメモリが
tidb_mem_quota_query#49033 @ 徐淮嶼を超えると停止する問題を修正しました - 非厳密モード(
sql_mode = '')で、INSERT実行中に切り捨てが行われても、 天菜まおでエラー#49369が報告される問題を修正しました。 - CTEクエリが再試行プロセス#46522 @ 天菜まお中にエラー
type assertion for CTEStorageMap failedを報告する可能性がある問題を修正しました - ネストされた
UNIONクエリ#49377 @ アイリンキッドでLIMITとORDER BY無効になる可能性がある問題を修正しました ENUMまたはSET種類の無効な値を解析すると、SQL ステートメント エラー#49487 @ ウィノロスが直接発生する問題を修正しました。- Golang の暗黙的な変換アルゴリズム#49801 @ qw4990によって発生する統計情報の構築における過剰な統計エラーの問題を修正しました
- 一部のタイムゾーン#49586 @ 金星の上で夏時間が正しく表示されない問題を修正
- テーブルが#48869 @ 天菜まおと多数ある場合に、テーブルが
AUTO_ID_CACHE=1の場合に gRPC クライアント リークが発生する可能性がある問題を修正しました。 - 正常なシャットダウン中に TiDBサーバーがpanic可能性がある問題を修正#36793 @ bb7133
CommonHandle#47687 @ 定義2014を含むテーブルを処理するときにADMIN RECOVER INDEXERROR 1105報告する問題を修正しましたALTER TABLE t PARTITION BY実行時に配置ルールを指定するとエラーERROR 8239#48630 @ ミョンスが報告される問題を修正しましたINFORMATION_SCHEMA.CLUSTER_INFOのSTART_TIME列目タイプが#45221 @ ドヴェーデンで有効ではない問題を修正INFORMATION_SCHEMA.COLUMNSの無効なEXTRA列目タイプがエラーData Too Long, field len 30, data len 45#42030 @ 接線を引き起こす問題を修正しましたIN (...)INFORMATION_SCHEMA.STATEMENTS_SUMMARY#33559 @ キング・ディランで異なるプランダイジェストを引き起こす問題を修正TIME型をYEAR型に変換すると、返される結果にTIMEと#48557年がヤンケオで混在する問題を修正しました。tidb_enable_collect_execution_info無効にするとコプロセッサキャッシュがpanicになる問題を修正#48212 @ あなた06shuffleExec予期せず終了すると TiDB がクラッシュする問題を修正#48230 @ wshwsh12- 静的
CALIBRATE RESOURCEPrometheusデータ#49174 @ 栄光に依存している問題を修正 - 日付に大きな間隔を加算すると誤った結果が返される問題を修正しました。修正後、無効な接頭辞または文字列
trueを含む間隔は0として扱われるようになり、MySQL 8.0 #49227 @ lcwangchaoと整合性が取れています。 ROW関数がnull型を誤って推論し、予期しないエラー#49015 @ wshwsh12が発生する問題を修正しました。ILIKE関数が一部のシナリオでデータ競合を引き起こす可能性がある問題を修正#49677 @ lcwangchaoSTREAM_AGG()CI #49902 @ wshwsh12を誤って処理したためにクエリ結果が正しくない問題を修正しました- バイトを
TIME#47346 @ wshwsh12に変換するときにエンコードが失敗する問題を修正しました CHECK制約のENFORCEDオプションの動作がMySQL 8.0 #47567 #47631 @ ジフハウスと一致しない問題を修正CHECK制約の DDL 文が#47632 @ ジフハウスでスタックする問題を修正しました- メモリ不足#47862 @ GMHDBJDにより DDL ステートメントのインデックス追加が失敗する問題を修正しました
ADD INDEX実行中にクラスタをアップグレードすると、データがインデックス#46306 @ ジムララと矛盾する可能性がある問題を修正しました。tidb_mem_quota_queryシステム変数を更新した後にADMIN CHECK実行するとERROR 8175#49258 @ 接線が返される問題を修正しましたALTER TABLE外部キーによって参照される列の型を変更すると、DECIMAL精度の変更がエラーとして報告されない問題を修正#49836 @ ヨシキポムALTER TABLE外部キーによって参照される列の型を変更すると、INTEGER長さの変更が誤ってエラーとして報告される問題を修正#47702 @ ヨシキポム- いくつかのシナリオで式インデックスが除数が 0 #50053 @ lcwangchaoであることを検出しない問題を修正しました
- 多数のテーブル#50077 @ ジムララを処理するときに TiDB ノードが OOM エラーに遭遇する可能性がある問題を軽減します。
- クラスタのローリング再起動#50073 @ 接線中に DDL が実行状態のままになる問題を修正しました
PointGetまたはBatchPointGet演算子を使用してパーティションテーブルのグローバルインデックスにアクセスすると結果が正しくなくなる可能性がある問題を修正しました#47539 @ L-メープル- 生成された列のインデックスが表示#47766 @ アイリンキッドに設定されている場合、MPP プランが選択されない可能性がある問題を修正しました。
LIMITOR型Index Merge#48588 @ アイリンキッドに押し下げられない可能性がある問題を修正しました- BRインポート#46527 @ qw4990後に
mysql.bind_infoテーブルに重複した組み込み行が存在する可能性がある問題を修正しました - パーティションが#48182 @ ハイラスティンに削除された後、パーティション化されたテーブルの統計が期待どおりに更新されない問題を修正しました
- パーティションテーブル#48713 @ ホーキングレイのグローバル統計の同時マージ中にエラーが返される可能性がある問題を修正しました。
- PADDING SPACE #48821 @ 時間と運命列のインデックス範囲スキャンに
LIKE演算子を使用するとクエリ結果が正しくなくなる可能性がある問題を修正しました。 - 生成された列がメモリ上で同時読み取りと書き込みを引き起こし、データ競合#44919 @ 接線が発生する可能性がある問題を修正しました。
WITH 0 TOPN(トップN統計を収集しないことを示す) が指定されている場合でも、ANALYZE TABLEトップ1統計を収集する可能性がある問題を修正#49080 @ ホーキングレイ- 不正なオプティマイザヒントによって有効なヒントが無効になる可能性がある問題を修正#49308 @ ホーキングレイ
- ハッシュパーティションテーブルの統計情報が、パーティションの追加、削除、再編成、または
TRUNCATEパーティション#48235 #48233 #48226 #48231 @ ハイラスティンを行ったときに、それに応じて更新されない問題を修正しました。 - 自動統計更新の時間枠を設定した後、その時間枠外でも統計が更新される可能性がある問題を修正#49552 @ ホーキングレイ
- パーティションテーブルを非パーティションテーブルに変換したときに古い統計情報が自動的に削除されない問題を修正#49547 @ ハイラスティン
TRUNCATE TABLE#49663 @ ハイラスティンを使用して非パーティションテーブルからデータをクリアしたときに古い統計が自動的に削除されない問題を修正しました- クエリがソートを強制するオプティマイザヒント(
STREAM_AGG()など)を使用し、その実行プランにIndexMerge#49605 @ アイリンキッドが含まれている場合、強制ソートが無効になる可能性がある問題を修正しました。 - ヒストグラムの境界に
NULL#49823 @ アイリンキッドが含まれている場合、ヒストグラム統計が読み取り可能な文字列に解析されない可能性がある問題を修正しました。 GROUP_CONCAT(ORDER BY)構文を含むクエリを実行するとエラー#49986 @ アイリンキッドが返される可能性がある問題を修正しましたSQL_MODEが厳密でない場合に、UPDATE、DELETE、INSERTステートメントが警告ではなくオーバーフローエラーを返す問題を修正しました#49137 @ ヤンケオ- テーブルに複数値インデックスと非バイナリ型文字列#49680 @ ヤンケオで構成される複合インデックスがある場合にデータを挿入できない問題を修正しました
- 複数レベルのネストされた
UNIONクエリのLIMIT無効になる可能性がある問題を修正しました#49874 @ 定義2014 - パーティションテーブルを
BETWEEN ... AND ...条件でクエリすると誤った結果が返される問題を修正#49842 @ 定義2014 REPLACE INTO文#34325 @ ヤンケオでヒントが使用できない問題を修正- ハッシュパーティションテーブル#50044 @ 定義2014をクエリするときに TiDB が間違ったパーティションを選択する可能性がある問題を修正しました
- 圧縮を有効にした状態でMariaDB Connector/Jを使用する際に発生する接続エラーを修正#49845 @ 猫のみ
- TiDBがパニックを起こしてエラーを報告する問題を修正
TiKV
- 破損した SST ファイルが他の TiKV ノードに広がり、TiKV がpanic#15986 @ コナー1996になる可能性がある問題を修正しました。
- オンラインアンセーフリカバリがマージ中止#15580 @ v01dstarを処理できない問題を修正
- #15817 @ コナー1996にスケールアウトするときに DR 自動同期のジョイント状態がタイムアウトする可能性がある問題を修正しました
- Titanの
blob-run-modeがオンライン#15978 @ トニー・シュッキに更新できない問題を修正 - 解決済みのTSが2時間ブロックされる可能性がある問題を修正#11847 #15520 #39130 @ 金星の上
notLeaderまたはregionNotFound#15712 @ HuSharpに遭遇するとフラッシュバックが停止する可能性がある問題を修正しました- TiKV の実行速度が非常に遅い場合、リージョン#16111と金星の上マージ後にpanicする可能性がある問題を修正しました。
- GC が期限切れのロック#15066 @ cfzjywxkをスキャンするときに、TiKV がメモリ内の悲観的ロックを読み取ることができない問題を修正しました
- Titan モニタリングの BLOB ファイルサイズが正しくない問題を修正#15971 @ コナー1996
- TiCDC を使用して大きなテーブルを複製すると、TiKV が OOM #16035 @ 金星の上になる可能性がある問題を修正しました。
DECIMAL算術乗算切り捨て#16268 @ ソロツグを処理するときに TiDB と TiKV が矛盾した結果を生成する可能性がある問題を修正しましたcast_duration_as_time誤った結果を返す可能性がある問題を修正#16211 @ ゲンリキ- TiKVがブラジルとエジプトのタイムゾーンを誤って変換する問題を修正#16220 @ 金星の上
- gRPC スレッドが
is_shutdown#16236 @ ピンギュをチェックしているときに TiKV がpanic可能性がある問題を修正しました
PD
TiFlash
- クエリ#8447 @ ジンヘリン中にTiFlash がメモリ制限に遭遇するとメモリリークが発生する問題を修正しました。
FLASHBACK DATABASE#8450 @ ジェイソン・ファンを実行した後もTiFlashレプリカのデータがガベージコレクションされる問題を修正しました- クエリ#8564 @ ジンヘリンの低速化によりメモリ使用量が大幅に増加する問題を修正
CREATE TABLEとDROP TABLE#1664 @ ジェイソン・ファンを頻繁に実行するシナリオで、一部のTiFlashレプリカデータがRECOVER TABLEまたはFLASHBACK TABLEで回復できない問題を修正しました。ColumnRef in (Literal, Func...)#8631 @ ロイド・ポティガーのようなフィルタリング条件でクエリを実行したときにクエリ結果が正しくない問題を修正しました- TiFlash が同時 DDL 実行中に競合に遭遇した場合のTiFlashpanic問題を修正#8578 @ ジェイソン・ファン
- 分散storageおよびコンピューティングアーキテクチャ#8519 @ ジェイソン・ファンで、 TiFlash がオブジェクトstorageデータの GC 所有者を選択できない可能性がある問題を修正しました。
lowerUTF8とupperUTF8関数で、大文字と小文字が異なるバイト#8484 @ ゲンリキを占めることができない問題を修正しました。ENUM値が0 #8311 @ ソロツグときにTiFlashがENUM誤って処理する問題を修正しましたINET_NTOA()式#8211 @ ソロツグの非互換性の問題を修正- ストリーム読み取り#8505 @ ゲンリキ中に複数のパーティション テーブルをスキャンするときに発生する可能性のある OOM 問題を修正しました。
- 短いクエリが正常に実行され、過剰な情報ログ#8592 @ ウィンドトーカーが出力される問題を修正しました。
- TiFlashが停止時にクラッシュする可能性がある問題を修正#8550 @ グオシャオゲ
- 定数文字列パラメータ#8604 @ ウィンドトーカーを含む
GREATESTまたはLEAST関数で発生する可能性のある、ランダムに無効なメモリアクセスの問題を修正しました。
ツール
バックアップと復元 (BR)
- BRが外部storageファイル#48452 @ 3エースショーハンドに対して誤ったURIを生成する問題を修正
- タスク初期化中にPDへの接続に失敗すると、ログバックアップタスクは開始できるが正常に動作しない問題を修正#16056 @ ユジュンセン
- ログバックアップタスクがメモリリークに遭遇し、起動後に正常に実行されない可能性がある問題を修正#16070 @ ユジュンセン
- PITRプロセス中にシステムテーブル
mysql.gc_delete_rangeにデータを挿入するとエラー#49346 @ リーヴルスが返される問題を修正しました。 - 古いバージョン#49466 @ 3ポイントシュートのバックアップからデータを復元するときに
Unsupported collationエラーが報告される問題を修正しました - 特定のシナリオでスナップショットを介してユーザーテーブルを回復した後に権限がタイムリーに更新されない問題を修正#49394 @ リーヴルス
TiCDC
- 特定のシナリオで
DELETEステートメントを複製するときに、WHERE句が主キーを条件として使用しない問題を修正しました#9812 @ アズドンメン - オブジェクトstorageサービス#10137 @ スドジにデータを複製するときに TiCDCサーバーがpanic可能性がある問題を修正しました
kv-client初期化#10095 @ 3エースショーハンド中に発生する可能性のあるデータ競合問題を修正- 特定の特殊なシナリオで TiCDC が TiKV との接続を誤って閉じる問題を修正#10239 @ ヒック
- アップストリーム#9739 @ ヒックで損失のある DDL 文を実行すると TiCDCサーバーがpanic可能性がある問題を修正しました。
- TiCDC が下流の MySQL #10334 @ 張金鵬87にデータを複製するときに
checkpoint-tsスタックする可能性がある問題を修正しました
- 特定のシナリオで
TiDB データ移行 (DM)
寄稿者
TiDB コミュニティからの以下の貢献者に感謝いたします。