TiDB 7.0.0 リリースノート
発売日:2023年3月30日
TiDBバージョン: 7.0.0- DMR
クイックアクセス: クイックスタート
v7.0.0-DMR の主な新機能と改善点は次のとおりです。
| カテゴリ | 特徴 | 説明 |
|---|---|---|
| スケーラビリティとパフォーマンス | セッション レベルの非準備 SQL プラン キャッシュ(実験的) | セッション レベルでプラン キャッシュを自動的に再利用することをサポートし、事前に準備ステートメントを手動で設定しなくても、コンパイルを減らし、同じ SQL パターンのクエリ時間を短縮します。 |
| TiFlash は、分散storageとコンピューティングアーキテクチャ、および S3 共有storage(実験的) をサポートします。 | TiFlash は、オプションとしてクラウドネイティブアーキテクチャを導入します。
| |
| 信頼性と可用性 | リソース制御の強化(実験的) | リソースグループを使用して、単一クラスタ内の様々なアプリケーションやワークロードにリソースを割り当て、分離できるようになりました。このリリースでは、TiDB は、異なるリソースバインディングモード(ユーザーレベル、セッションレベル、ステートメントレベル)とユーザー定義の優先順位のサポートを追加しました。さらに、コマンドを使用してリソースキャリブレーション(リソース全体の使用量の見積もり)を実行することもできます。 |
| TiFlashはディスクへの書き込みをサポート | TiFlash は、集計、ソート、ハッシュ結合などのデータ集約型操作における OOM を軽減するために、ディスクへの中間結果のスピルをサポートします。 | |
| SQL | 行レベルの TTL (GA) | 一定の期間を経過したデータを自動的に期限切れにすることで、データベース サイズの管理をサポートし、パフォーマンスを向上します。 |
LIST / RANGEパーティションの再編成 | REORGANIZE PARTITIONステートメントは、隣接するパーティションを結合したり、1 つのパーティションを複数のパーティションに分割したりするために使用でき、パーティション化されたテーブルの使いやすさが向上します。 | |
| DB操作と可観測性 | TiDB はLOAD DATAステートメントの機能を拡張します (実験的) | TiDB は、S3/GCS からのデータインポートのサポートなど、 LOAD DATA SQL ステートメントの機能を強化します。 |
| TiCDC はオブジェクトstorageシンク(GA) をサポートします | TiCDC は、Amazon S3、GCS、Azure Blob Storage、NFS などのオブジェクトstorageサービスへの行変更イベントの複製をサポートしています。 |
機能の詳細
スケーラビリティ
TiFlashは分散storageとコンピューティングアーキテクチャをサポートし、このアーキテクチャでオブジェクトstorageをサポートします(実験的) #6882 @ フロービーハッピー
v7.0.0より前のTiFlashは、storageとコンピューティングを組み合わせたアーキテクチャのみをサポートしています。このアーキテクチャでは、各TiFlashノードはstorageとコンピューティングノードの両方として機能し、コンピューティング機能とstorage機能を個別に拡張することはできません。また、 TiFlashノードはローカルstorageのみを使用できます。
v7.0.0 以降、 TiFlash は分散storageおよびコンピューティングアーキテクチャもサポートします。このアーキテクチャでは、 TiFlashノードは 2 種類(コンピューティングノードと書き込みノード)に分かれており、S3 API と互換性のあるオブジェクトstorageをサポートします。どちらの種類のノードも、コンピューティング容量またはstorage容量に合わせて個別に拡張できます。分散storageおよびコンピューティングアーキテクチャと、結合storageおよびコンピューティングアーキテクチャは、同じクラスター内で使用したり、相互に変換したりすることはできません。TiFlashをデプロイする際に、使用するアーキテクチャを設定できます。
詳細についてはドキュメント参照してください。
パフォーマンス
高速オンラインDDLとPITR #38045 @ リーヴルス間の互換性を実現
TiDB v6.5.0では、 高速オンラインDDL PITRと完全に互換性がありません。完全なデータバックアップを確実に行うには、まずPITRバックグラウンドバックアップタスクを停止し、Fast Online DDLを使用してインデックスを素早く追加してから、PITRバックアップタスクを再開することをお勧めします。
TiDB v7.0.0以降、Fast Online DDLとPITRは完全に互換性があります。PITRを介してクラスターデータをリストアする場合、ログバックアップ中にFast Online DDLによって追加されたインデックス操作は、互換性を確保するために自動的に再生されます。
詳細についてはドキュメント参照してください。
TiFlashは、null対応セミ結合演算子とnull対応アンチセミ結合演算子#6674 @ ゲンリチをサポートしています。
相関サブクエリで
IN、NOT IN、= ANY、または!= ALL演算子を使用する場合、TiDB はそれらをセミ結合またはアンチセミ結合に変換することで計算パフォーマンスを最適化します。結合キー列がNULLなる可能性がある場合は、 Null対応セミ結合やNull 認識アンチセミ結合などの null を認識する結合アルゴリズムが必要です。バージョン7.0.0より前のTiFlash、null対応セミ結合演算子とnull対応アンチセミ結合演算子をサポートしていないため、これらのサブクエリをTiFlashに直接プッシュダウンすることはできませんでした。バージョン7.0.0以降、 TiFlashはnull対応セミ結合演算子とnull対応アンチセミ結合演算子をサポートします。SQL文にこれらの相関サブクエリが含まれており、クエリ内のテーブルにTiFlashレプリカがあり、 MPPモード有効になっている場合、オプティマイザーはnull対応セミ結合演算子とnull対応アンチセミ結合演算子をTiFlashにプッシュダウンするかどうかを自動的に判断し、全体的なパフォーマンスを向上させます。
詳細についてはドキュメント参照してください。
TiFlashはFastScan(GA) #5252 @ ホンユニャンの使用をサポートします
TiFlash v6.3.0以降、FastScanは実験的機能として導入されました。v7.0.0では、この機能が一般公開されます。FastScanはシステム変数
tiflash_fastscan使用して有効化できます。この機能は、強力な一貫性を犠牲にすることで、テーブルスキャンのパフォーマンスを大幅に向上させます。対応するテーブルでUPDATEDELETE操作が含まれず、INSERT操作のみが含まれる場合、FastScanは強力な一貫性を維持し、スキャンパフォーマンスを向上させることができます。詳細についてはドキュメント参照してください。
TiFlash は遅延マテリアライゼーション (実験的) #5829 @ ロイド・ポティガーをサポートします
フィルタ条件(
WHERE節)を含むSELECT文を処理する際、 TiFlashはデフォルトでクエリに必要な列からすべてのデータを読み取り、クエリ条件に基づいてデータをフィルタリングおよび集計します。遅延マテリアライゼーションは、フィルタ条件の一部をTableScan演算子にプッシュダウンすることをサポートする最適化手法です。つまり、 TiFlashはまずプッシュダウンされたフィルタ条件に関連する列データをスキャンし、条件を満たす行をフィルタリングした後、これらの行の他の列データをスキャンしてさらなる計算を行います。これにより、データ処理におけるIOスキャンと計算を削減できます。TiFlash の遅延マテリアライゼーション機能はデフォルトでは有効になっていません。システム変数
tidb_opt_enable_late_materializationOFFに設定することで有効にできます。この機能を有効にすると、TiDB オプティマイザーは統計情報とフィルター条件に基づいて、プッシュダウンするフィルター条件を決定します。詳細についてはドキュメント参照してください。
非準備済みステートメントの実行プランのキャッシュをサポート(実験的) #36598 @ qw4990
実行プランキャッシュは同時実行OLTPの負荷容量向上に重要であり、TiDBはすでに準備された実行プランのキャッシュサポートしています。v7.0.0では、TiDBは非Prepareステートメントの実行プランもキャッシュできるようになり、実行プランキャッシュの範囲が拡大され、TiDBの同時処理容量が向上しました。
この機能はデフォルトで無効になっています。システム変数
tidb_enable_non_prepared_plan_cacheをONに設定することで有効にできます。安定性を考慮し、TiDB v7.0.0 では、準備されていない実行プランをキャッシュするための新しい領域が割り当てられており、キャッシュサイズはシステム変数tidb_non_prepared_plan_cache_size使用して設定できます。また、この機能にはSQL文に対する一定の制限があります。詳細については、 制限参照してください。詳細についてはドキュメント参照してください。
TiDBはサブクエリ#40219 @ fzzf678の実行プランのキャッシュ制約を削除します。
TiDB v7.0.0では、サブクエリの実行プランキャッシュ制約が削除されました。これにより、
SELECT * FROM t WHERE a > (SELECT ...)ようにサブクエリを含むSQL文の実行プランをキャッシュできるようになりました。この機能により、実行プランキャッシュの適用範囲がさらに拡大し、SQLクエリの実行効率が向上します。詳細についてはドキュメント参照してください。
TiKVは、ログリサイクル#14371 @ LykxSassinatorの空のログファイルの自動生成をサポートします。
TiKV v6.3.0では、書き込み負荷によるロングテールレイテンシーを削減する機能Raft丸太のリサイクル導入されました。しかし、ログリサイクルはRaftログファイルの数が一定の閾値に達した場合にのみ有効になるため、ユーザーがこの機能によるスループットの向上を直接体験することは困難です。
バージョン7.0.0では、ユーザーエクスペリエンスを向上させるために、新しい設定項目「
raft-engine.prefill-for-recycleが導入されました。この設定項目は、プロセス開始時にリサイクル用の空のログファイルを生成するかどうかを制御します。この設定を有効にすると、TiKVは初期化中に空のログファイルを自動的にバッチ処理し、初期化直後にログのリサイクルが有効になります。詳細についてはドキュメント参照してください。
ウィンドウ関数のパフォーマンスを向上させるために、TopN または Limit 演算子をウィンドウ関数から導出するサポート#13936 @ ウィンドトーカー
この機能はデフォルトで無効になっています。有効にするには、セッション変数tidb_opt_derive_topnを
ONに設定します。詳細についてはドキュメント参照してください。
高速オンライン DDL #40730 @ 接線による一意のインデックスの作成をサポート
TiDB v6.5.0は、Fast Online DDLによる通常のセカンダリインデックスの作成をサポートします。TiDB v7.0.0は、Fast Online DDLによるユニークインデックスの作成をサポートします。v6.1.0と比較して、大規模テーブルへのユニークインデックスの追加は、パフォーマンスの向上により数倍高速化されると予想されます。
詳細についてはドキュメント参照してください。
信頼性
リソース制御機能の強化(実験的) #38825 @ ノルーシュ @ 生まれ変わった人 @ 栄光 @ 天菜麻緒 @ コナー1996 @ Jmポテト @ ネス @ キャビンフィーバーB @ HuSharp
TiDBは、リソースグループに基づくリソース制御機能を強化しました。この機能により、TiDBクラスタのリソース利用効率とパフォーマンスが大幅に向上します。リソース制御機能の導入は、TiDBにとって画期的な出来事です。分散データベースクラスタを複数の論理ユニットに分割し、異なるデータベースユーザーを対応するリソースグループにマッピングし、必要に応じて各リソースグループのクォータを設定できます。クラスタリソースが制限されている場合、同じリソースグループ内のセッションで使用されるすべてのリソースはクォータに制限されます。これにより、あるリソースグループが過剰に消費されても、他のリソースグループのセッションには影響がありません。
この機能により、異なるシステムの複数の中小規模アプリケーションを単一のTiDBクラスタに統合できます。アプリケーションのワークロードが増加しても、他のアプリケーションの正常な動作に影響を与えることはありません。システムのワークロードが低い場合は、設定されたクォータを超えても、高負荷のアプリケーションに必要なシステムリソースを割り当てることができるため、リソースを最大限に活用できます。さらに、リソース制御機能を合理的に活用することで、クラスタ数を削減し、運用・保守の難易度を軽減し、管理コストを削減できます。
この機能は、Grafanaのリソースの実際の使用状況を把握できる組み込みのリソース管理ダッシュボードを提供し、より合理的なリソース割り当てを支援します。また、セッションレベルとステートメントレベル(ヒント)の両方に基づいた動的なリソース管理機能もサポートしています。この機能の導入により、TiDBクラスターのリソース使用状況をより正確に制御し、実際のニーズに基づいてクォータを動的に調整できるようになります。
TiDB v7.0.0では、リソースグループに絶対的なスケジューリング優先度(
PRIORITY)を設定できるようになりました。これにより、重要なサービスが確実にリソースを確保できるようになります。また、リソースグループの設定方法も拡張されます。リソース グループは次のように使用できます。
- ユーザーレベル。1または
CREATE USERALTER USERステートメントを使用して、ユーザーを特定のリソースグループにバインドします。リソースグループをユーザーにバインドすると、ユーザーが新たに作成したセッションは、対応するリソースグループに自動的にバインドされます。 - セッションレベル。1 を介して現在の
SET RESOURCE GROUPで使用されるリソースグループを設定します。 - ステートメントレベル
RESOURCE_GROUP()を介して現在のステートメントで使用されるリソースグループを設定します。
詳細についてはドキュメント参照してください。
- ユーザーレベル。1または
高速オンラインDDLのチェックポイントメカニズムをサポートし、フォールトトレランスと自動リカバリ機能を向上させます#42164 @ 接線
TiDB v7.0.0では、 高速オンラインDDLにチェックポイント機構が導入され、フォールトトレランスと自動リカバリ機能が大幅に向上しました。DDLの進行状況を定期的に記録・同期することで、TiDB DDLオーナーの障害発生時や切り替え時でも、実行中のDDL操作を高速オンラインDDLモードで継続実行できます。これにより、DDLの実行がより安定し、効率的になります。
詳細についてはドキュメント参照してください。
TiFlashはディスク#6528 @ ウィンドトーカーへのスピルをサポート
実行パフォーマンスを向上させるため、 TiFlashは可能な限りデータ全体をメモリ内で実行します。データ量がメモリの総容量を超えると、メモリ不足によるシステムクラッシュを回避するため、 TiFlashはクエリを終了します。そのため、 TiFlashが処理できるデータ量は、利用可能なメモリによって制限されます。
TiFlash v7.0.0以降、ディスクへの書き込みがサポートされます。演算子(
tidb_max_bytes_before_tiflash_external_group_by)のメモリ使用量のしきい値を調整することで、演算子が使用できるメモリの最大量を制御できます。演算子が使用するメモリがしきい値を超えると、自動的にデータがディスクに書き込まれます。これによりパフォーマンスは多少犠牲tidb_max_bytes_before_tiflash_external_jointidb_max_bytes_before_tiflash_external_sortますが、より多くのデータを処理できるようになります。詳細についてはドキュメント参照してください。
統計収集の効率を向上#41930 @ xuyifangreeneyes
TiDB v7.0.0では、統計収集ロジックがさらに最適化され、収集時間が約25%短縮されました。この最適化により、大規模データベースクラスターの運用効率と安定性が向上し、統計収集がクラスターのパフォーマンスに与える影響が軽減されます。
MPP最適化#39710 @ 思い出させるに新しいオプティマイザーヒントを追加
v7.0.0 では、TiDB は MPP 実行プランの生成に影響を与える一連のオプティマイザーヒントを追加します。
SHUFFLE_JOIN(): MPP に有効です。指定されたテーブルに対してシャッフル結合アルゴリズムを使用するようオプティマイザに指示します。BROADCAST_JOIN(): MPP に有効です。指定されたテーブルに対してブロードキャスト結合アルゴリズムを使用するようオプティマイザに指示します。MPP_1PHASE_AGG(): MPP に有効です。指定されたクエリブロック内のすべての集計関数に対して、1 フェーズ集計アルゴリズムを使用するようにオプティマイザに指示します。MPP_2PHASE_AGG(): MPP に有効です。指定されたクエリブロック内のすべての集計関数に対して、2 フェーズ集計アルゴリズムを使用するようにオプティマイザに指示します。
MPP オプティマイザーヒントは、HTAP クエリに介入して、HTAP ワークロードのパフォーマンスと安定性を向上させるのに役立ちます。
詳細についてはドキュメント参照してください。
オプティマイザヒントは結合方法と結合順序の指定をサポートします#36600 @ 思い出させる
バージョン7.0.0では、オプティマイザヒント
LEADING()結合方法に影響を与えるヒントと組み合わせて使用でき、それらの動作は互換性があります。複数テーブルの結合の場合、最適な結合方法と結合順序を効果的に指定できるため、実行プランに対するオプティマイザヒントの制御が強化されます。新しいヒントの動作には若干の変更があります。前方互換性を確保するため、TiDB ではシステム変数
tidb_opt_advanced_join_hintが導入されています。この変数をOFFに設定すると、オプティマイザーヒントの動作は以前のバージョンと互換性があります。クラスターを以前のバージョンから v7.0.0 以降にアップグレードすると、この変数はOFFに設定されます。より柔軟なヒント動作を得るには、動作によってパフォーマンスの低下が発生しないことを確認した上で、この変数をONに設定することを強くお勧めします。詳細についてはドキュメント参照してください。
可用性
prefer-leaderオプションをサポートすることで、読み取り操作の可用性が向上し、不安定なネットワーク状況での応答レイテンシーが短縮されます#40905 @ リクックスサシネーターTiDBのデータ読み取り動作は、システム変数
tidb_replica_read介して制御できます。バージョン7.0.0では、この変数にprefer-leaderオプションが追加されました。変数をprefer-leaderに設定すると、TiDBはリーダーレプリカを優先的に選択して読み取り操作を実行します。ディスクやネットワークのパフォーマンス変動などにより、リーダーレプリカの処理速度が大幅に低下した場合、TiDBは利用可能な他のフォロワーレプリカを選択して読み取り操作を実行するため、可用性が向上し、応答レイテンシーが短縮されます。詳細についてはドキュメント参照してください。
SQL
有効期限(TTL)は、通常#39262 @ lcwangchao @ ヤンケオで利用可能です
TTLは行レベルのライフサイクル制御ポリシーを提供します。TiDBでは、TTL属性が設定されたテーブルは、設定に基づいて期限切れの行データを自動的にチェックし、削除します。TTLの目的は、ユーザーが不要なデータを定期的に適切なタイミングでクリーンアップし、クラスターワークロードへの影響を最小限に抑えることです。
詳細についてはドキュメント参照してください。
サポート
ALTER TABLE…REORGANIZE PARTITION15000番 @ ミョンスTiDBは
ALTER TABLE...REORGANIZE PARTITION構文をサポートしています。この構文を使用すると、データを失うことなく、テーブルのパーティションの一部またはすべてを再編成(マージ、分割、その他の変更を含む)できます。詳細についてはドキュメント参照してください。
TiDBはキーパーティショニングをサポートするようになりました。キーパーティショニングとハッシュパーティショニングはどちらも、データを一定数のパーティションに均等に分散できます。ただし、ハッシュパーティショニングは指定された整数式または整数列に基づくデータの分散のみをサポートするのに対し、キーパーティショニングは列リストに基づくデータの分散をサポートし、キーパーティショニングのパーティション列は整数型に限定されません。
詳細についてはドキュメント参照してください。
DB操作
TiCDC は、変更データをstorageサービスに複製することをサポートします (GA) #6797 @ ジャオシンユ
TiCDCは、Amazon S3、GCS、Azure Blob Storage、NFS、その他のS3互換storageサービスへの変更データのレプリケーションをサポートしています。ストレージサービスは価格が手頃で使いやすいです。Kafkaを使用していない場合は、storageサービスをご利用いただけます。TiCDCは変更ログをファイルに保存し、代わりにstorageサービスに送信します。storageサービスから、独自のコンシューマープログラムは新しく生成された変更ログファイルを定期的に読み取ることができます。現在、TiCDCはcanal-json形式とCSV形式の変更ログをstorageサービスにレプリケーションすることをサポートしています。
詳細についてはドキュメント参照してください。
TiCDCはOpenAPI v2を提供します。OpenAPI v1と比較して、OpenAPI v2はレプリケーションタスクに対するより包括的なサポートを提供します。TiCDC OpenAPIが提供する機能は、
cdc cliツールのサブセットです。OpenAPI v2を介して、TiCDCノードのステータスの取得、クラスターのヘルスステータスの確認、レプリケーションタスクの管理など、TiCDCクラスターのクエリと操作を行うことができます。詳細についてはドキュメント参照してください。
DBeaver v23.0.1 はデフォルトで TiDB をサポートします#17396 @ アイスマップ
- 独立した TiDB モジュール、アイコン、ロゴを提供します。
- デフォルト構成ではTiDB Cloudスターターサポートされているため、 TiDB Cloud Starter への接続が容易になります。
- 外部キー タブを表示または非表示にするために TiDB バージョンの識別をサポートします。
EXPLAIN結果で SQL 実行プランの視覚化をサポートします。PESSIMISTIC、OPTIMISTIC、AUTO_RANDOM、PLACEMENT、POLICY、REORGANIZE、EXCHANGE、CACHE、NONCLUSTERED、CLUSTEREDなどの TiDB キーワードの強調表示をサポートします。TIDB_BOUNDED_STALENESSTIDB_PARSE_TSOのTIDB_VERSION関数のTIDB_DECODE_PLAN表示TIDB_DECODE_KEYサポートTIDB_DECODE_SQL_DIGESTSTIDB_SHARDTIDB_IS_DDL_OWNER
詳細についてはDBeaver ドキュメント参照してください。
データ移行
LOAD DATAステートメントの機能を強化し、クラウドstorageからのデータのインポートをサポートします (実験的) #40499 @ ランス6716TiDB v7.0.0 より前のバージョンでは、
LOAD DATAステートメントはクライアント側からのデータファイルのインポートのみが可能でした。クラウドstorageからデータをインポートするには、 TiDB Lightningを使用する必要がありました。しかし、 TiDB Lightning を別途導入すると、導入コストと管理コストが増加します。v7.0.0 では、LOAD DATAステートメントを使用してクラウドstorageから直接データをインポートできます。この機能の例を以下に示します。- Amazon S3およびGoogle Cloud StorageからTiDBへのデータのインポートをサポートします。ワイルドカードを使用して、複数のソースファイルを一度にTiDBにインポートできます。
DEFINED NULL BYを使用して null を定義することをサポートします。- CSV および TSV 形式のソース ファイルをサポートします。
詳細についてはドキュメント参照してください。
TiDB Lightningは、 TiKV(GA) #41163 @ 眠そうなモグラにキーと値のペアを送信するときに圧縮転送を有効にすることをサポートします。
v6.6.0以降、 TiDB Lightningは、ローカルでエンコードおよびソートされたキーと値のペアをTiKVに送信する際に、ネットワーク転送用に圧縮することをサポートします。これにより、ネットワーク経由で転送されるデータ量が削減され、ネットワーク帯域幅のオーバーヘッドが低減されます。この機能がサポートされる以前のTiDBバージョンでは、 TiDB Lightningは比較的高いネットワーク帯域幅を必要とし、大量のデータを扱う場合には高額なトラフィック料金が発生していました。
この機能はv7.0.0でGAとなり、デフォルトで無効になっています。有効にするには、 TiDB Lightningの設定項目
compress-kv-pairs"gzip"または"gz"に設定してください。詳細についてはドキュメント参照してください。
互換性の変更
注記:
このセクションでは、v6.6.0から最新バージョン(v7.0.0)にアップグレードする際に知っておくべき互換性の変更点について説明します。v6.5.0以前のバージョンから最新バージョンにアップグレードする場合は、中間バージョンで導入された互換性の変更点も確認する必要があるかもしれません。
MySQLの互換性
TiDBは、自動インクリメント列のインデックスが#40580 @ 天菜麻緒でなければならないという制約を削除します。
バージョン7.0.0より前のTiDBの動作はMySQLと一貫性があり、自動インクリメント列はインデックスまたはインデックスプレフィックスである必要があります。バージョン7.0.0以降、TiDBは自動インクリメント列がインデックスまたはインデックスプレフィックスである必要があるという制約を削除します。これにより、テーブルの主キーをより柔軟に定義し、自動インクリメント列を使用してソートやページネーションをより便利に実装できるようになります。また、自動インクリメント列に起因する書き込みホットスポットの問題を回避し、クラスター化インデックスを持つテーブルを使用することでクエリパフォーマンスを向上させます。新しいリリースでは、次の構文を使用してテーブルを作成できます。
CREATE TABLE test1 ( `id` int(11) NOT NULL AUTO_INCREMENT, `k` int(11) NOT NULL DEFAULT '0', `c` char(120) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', PRIMARY KEY(`k`, `id`) );この機能は TiCDC データレプリケーションには影響しません。
詳細についてはドキュメント参照してください。
TiDB は、次の例に示すように、キー パーティションをサポートしています。
CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE DEFAULT '9999-12-31', job_code INT, store_id INT) PARTITION BY KEY(store_id) PARTITIONS 4;TiDBはv7.0.0以降、キーパーティションをサポートし、MySQL
PARTITION BY LINEAR KEY構文を解析できます。ただし、TiDBはLINEARキーワードを無視し、代わりに非線形ハッシュアルゴリズムを使用します。現在、パーティションタイプKEYでは、パーティション列リストが空であるパーティションステートメントはサポートされていません。詳細についてはドキュメント参照してください。
行動の変化
TiCDCは、Avro #8490 @ 3エースショーハンドで
FLOATデータのエンコードが正しくない問題を修正しました。TiCDC クラスターを v7.0.0 にアップグレードする際、Avro を使用してレプリケートされたテーブルに
FLOATデータ型が含まれている場合は、アップグレード前に Confluent Schema Registry の互換性ポリシーを手動でNoneに調整し、changefeed がスキーマを正常に更新できるようにする必要があります。そうしないと、アップグレード後に changefeed がスキーマを更新できなくなり、エラー状態になります。v7.0.0 以降、
tidb_dml_batch_sizeシステム変数はLOAD DATAステートメントでは有効になりません。
システム変数
| 変数名 | タイプを変更 | 説明 |
|---|---|---|
tidb_pessimistic_txn_aggressive_locking | 削除済み | この変数の名前はtidb_pessimistic_txn_fair_lockingに変更されます。 |
tidb_enable_non_prepared_plan_cache | 修正済み | v7.0.0 から有効になり、 準備されていないプランキャッシュ機能を有効にするかどうかを制御します。 |
tidb_enable_null_aware_anti_join | 修正済み | さらにテストを行った後、デフォルト値をOFFからONに変更します。つまり、デフォルトで特殊セット演算子NOT INおよび!= ALLで始まるサブクエリによってアンチ結合が生成される場合、TiDB は Null 対応ハッシュ結合を適用します。 |
tidb_enable_resource_control | 修正済み | デフォルト値をOFFからONに変更します。これにより、クラスターはデフォルトでリソースをリソースグループごとに分離します。リソース制御はバージョン7.0.0ではデフォルトで有効になっているため、この機能はいつでも使用できます。 |
tidb_non_prepared_plan_cache_size | 修正済み | v7.0.0 から有効になり、キャッシュできる実行プランの最大数を準備されていないプランキャッシュで制御します。 |
tidb_rc_read_check_ts | 修正済み | バージョン 7.0.0 以降、この変数は、プリペアドステートメントプロトコルのカーソル フェッチ読み取りには効果がありません。 |
tidb_enable_inl_join_inner_multi_pattern | 新しく追加された | この変数は、内部テーブルにSelectionまたはProjection演算子がある場合にインデックス結合がサポートされるかどうかを制御します。 |
tidb_enable_plan_cache_for_subquery | 新しく追加された | この変数は、プリペアドプランキャッシュがサブクエリを含むクエリをキャッシュするかどうかを制御します。 |
tidb_enable_plan_replayer_continuous_capture | 新しく追加された | この変数は、 PLAN REPLAYER CONTINUOUS CAPTURE機能を有効にするかどうかを制御します。デフォルト値OFF 、この機能を無効にすることを意味します。 |
tidb_load_based_replica_read_threshold | 新しく追加された | この変数は、負荷ベースのレプリカ読み取りをトリガーするためのしきい値を設定します。この変数で制御される機能は、TiDB v7.0.0では完全には機能しません。デフォルト値を変更しないでください。 |
tidb_opt_advanced_join_hint | 新しく追加された | この変数は、結合方法のヒントが結合順序の最適化に影響を与えるかどうかを制御します。デフォルト値はONで、新しい互換制御モードが使用されることを意味します。値OFF 、バージョン7.0.0より前の動作が使用されることを意味します。前方互換性のため、クラスターが以前のバージョンからバージョン7.0.0以降にアップグレードされた場合、この変数の値はOFFに設定されます。 |
tidb_opt_derive_topn | 新しく追加された | この変数は、最適化ルールウィンドウ関数からTopNまたはLimitを導出する有効にするかどうかを制御します。デフォルト値はOFFで、最適化ルールは無効です。 |
tidb_opt_enable_late_materialization | 新しく追加された | この変数は、 TiFlash遅延実体化機能を有効にするかどうかを制御します。デフォルト値はOFFで、この機能は無効です。 |
tidb_opt_ordering_index_selectivity_threshold | 新しく追加された | この変数は、SQL ステートメントにORDER BYおよびLIMIT句が含まれ、フィルタリング条件がある場合に、オプティマイザーがインデックスを選択する方法を制御します。 |
tidb_pessimistic_txn_fair_locking | 新しく追加された | 単一行競合シナリオにおけるトランザクションのテールレイテンシーを削減するために、拡張悲観的ロックウェイキングモデルを有効にするかどうかを制御します。デフォルト値はONです。クラスターを以前のバージョンからv7.0.0以降にアップグレードすると、この変数の値はOFFに設定されます。 |
tidb_slow_txn_log_threshold | 新しく追加された | 低速トランザクションログのしきい値を設定します。トランザクションの実行時間がこのしきい値を超えると、TiDBはトランザクションに関する詳細情報をログに記録します。デフォルト値の0 、この機能が無効であることを意味します。 |
tidb_ttl_running_tasks | 新しく追加された | この変数は、クラスター全体のTTLタスクの同時実行数を制限するために使用されます。デフォルト値の-1 、TTLタスクがTiKVノードの数と同じであることを意味します。 |
コンフィグレーションファイルのパラメータ
| コンフィグレーションファイル | コンフィグレーションパラメータ | タイプを変更 | 説明 |
|---|---|---|---|
| TiKV | server.snap-max-write-bytes-per-sec | 削除済み | このパラメータの名前はserver.snap-io-max-bytes-per-secに変更されます。 |
| TiKV | raft-engine.enable-log-recycle | 修正済み | デフォルト値はfalseからtrueに変更されます。 |
| TiKV | resolved-ts.advance-ts-interval | 修正済み | デフォルト値は"1s"から"20s"に変更されます。この変更により、Resolved TS の定期的な進行間隔が長くなり、TiKV ノード間のトラフィック消費量が削減されます。 |
| TiKV | resource-control.enabled | 修正済み | デフォルト値はfalseからtrueに変更されます。 |
| TiKV | raft-engine.prefill-for-recycle | 新しく追加された | Raft Engineのログリサイクル用に空のログファイルを生成するかどうかを制御します。デフォルト値はfalseです。 |
| PD | degraded-mode-wait-duration | 新しく追加された | リソース管理関連の設定項目です。縮退モードをトリガーするまでの待機時間を制御します。デフォルト値は0sです。 |
| PD | read-base-cost | 新しく追加された | リソース管理関連の設定項目です。読み取り要求から RU への変換における基準係数を制御します。デフォルト値は0.25です。 |
| PD | read-cost-per-byte | 新しく追加された | リソース管理関連の設定項目です。読み取りフローから RU への変換の基準係数を制御します。デフォルト値は1/ (64 * 1024)です。 |
| PD | read-cpu-ms-cost | 新しく追加された | リソース管理に関連する設定項目です。CPUからRUへの変換における基準係数を制御します。デフォルト値は1/3です。 |
| PD | write-base-cost | 新しく追加された | リソース管理関連の設定項目です。書き込み要求から RU への変換における基準係数を制御します。デフォルト値は1です。 |
| PD | write-cost-per-byte | 新しく追加された | リソース管理関連の設定項目です。書き込みフローから RU への変換の基準係数を制御します。デフォルト値は1/1024です。 |
| TiFlash | mark_cache_size | 修正済み | 不要なメモリ使用量を削減するために、 TiFlashのデータ ブロックのメタデータのデフォルトのキャッシュ制限を5368709120から1073741824に変更します。 |
| TiFlash | minmax_index_cache_size | 修正済み | 不要なメモリ使用量を削減するために、 TiFlashのデータ ブロックの最小最大インデックスのデフォルトのキャッシュ制限を5368709120から1073741824に変更します。 |
| TiFlash | flash.disaggregated_mode | 新しく追加された | TiFlashの分散アーキテクチャにおいて、このTiFlashノードが書き込みノードか計算ノードかを示します。値はtiflash_writeまたはtiflash_computeです。 |
| TiFlash | storage.s3.endpoint | 新しく追加された | S3 に接続するエンドポイント。 |
| TiFlash | storage.s3.bucket | 新しく追加された | TiFlash がすべてのデータを保存するバケット。 |
| TiFlash | storage.s3.root | 新しく追加された | S3 バケット内のデータstorageのルート ディレクトリ。 |
| TiFlash | storage.s3.access_key_id | 新しく追加された | S3 にアクセスする場合はACCESS_KEY_ID 。 |
| TiFlash | storage.s3.secret_access_key | 新しく追加された | S3 にアクセスする場合はSECRET_ACCESS_KEY 。 |
| TiFlash | storage.remote.cache.dir | 新しく追加された | TiFlashコンピューティング ノードのローカル データ キャッシュ ディレクトリ。 |
| TiFlash | storage.remote.cache.capacity | 新しく追加された | TiFlashコンピューティング ノードのローカル データ キャッシュ ディレクトリのサイズ。 |
| TiDB Lightning | add-index-by-sql | 新しく追加された | 物理インポートモードでSQLを使用してインデックスを追加するかどうかを制御します。デフォルト値はfalseで、 TiDB Lightningデータとインデックスデータの両方をKVペアにエンコードし、それらをまとめてTiKVにインポートします。SQLを使用してインデックスを追加する利点は、データのインポートとインデックスのインポートを分離することで、データを迅速にインポートできることです。データのインポート後にインデックスの作成に失敗しても、データの整合性は影響を受けません。 |
| TiCDC | enable-table-across-nodes | 新しく追加された | リージョン数に応じて、テーブルを複数の同期範囲に分割するかどうかを決定します。これらの範囲は、複数のTiCDCノードによって複製できます。 |
| TiCDC | region-threshold | 新しく追加された | enable-table-across-nodes有効になっている場合、この機能はregion-threshold以上のリージョンを持つテーブルにのみ適用されます。 |
| DM | analyze | 新しく追加された | CHECKSUMが完了した後"optional"各テーブルでANALYZE TABLE <table>操作を実行するかどうかを制御します。3 / "required" / "off"に設定できます。デフォルト値は"optional"です。 |
| DM | range-concurrency | 新しく追加された | dm-worker が KV データを TiKV に書き込む同時実行を制御します。 |
| DM | compress-kv-pairs | 新しく追加された | dm-workerがTiKVにKVデータを送信する際、圧縮を有効にするかどうかを制御します。現在、gzipのみがサポートされています。デフォルト値は空で、圧縮なしを意味します。 |
| DM | pd-addr | 新しく追加された | 物理インポートモードにおける下流PDサーバーのアドレスを制御します。1つまたは複数のPDサーバーを指定できます。この設定項目が空の場合、デフォルトでTiDBクエリから取得したPDアドレス情報が使用されます。 |
改善点
ティドブ
EXPAND演算子を導入して、1 つのSELECTステートメントに複数のDISTINCT含まれる SQL クエリのパフォーマンスを最適化します#16581 @ アイリンキッド- インデックス結合#40505 @ イーサールより多くの SQL 形式をサポート
- TiDB でパーティションテーブルデータをグローバルにソートすることを避ける必要がある場合#26166 @ 定義2014
fair lock modeとlock only if exists同時に使用してサポート#42068 @ ミョンケミンタ- トランザクションのスローログとトランザクション内部イベントの印刷をサポート#41863 @ エキシウム
ILIKEオペレーター#40943 @ xzhangxian1008をサポート
PD
TiFlash
ツール
TiCDC
Kafka がダウンストリームであるシナリオで、単一の大きなテーブルのデータ変更を複数の TiCDC ノードに分散することをサポートし、大規模な TiDB クラスター#8247 @ 金星の上のデータ統合シナリオにおける単一テーブルのスケーラビリティの問題を解決します。
この機能を有効にするには、TiCDC 設定項目
enable_table_across_nodesをtrueに設定します。5region_threshold指定すると、テーブルのリージョン数がこのしきい値を超えると、TiCDC は対応するテーブルのデータ変更を複数の TiCDC ノードに分散し始めます。災害復旧シナリオにおけるスループットの向上とRTOの短縮のために、REDOアプライヤでのトランザクション分割をサポートする#8318 @ チャールズ・チャン96
テーブルスケジュールを改善し、単一のテーブルをさまざまな TiCDC ノード#8247 @ 金星の上に均等に分割します。
リージョンに複数のテーブル#6346 @ 金星の上のデータが含まれているシナリオで、TiKV ノードと TiCDC ノード間のネットワーク トラフィックを削減します。
REDOログ#8361 @ チャールズ・チャン96へのDDLイベントの適用をサポート
アップストリーム書き込みスループット#7720 @ 金星の上に基づいて、TiCDC ノードへのテーブルの分割とスケジュールをサポートします。
TiDB Lightning
TiDB Lightning物理インポートモードは、データのインポートとインデックスのインポートを分離して、インポート速度と安定性を向上させます#42132 @ 眠そうなモグラ
パラメータ
add-index-by-sqlを追加します。デフォルト値はfalseで、これはTiDB Lightningが行データとインデックスデータの両方をKVペアにエンコードし、それらをまとめてTiKVにインポートすることを意味します。trueに設定すると、 TiDB Lightningデータをインポートした後、SQL文ADD INDEXを介してインデックスを追加し、インポート速度と安定性を向上させます。tikv-importer.keyspace-nameパラメータを追加します。デフォルト値は空文字列で、 TiDB Lightning はデータのインポート時に、対応するテナントのキースペース名を自動的に取得します。値を指定すると、指定されたキースペース名がデータのインポートに使用されます。このパラメータは、マルチテナント TiDB クラスタにデータをインポートする際のTiDB Lightningの設定を柔軟にします#41915 @ リチュンジュ
バグ修正
ティドブ
- TiDBをv6.5.1からそれ以降のバージョン#41502 @ クリサンにアップグレードする際に更新が失われる問題を修正しました
- #41423 @ crazycs520にアップグレードした後、一部のシステム変数のデフォルト値が変更されない問題を修正しました
- インデックスの追加に関連するコプロセッサー要求タイプが不明#41400 @ 接線として表示される問題を修正しました
- インデックス#41515 @ 接線を追加するときに「PessimisticLockNotFound」が返される問題を修正しました
- ユニークインデックス#41630 @ 接線を追加したときに誤って
found duplicate key返す問題を修正しました - インデックス#41880 @ 接線を追加するときに発生するpanic問題を修正しました
- 実行中にTiFlash が生成された列に対してエラーを報告する問題を修正#40663 @ グオシャオゲ
- 時間タイプ#41938 @ xuyifangreeneyesがある場合にTiDBが統計を正しく取得できない可能性がある問題を修正しました
- 準備済みプランキャッシュが有効になっている場合にフルインデックススキャンでエラーが発生する可能性がある問題を修正#42150 @ fzzf678
IFNULL(NOT NULL COLUMN, ...)誤った結果を返す可能性がある問題を修正#41734 @ リトルフォール- パーティションテーブル内のすべてのデータが単一のリージョン#41801 @ 定義2014にある場合に TiDB が誤った結果を生成する可能性がある問題を修正しました。
- 単一のSQL文に異なるパーティションテーブルが出現した場合にTiDBが誤った結果を生成する可能性がある問題を修正#42135 @ ミョンス
- パーティションテーブル#41638 @ xuyifangreeneyesに新しいインデックスを追加した後、パーティションパーティションテーブルで統計の自動収集が正しくトリガーされない可能性がある問題を修正しました。
- 統計を2回連続して収集した後にTiDBが誤った列統計情報を読み取る可能性がある問題を修正#42073 @ xuyifangreeneyes
- 準備プランキャッシュが有効になっている場合に IndexMerge が誤った結果を生成する可能性がある問題を修正#41828 @ qw4990
- IndexMerge で goroutine リークが発生する可能性がある問題を修正#41605 @ グオシャオゲ
- BIGINT 以外の符号なし整数が文字列/小数点#41736 @ リトルフォールと比較されたときに誤った結果を生成する可能性がある問題を修正しました
- メモリ制限超過により前の
ANALYZEステートメントを強制終了すると、同じセッション内の現在のANALYZEステートメントが#41825 @ 徐淮嶼で強制終了される可能性がある問題を修正しました。 - バッチコプロセッサ#41412 @ あなた06の情報収集プロセス中にデータ競合が発生する可能性がある問題を修正しました
- アサーションエラーによりパーティションテーブル#40629 @ エキシウム MVCC 情報が印刷されない問題を修正しました
- フェアロックモードで存在しないキー#41527 @ エキシウムにロックが追加される問題を修正
INSERT IGNOREとREPLACEステートメントが値#42121 @ ジグアンを変更しないキーをロックしない問題を修正しました
PD
TiFlash
ツール
バックアップと復元 (BR)
TiCDC
- 変更フィードを再開するとデータが失われる可能性がある、またはチェックポイントが#8242 @ 金星の上に進めない問題を修正しました。
- DDLシンク#8238 @ 3エースショーハンドのデータ競合問題を修正
stoppedステータスの変更フィードが自動的に再起動する可能性がある問題を修正#8330 @ スドジ- すべての下流 Kafka サーバーが利用できない場合に TiCDCサーバーがパニックになる問題を修正#8523 @ 3エースショーハンド
- ダウンストリームがMySQLで実行されたステートメントがTiDB #8453 @ アズドンメンと互換性がない場合にデータが失われる可能性がある問題を修正しました
- ローリングアップグレードによって TiCDC OOM が発生したり、チェックポイントが#8329 @ 金星の上で停止したりする可能性がある問題を修正しました。
- Kubernetes #8484 @ 金星の上で TiCDC クラスターの正常なアップグレードが失敗する問題を修正しました
TiDB データ移行 (DM)
- DM ワーカー ノードが Google Cloud Storage を使用する場合、ブレークポイントが頻繁すぎると、Google Cloud Storage のリクエスト頻度の制限に達し、DM ワーカーが Google Cloud Storage にデータを書き込むことができず、完全なデータの読み込みに失敗する問題を修正しました#8482 @ マックスシュアン
- 複数の DM タスクが同じダウンストリーム データを同時に複製し、すべてがダウンストリーム メタデータ テーブルを使用してブレークポイント情報を記録すると、すべてのタスクのブレークポイント情報が同じメタデータ テーブルに書き込まれ、同じタスク ID #8500 @ マックスシュアンが使用される問題を修正しました。
TiDB Lightning
寄稿者
TiDB コミュニティの以下の貢献者に感謝いたします。