TiDB 5.4 リリースノート
発売日:2022年2月15日
TiDB バージョン: 5.4.0
バージョン5.4における主な新機能または改善点は以下のとおりです。
- GBK文字セットをサポート
- インデックスマージを使用してデータにアクセスすることをサポートします。これは、複数の列のインデックスのフィルタリング結果をマージします。
- セッション変数を使用して古いデータを読み取ることをサポートする
- 統計情報を収集するための設定を永続化する機能をサポートする
- TiKVのログストレージエンジンとしてRaft Engineを使用することをサポートする(実験的)
- バックアップがクラスタに与える影響を最適化する
- バックアップストレージとしてAzure Blobストレージの使用をサポートします。
- TiFlashおよびMPPエンジンの安定性と性能を継続的に向上させる
- TiDB Lightningに、既存のテーブルへのデータインポートを許可するかどうかを決定するスイッチを追加します。
- 継続的プロファイリング機能の最適化(実験的)
- TiSparkはユーザー識別と認証をサポートしています
互換性の変更
注記:
以前の TiDB バージョンから v5.4.0 にアップグレードする場合、中間バージョンの互換性変更点を確認したい場合は、該当バージョンのリリースノート参照してください。
システム変数
コンフィグレーションファイルパラメータ
その他
- TiDBとPDの間にインターフェースが追加されました。
information_schema.TIDB_HOT_REGIONS_HISTORYシステムテーブルを使用する場合、TiDBは対応するバージョンのPDを使用する必要があります。 - TiDB サーバー、PD サーバー、および TiKV サーバーは、ログ名、出力形式、ローテーションと有効期限のルールを管理するために、ログ関連パラメーターに統一された命名方法を使用し始めます。詳しくはTiKV設定ファイル - ログをご覧ください。
- バージョン5.4.0以降、プランキャッシュによってキャッシュされた実行プランに対してSQLバインディングを作成すると、対応するクエリに対して既にキャッシュされているプランが無効化されます。この新しいバインディングは、バージョン5.4.0より前にキャッシュされた実行プランには影響しません。
- v5.3 以前のバージョンでは、 TiDB Data Migration (DM)ドキュメントは TiDB ドキュメントから独立しています。 v5.4 以降、DM ドキュメントは同じバージョンの TiDB ドキュメントに統合されています。 DM ドキュメント サイトにアクセスせずに、 DMドキュメントを直接読むことができます。
- ポイントインタイムリカバリ(PITR)の実験的機能をcdclogとともに削除しました。バージョン5.4.0以降、cdclogベースのPITRおよびcdclogはサポートされなくなりました。
- システム変数を「DEFAULT」に設定する動作をMySQLとの互換性を高める #29680
- システム変数
lc_time_namesを読み取り専用に設定する #30084 tidb_store_limitのスコープを INSTANCE または GLOBAL から GLOBAL に変更する #30756- 列にゼロが含まれている場合、整数型の列を時間型の列に変換することを禁止する #25728
- 浮動小数点値を挿入する際に
InfまたはNANの値に対してエラーが報告されない問題を修正します #30148 REPLACEステートメントが自動 ID が範囲外の場合に他の行を誤って変更してしまう問題を修正しました #30301
新機能
SQL
TiDBはバージョン5.4.0以降、GBK文字セットをサポートしています。
バージョン 5.4.0 より前の TiDB は、
ascii、binary、latin1、utf8、およびutf8mb4文字セットをサポートしています。中国語ユーザーをより適切にサポートするため、TiDB はバージョン 5.4.0 以降、GBK 文字セットをサポートしています。TiDB クラスタを初めて初期化する際に、TiDB 設定ファイルで
new_collations_enabled_on_first_bootstrapオプションを有効にすると、TiDB GBK 文字セットはgbk_binとgbk_chinese_ciの照合順序をサポートします。GBK 文字セットを使用する場合は、互換性の制限に注意する必要があります。詳細については、文字セットと照合 - GBK参照してください。
セキュリティ
TiSparkはユーザー認証と認可をサポートしています。
TiSpark 2.5.0以降、TiSparkはデータベースユーザー認証と、データベースまたはテーブルレベルでの読み書き権限の両方をサポートしています。この機能を有効にすることで、データ取得のためのドローなどの不正なバッチタスクの実行を防止でき、オンラインクラスタの安定性とデータセキュリティが向上します。
この機能はデフォルトでは無効になっています。有効にした場合、TiSpark を介して操作するユーザーに必要な権限がない場合、TiSpark から例外が返されます。
TiUPはrootユーザーの初期パスワード生成をサポートしています。
クラスター起動コマンドに
--initパラメータが追加されました。このパラメータを使用すると、 TiUPを使用してデプロイされたTiDBクラスターにおいて、 TiUPがデータベースのrootユーザー用に強力な初期パスワードを生成します。これにより、パスワードが空のrootユーザーを使用することによるセキュリティリスクを回避し、データベースのセキュリティを確保できます。
パフォーマンス
カラム型ストレージエンジンTiFlashおよび演算エンジンMPPの安定性とパフォーマンスの向上を継続する。
MPPエンジンへの関数委譲をさらに強化する:
- 文字列関数:
LPAD()、RPAD()、STRCMP() - 日付関数:
ADDDATE(string, real)、DATE_ADD(string, real)、DATE_SUB(string, real)、SUBDATE(string, real)、QUARTER()
- 文字列関数:
リソース利用率を向上させるための弾性スレッドプール機能を導入(実験的)
TiKVからデータを複製する際に、行ベースのストレージ形式から列ベースのストレージ形式へのデータ変換の効率を向上させ、データ複製の全体的なパフォーマンスを50%向上させました。
一部の設定項目のデフォルト値を調整することで、 TiFlashのパフォーマンスと安定性を向上させることができます。HTAPハイブリッドロード環境では、単一テーブルに対する単純なクエリのパフォーマンスが最大20%向上します。
ユーザードキュメント: プッシュダウン計算に対応、 tiflash.toml ファイルを設定します
セッション変数を使用して、指定された期間内の履歴データを読み取ります。
TiDBは、 Raftコンセンサスアルゴリズムに基づいたマルチレプリカ分散データベースです。高並行性および高スループットのアプリケーションシナリオにおいて、TiDBはフォロワーレプリカによって読み取りパフォーマンスをスケールアウトし、読み取りリクエストと書き込みリクエストを分離することができます。
TiDBは、さまざまなアプリケーションシナリオに対応するため、フォロワー読み取りに「強一貫性読み取り」と「弱一貫性履歴読み取り」の2つのモードを提供しています。「強一貫性読み取り」モードは、リアルタイムデータを必要とするアプリケーションシナリオに適しています。ただし、このモードでは、リーダーとフォロワー間のデータ複製レイテンシーとスループットの低下により、特に地理的に分散したデプロイメントの場合、読み取りリクエストのレイテンシーが大きくなる可能性があります。
リアルタイムデータに対する要件がそれほど厳しくないアプリケーションシナリオでは、履歴読み取りモードが推奨されます。このモードでは、レイテンシーを削減し、スループットを向上させることができます。TiDBは現在、以下の方法で履歴データの読み取りをサポートしています。SQLステートメントを使用して過去の時点からデータを読み取るか、過去の時点に基づいて読み取り専用トランザクションを開始します。どちらの方法も、特定の時点または指定された時間範囲内の履歴データの読み取りをサポートしています。詳細については、
AS OF TIMESTAMP句を使用して履歴データを読み取る.バージョン5.4.0以降、TiDBはセッション変数を使用して指定した時間範囲内の履歴データを読み取る機能をサポートすることで、履歴読み取りモードの使いやすさを向上させました。このモードは、準リアルタイムシナリオにおいて、低遅延かつ高スループットの読み取りリクエストに対応します。変数は次のように設定できます。
set @@tidb_replica_read=leader_and_follower set @@tidb_read_staleness="-5"この設定により、TiDBは最も近いリーダーノードまたはフォロワーノードを選択し、5秒以内に最新の履歴データを読み取ることができます。
インデックスマージのためのGA
インデックスマージは、SQL最適化のための実験的機能としてTiDB v4.0で導入されました。この方法は、クエリで複数のデータ列をスキャンする必要がある場合に、条件フィルタリングを大幅に高速化します。次のクエリを例にとります。
WHEREステートメントにおいて、ORで接続されたフィルタリング条件にそれぞれ列key1とkey2のインデックスがある場合、インデックスマージ機能はそれぞれのインデックスを同時にフィルタリングし、クエリ結果をマージして、マージされた結果を返します。SELECT * FROM table WHERE key1 <= 100 OR key2 = 200;TiDB v4.0より前のバージョンでは、テーブルに対するクエリで一度にフィルタリングに使用できるインデックスは1つだけでした。複数の列のデータに対してクエリを実行する場合は、インデックスマージを有効にすることで、個々の列のインデックスを使用して短時間で正確なクエリ結果を取得できます。インデックスマージは不要なフルテーブルスキャンを回避し、多数の複合インデックスを作成する必要もありません。
バージョン5.4.0では、インデックスマージが一般提供開始(GA)となりました。ただし、以下の制限事項には引き続き注意が必要です。
インデックス マージは、選言正規形 (X 1 ⋁ X 2 ⋁ …X n ) のみをサポートします。つまり、この機能は
WHERE句のフィルタリング条件がORで接続されている場合にのみ機能します。新規にデプロイされたv5.4.0以降のTiDBクラスタでは、この機能はデフォルトで有効になっています。以前のバージョンからアップグレードされたv5.4.0以降のTiDBクラスタでは、この機能はアップグレード前の設定を継承し、必要に応じて設定を変更できます(v4.0より前のTiDBクラスタでは、この機能は存在せず、デフォルトで無効になっています)。
Raft Engineのサポート(実験的)
TiKVのログストレージエンジンとしてRaft Engine使用をサポートします。RocksDBと比較して、 Raft EngineはTiKVのI/O書き込みトラフィックを最大40%、CPU使用率を10%削減し、特定の負荷条件下ではフォアグラウンドスループットを約5%向上させ、テールレイテンシーを20%削減します。さらに、 Raft Engineはログリサイクルの効率を向上させ、極端な条件下でのログ蓄積の問題を解決します。
Raft Engine はまだ実験的機能であり、デフォルトでは無効になっています。v5.4.0 のRaft Engineのデータ形式は、以前のバージョンと互換性がないことに注意してください。クラスターをアップグレードする前に、すべての TiKV ノードでRaft Engine が無効になっていることを確認する必要があります。Raft Raft Engine はv5.4.0 以降のバージョンでのみ使用することをお勧めします。
PREDICATE COLUMNSに関する統計情報の収集をサポートする(実験的)ほとんどの場合、SQL ステートメントを実行する際に、オプティマイザは一部の列 (
WHERE、JOIN、ORDER BYJOIN、およびGROUP BYステートメントの列など) の統計情報のみを使用します。これらの使用される列はPREDICATE COLUMNSと呼ばれます。バージョン5.4.0以降では、
tidb_enable_column_trackingシステム変数の値をONに設定することで、TiDBがPREDICATE COLUMNSを収集できるようになります。設定後、TiDB は
PREDICATE COLUMNS情報を 100 *stats-leaseごとにmysql.column_stats_usageシステム テーブルに書き込みます。ビジネスのクエリ パターンが安定している場合は、ANALYZE TABLE TableName PREDICATE COLUMNS構文を使用してPREDICATE COLUMNS列のみの統計情報を収集することで、統計情報の収集オーバーヘッドを大幅に削減できます。統計情報の同期読み込みをサポート(実験的)
バージョン5.4.0以降、TiDBは統計情報の同期読み込み機能を導入しました。この機能はデフォルトでは無効になっています。この機能を有効にすると、SQL文の実行時に、ヒストグラム、TopN、Count-Min Sketch統計情報などの大規模な統計情報をメモリに同期的に読み込むことができるようになり、SQL最適化のための統計情報の網羅性が向上します。
安定性
ANALYZE構成の永続化をサポートする
統計は、オプティマイザが実行計画を生成する際に参照する基本情報の一種です。統計情報の精度は、生成される実行計画の妥当性に直接影響します。統計情報の精度を確保するためには、テーブル、パーティション、インデックスごとに異なる収集構成を設定する必要がある場合があります。
バージョン5.4.0以降、TiDBは一部の
ANALYZE設定の永続化をサポートしています。この機能により、既存の設定を今後の統計情報収集に簡単に再利用できます。ANALYZE構成永続化機能はデフォルトで有効になっています (システム変数tidb_analyze_versionは2で、tidb_persist_analyze_optionsはデフォルトでONです)。この機能を使用すると、ANALYZEステートメントを手動で実行する際に、ステートメントで指定された永続化構成を記録できます。記録されると、次回 TiDB が統計情報を自動的に更新する場合、またはこれらの構成を指定せずに手動で統計情報を収集する場合、TiDB は記録された構成に従って統計情報を収集します。
高可用性とディザスタリカバリ
バックアップタスクがクラスタに与える影響を軽減する
Backup & Restore (BR) では、自動調整機能 (デフォルトで有効) が導入されました。この機能は、クラスタのリソース使用状況を監視し、バックアップタスクで使用されるスレッド数を調整することで、クラスタに対するバックアップタスクの影響を軽減します。場合によっては、バックアップ用のクラスタハードウェアリソースを増やし、自動調整機能を有効にすると、クラスタに対するバックアップタスクの影響を 10% 以下に抑えることができます。
バックアップのターゲットストレージとしてAzure Blob Storageをサポートする
Backup & Restore (BR) は、リモートバックアップストレージとして Azure Blob Storage をサポートしています。Azure クラウドに TiDB をデプロイしている場合、クラスタデータを Azure Blob Storage サービスにバックアップできるようになりました。
データ移行
TiDB Lightning は、データを含むテーブルへのデータのインポートを許可するかどうかを判断する新機能を導入しました。
TiDB Lightning、設定項目
incremental-importが導入されました。これは、データを含むテーブルへのデータのインポートを許可するかどうかを決定します。デフォルト値はfalseです。並列インポートモードを使用する場合は、設定をtrueに設定する必要があります。TiDB Lightningは、並列インポート用のメタ情報を格納するスキーマ名を導入しました。
TiDB Lightning、
meta-schema-nameという構成項目が導入されました。並列インポートモードでは、このパラメータは、ターゲットクラスタ内の各TiDB Lightningインスタンスのメタ情報を格納するスキーマ名を指定します。デフォルト値は「lightning_metadata」です。このパラメータに設定する値は、同じ並列インポートに参加する各TiDB Lightningインスタンスで同じである必要があります。そうでない場合、インポートされたデータの正確性が保証されません。TiDB Lightningに重複解決機能が導入されました
ローカルバックエンドモードでは、 TiDB Lightningはデータインポートが完了する前に重複データを出力し、その後データベースからその重複データを削除します。インポート完了後に重複データを解決し、アプリケーションルールに従って挿入する適切なデータを選択できます。後続の増分データ移行フェーズで発生する重複データによるデータ不整合を回避するため、重複データに基づいて上流のデータソースをクリーンアップすることをお勧めします。
TiDB Data Migration (DM)におけるリレーログの使用を最適化する
enable-relay構成でsourceスイッチを復元します。start-relayおよびstop-relayコマンドを使用して、リレーログを動的に有効化および無効化することをサポートします。リレーログの状態を
sourceにバインドします。sourceどの DM-worker に移行されても、有効または無効の元の状態を維持します。リレーログのストレージパスをDM-workerの設定ファイルに移動します。
DMにおける照合順序処理を最適化する
collation_compatible設定項目を追加します。値のオプションはloose(デフォルト) とstrictです。- アプリケーションに照合順序に関する厳密な要件がなく、クエリ結果の照合順序が上流と下流で異なる可能性がある場合は、デフォルトの
looseモードを使用してエラーの報告を回避できます。 - アプリケーションで照合順序に関する厳格な要件があり、アップストリームとダウンストリーム間で照合順序を統一する必要がある場合は、
strictモードを使用できます。ただし、ダウンストリームがアップストリームのデフォルトの照合順序をサポートしていない場合、データレプリケーションでエラーが発生する可能性があります。
- アプリケーションに照合順序に関する厳密な要件がなく、クエリ結果の照合順序が上流と下流で異なる可能性がある場合は、デフォルトの
DM の
transfer sourceを最適化して、レプリケーション タスクをスムーズに実行できるようにします。DMワーカーノードの負荷が不均衡な場合、
transfer sourceコマンドを使用して、sourceの構成を別の負荷に手動で転送できます。最適化後、transfer sourceコマンドを使用すると、手動操作が簡素化されます。DMは他の操作を内部的に完了するため、関連するすべてのタスクを一時停止することなく、ソースをスムーズに転送できます。DM OpenAPIが一般提供開始(GA)となりました
DMは、データソースの追加やタスク管理など、APIを介した日常的な管理をサポートしています。バージョン5.4.0では、DM OpenAPIが一般提供開始となります。
診断効率
Top SQL (実験的機能)
ソースコードを大量に消費するクエリを簡単に見つけるのに役立つ、新しい実験的機能である「Top SQL」 (デフォルトでは無効)が導入されました。
TiDBデータ共有サブスクリプション
TiCDCがクラスターに与える影響を最適化する
TiCDCを使用すると、TiDBクラスタのパフォーマンスへの影響を大幅に軽減できます。テスト環境では、TiCDCがTiDBに与えるパフォーマンスへの影響を5%未満に抑えることが可能です。
導入と保守
継続的プロファイリングの強化(実験的)
サポートされているコンポーネントがさらに増えました: TiDB v5.4.0 では、TiDB、PD、TiKV に加えて、 TiFlashの CPU プロファイリングもサポートしています。
プロファイリング表示の形式がさらに充実:CPUプロファイリングとゴルーチンの結果をフレームチャートに表示できるようになりました。
サポートされているデプロイメント環境がさらに増えました: TiDB Operatorを使用してデプロイされたクラスターでも、継続的プロファイリングを使用できます。
継続的プロファイリングはデフォルトでは無効になっており、TiDB Dashboardで有効にすることができます。
継続的プロファイリングは、 TiUP v1.9.0以降、またはTiDB Operator v1.3.0以降を使用してデプロイまたはアップグレードされたクラスタに適用可能です。
改善点
TiDB
- キャッシュされたクエリ プランをクリアするための
ADMIN {SESSION | INSTANCE | GLOBAL} PLAN_CACHE構文をサポート #30370
- キャッシュされたクエリ プランをクリアするための
TiKV
- コプロセッサーがページングAPIをサポートし、リクエストをストリームのように処理する #11448
- 読み取り操作が二次ロックの解決を待つ必要がないように、
read-through-lockをサポートする #11402 - ディスク容量不足によるpanicを防ぐため、ディスク保護メカニズムを追加する #10537
- ログのアーカイブとローテーションをサポートする #11651
- Raftクライアントによるシステムコールを削減し、CPU効率を向上させる #11309
- コプロセッサーが部分文字列をTiKVにプッシュダウンする機能をサポート #11495
- Read Committed分離レベルで読み取りロックをスキップすることでスキャンパフォーマンスを向上させる #11485
- バックアップ操作で使用されるデフォルトのスレッドプールサイズを縮小し、負荷が高い場合のスレッドプールの使用を制限する #11000
- 適用スレッドプールとストアスレッドプールのサイズを動的に調整する機能をサポートする #11159
snap-generatorスレッドプールのサイズ設定をサポートする #11247- 多数のファイルがあり、頻繁な読み書きが発生する場合に発生するグローバルロック競合の問題を最適化します #250
PD
TiFlash
- ローカルオペレーター間の通信を最適化する
- gRPCの非一時スレッド数を増やして、頻繁なスレッドの生成や破棄を回避する。
ツール
バグ修正
TiDB
- クラスターをv4.xからv5.xにアップグレードする際に発生する
tidb_analyze_version値の変更に関する問題を修正します。 #25422 - サブクエリで異なる照合順序を使用した場合に発生する誤った結果の問題を修正しました #30748
- TiDB における
concat(ifnull(time(3))の結果が MySQL における結果と異なる問題を修正しました #29498 - 楽観的トランザクションモードにおける潜在的なデータインデックスの不整合の問題を修正 #30410
- 式を TiKV にプッシュダウンできない場合に IndexMerge のクエリ実行プランが誤っている問題を修正しました #30200
- 同時実行される列型変更によってスキーマとデータの間に不整合が生じる問題を修正します #31048
- サブクエリが存在する場合に IndexMerge クエリの結果が間違っている問題を修正しました #30913
- クライアントで FetchSize が大きすぎると発生するpanic問題を修正しました #30896
- LEFT JOINが誤ってINNER JOINに変換される可能性がある問題を修正しました #20510
CASE-WHEN式と照合順序を併用した場合にpanicが発生する可能性がある問題を修正しました #30245INの値にバイナリ定数が含まれている場合に発生する、誤ったクエリ結果の問題を修正しました #31261- CTEにサブクエリがある場合に発生する、誤ったクエリ結果の問題を修正しました #31255
INSERT ... SELECT ... ON DUPLICATE KEY UPDATEステートメントを実行するとpanicが発生する問題を修正しました #28078- INDEX HASH JOIN が
send on closed channelエラーを返す問題を修正します #31129
- クラスターをv4.xからv5.xにアップグレードする際に発生する
TiKV
PD
TiFlash
- MPPクエリが停止した際にTiFlashがpanic可能性がある問題を修正しました。
where <string>句を含むクエリが誤った結果を返す問題を修正しました。- 整数型の主キーの列型をより広い範囲に設定した場合に発生する可能性のあるデータ不整合の問題を修正します。
- 入力時刻が 1970-01-01 00:00:01 UTC より前の場合に
unix_timestampの動作が TiDB または MySQL の動作と一致しない問題を修正します。 - TiFlashを再起動した後に
EstablishMPPConnectionエラーが返される可能性がある問題を修正しました。 - TiFlashとTiDB/TiKVで
CastStringAsDecimalの動作が一貫していない問題を修正します。 - クエリ結果で
DB::Exception: Encode type of coprocessor response is not CHBlockエラーが返される問題を修正します。 - TiFlashとTiDB/TiKVで
castStringAsRealの動作が一貫していない問題を修正します。 - TiFlashの
date_add_string_xxx関数の戻り値が MySQL の戻り値と一致しない問題を修正します。
ツール
Backup & Restore (BR)
TiCDC
min.insync.replicasがreplication-factorより小さい場合にレプリケーションが実行できない問題を修正します #3994cached regionモニタリングメトリックが負の値になる問題を修正しました #4300mq sink write rowに監視データがない問題を修正 #3431sql modeの互換性の問題を修正しました #3810- レプリケーションタスクが削除された際に発生する可能性のあるpanic問題を修正 #3128
- デフォルト列値を出力する際に発生するpanicとデータ不整合の問題を修正しました #3929
- デフォルト値が複製できない問題を修正 #3793
- デッドロックによってレプリケーションタスクが停止する可能性のある問題を修正します #4055
- ディスクへの書き込みが完了した際にログが出力されない問題を修正 #3362
- DDLステートメント内の特殊コメントがレプリケーションタスクの停止を引き起こす問題を修正 #3755
- RHEL リリースにおいて、タイムゾーンの問題によりサービスを開始できない問題を修正しました。 #3584
- 不正確なチェックポイントによって引き起こされる可能性のあるデータ損失の問題を修正しました #3545
- コンテナ環境におけるOOM問題を修正 #1798
config.Metadata.Timeoutの設定ミスが原因で発生するレプリケーション停止の問題を修正します #3352
TiDB Data Migration (DM)
TiDB Lightning
TiDB Binlog
CREATE PLACEMENT POLICYステートメントと互換性がないためDrainer が失敗する問題を修正します #1118