TiDB 5.1 リリースノート
発売日:2021年6月24日
TiDB バージョン: 5.1.0
v5.1 の主な新機能または改善点は次のとおりです。
- MySQL 8.0 の Common Table Expression (CTE) 機能をサポートし、SQL ステートメントの読みやすさと実行効率を向上させます。
- コード開発の柔軟性を向上させるために、オンラインでの列タイプの変更をサポートします。
- クエリの安定性を向上させるために新しい統計タイプを導入します。これは実験的機能としてデフォルトで有効になっています。
- MySQL 8.0 の動的特権機能をサポートして、特定の操作に対するよりきめ細かい制御を実装します。
- ステイル読み取り機能を使用したローカル レプリカからのデータの直接読み取りをサポートし、読み取りレイテンシーを削減し、クエリのパフォーマンスを向上させます (Experimental)。
- ロックビュー機能を追加して、データベース管理者 (DBA) がトランザクション ロック イベントを監視し、デッドロックの問題をトラブルシューティングできるようにします (Experimental)。
- バックグラウンド タスクに TiKV 書き込みレート リミッターを追加して、読み取りおよび書き込みリクエストのレイテンシーが安定していることを確認します。
互換性の変更
ノート:
以前の TiDB バージョンから v5.1 にアップグレードする場合、すべての中間バージョンの互換性変更メモを知りたい場合は、対応するバージョンのリリースノートを確認してください。
システム変数
変数名 | 種類の変更 | 説明 |
---|---|---|
cte_max_recursion_depth | 新しく追加された | 共通テーブル式の最大再帰の深さを制御します。 |
init_connect | 新しく追加された | TiDBサーバーへの最初の接続を制御します。 |
tidb_analyze_version | 新しく追加された | TiDB が統計を収集する方法を制御します。この変数のデフォルト値は2 です。これは実験的機能です。 |
tidb_enable_enhanced_security | 新しく追加された | 接続している TiDBサーバーでSecurity強化モード (SEM) が有効になっているかどうかを示します。この変数設定は、TiDBサーバーを再起動しないと変更できません。 |
tidb_enforce_mpp | 新しく追加された | オプティマイザーのコスト見積もりを無視し、クエリ実行に MPP モードを強制的に使用するかどうかを制御します。この変数のデータ型はBOOL で、デフォルト値はfalse です。 |
tidb_partition_prune_mode | 新しく追加された | パーティションテーブルの動的プルーニングモードを有効にするかどうかを指定します。この機能は実験的です。この変数のデフォルト値はstatic です。これは、パーティション化されたテーブルの動的プルーニング モードがデフォルトで無効であることを意味します。 |
コンフィグレーションファイルのパラメータ
コンフィグレーションファイル | コンフィグレーション項目 | 種類の変更 | 説明 |
---|---|---|---|
TiDB 設定ファイル | security.enable-sem | 新しく追加された | Security強化モード (SEM) を有効にするかどうかを制御します。この構成項目のデフォルト値はfalse で、SEM が無効であることを意味します。 |
TiDB 設定ファイル | performance.committer-concurrency | 修正済み | 単一トランザクションのコミットフェーズでのコミット操作に関連するリクエストの同時実行数を制御します。デフォルト値が16 から128 に変更されました。 |
TiDB 設定ファイル | performance.tcp-no-delay | 新しく追加された | TCPレイヤーで TCP_NODELAY を有効にするかどうかを決定します。デフォルト値はtrue で、TCP_NODELAY が有効であることを意味します。 |
TiDB 設定ファイル | performance.enforce-mpp | 新しく追加された | TiDB がインスタンス レベルでオプティマイザーのコスト見積もりを無視し、MPP モードを強制するかどうかを制御します。デフォルト値はfalse です。この構成項目は、システム変数tidb_enforce_mpp の初期値を制御します。 |
TiDB 設定ファイル | pessimistic-txn.deadlock-history-capacity | 新しく追加された | 単一の TiDBサーバーのINFORMATION_SCHEMA.DEADLOCKS テーブルに記録できるデッドロック イベントの最大数を設定します。デフォルト値は10 です。 |
TiKV設定ファイル | abort-on-panic | 新しく追加された | TiKV がパニックになったときに、 abort プロセスでシステムがコア ダンプ ファイルを生成できるようにするかどうかを設定します。デフォルト値はfalse で、コア ダンプ ファイルの生成が許可されていないことを意味します。 |
TiKV設定ファイル | hibernate-regions | 修正済み | デフォルト値がfalse からtrue に変更されました。リージョンが長時間アイドル状態である場合、リージョンは自動的に休止状態に設定されます。 |
TiKV設定ファイル | old-value-cache-memory-quota | 新しく追加された | TiCDC の古い値でメモリ使用量の上限を設定します。デフォルト値は512MB です。 |
TiKV設定ファイル | sink-memory-quota | 新しく追加された | TiCDC データ変更イベントによるメモリ使用量の上限を設定します。デフォルト値は512MB です。 |
TiKV設定ファイル | incremental-scan-threads | 新しく追加された | 履歴データを増分スキャンするタスクのスレッド数を設定します。デフォルト値は4 で、タスクに 4 つのスレッドがあることを意味します。 |
TiKV設定ファイル | incremental-scan-concurrency | 新しく追加された | 履歴データを段階的にスキャンするタスクの同時実行の最大数を設定します。デフォルト値は6 で、最大 6 つのタスクを同時に実行できることを意味します。 |
TiKV設定ファイル | soft-pending-compaction-bytes-limit | 修正済み | 保留中の圧縮バイトのソフト制限。デフォルト値が"64GB" から"192GB" に変更されました。 |
TiKV設定ファイル | storage.io-rate-limit | 新しく追加された | TiKV 書き込みの I/O 速度を制御します。デフォルト値のstorage.io-rate-limit.max-bytes-per-sec は"0MB" です。 |
TiKV設定ファイル | resolved-ts.enable | 新しく追加された | すべてのリージョンリーダーのresolved-ts を維持するかどうかを決定します。デフォルト値はtrue です。 |
TiKV設定ファイル | resolved-ts.advance-ts-interval | 新しく追加された | resolved-ts が転送される間隔。デフォルト値は"1s" です。値を動的に変更できます。 |
TiKV設定ファイル | resolved-ts.scan-lock-pool-size | 新しく追加された | TiKV がresolved-ts の初期化時に MVCC (マルチバージョン同時実行制御) ロック データをスキャンするために使用するスレッドの数。デフォルト値は2 です。 |
その他
- アップグレードの前に、TiDB 構成の値を確認してください
feedback-probability
。値が 0 でない場合、アップグレード後に「回復可能な goroutine のpanic」エラーが発生しますが、このエラーはアップグレードには影響しません。 - TiDB の Go コンパイラー バージョンを go1.13.7 から go1.16.4 にアップグレードすると、TiDB のパフォーマンスが向上します。 TiDB 開発者の場合は、スムーズにコンパイルできるように Go コンパイラーのバージョンをアップグレードしてください。
- TiDB ローリング アップグレード中に、TiDB Binlogを使用するクラスター内にクラスター化インデックスを含むテーブルを作成しないでください。
- TiDB ローリング アップグレード中に
alter table ... modify column
やalter table ... change column
のようなステートメントを実行しないでください。 - v5.1 以降、テーブルごとにTiFlashレプリカを構築する場合のシステム テーブルのレプリカの設定はサポートされなくなりました。クラスターをアップグレードする前に、関連するシステム テーブルのレプリカをクリアする必要があります。そうしないと、アップグレードは失敗します。
- TiCDC の
cdc cli changefeed
コマンドの--sort-dir
パラメータを非推奨にします。代わりに、cdc server
コマンドで--sort-dir
を設定できます。 #1795 - TiDB 5.1 にアップグレードした後、TiDB が「関数 READ ONLY には noop 実装しかありません」エラーを返した場合、値
tidb_enable_noop_functions
からON
を設定することで TiDB にこのエラーを無視させることができます。これは、MySQL のread_only
変数が TiDB ではまだ有効になっていないためです (これは TiDB では「noop」動作です)。したがって、この変数が TiDB に設定されている場合でも、TiDB クラスターにデータを書き込むことができます。
新機能
SQL
MySQL 8.0 の Common Table Expression (CTE) 機能をサポートします。
この機能により、TiDB は階層データを再帰的または非再帰的にクエリできるようになり、人事、製造、金融市場、教育などの複数のセクターでツリー クエリを使用してアプリケーション ロジックを実装するニーズを満たします。
TiDB では、
WITH
ステートメントを適用して共通テーブル式を使用できます。 ユーザードキュメント #17472MySQL 8.0 の動的権限機能をサポートします。
動的権限は、
SUPER
特権を制限し、よりきめ細かいアクセス制御のためのより柔軟な特権構成を TiDB に提供するために使用されます。たとえば、動的権限を使用して、BACKUP
とRESTORE
操作のみを実行できるユーザー アカウントを作成できます。サポートされている動的権限は次のとおりです。
BACKUP_ADMIN
RESTORE_ADMIN
ROLE_ADMIN
CONNECTION_ADMIN
SYSTEM_VARIABLES_ADMIN
プラグインを使用して新しい権限を追加することもできます。サポートされているすべての権限を確認するには、
SHOW PRIVILEGES
ステートメントを実行します。 ユーザードキュメントSecurity強化モード (SEM) の新しい構成項目を追加します。これにより、TiDB 管理者権限がよりきめ細かい方法で分割されます。
Security強化モードはデフォルトでは無効になっています。これを有効にするには、 ユーザードキュメントを参照してください。
オンラインで列タイプを変更する機能を強化します。
ALTER TABLE
ステートメントを使用したオンラインでの列タイプの変更をサポートします。これには次のものが含まれますが、これらに限定されません。VARCHAR
をBIGINT
に変更するDECIMAL
精度を変更するVARCHAR(10)
~VARCHAR(5)
の長さを圧縮する
新しい SQL 構文
AS OF TIMESTAMP
を導入して、指定された時点または指定された時間範囲から履歴データを読み取るために使用される新しい実験的機能であるステイル読み取りを実行します。AS OF TIMESTAMP
の例は以下の通りです。SELECT * FROM t AS OF TIMESTAMP '2020-09-06 00:00:00'; START TRANSACTION READ ONLY AS OF TIMESTAMP '2020-09-06 00:00:00'; SET TRANSACTION READ ONLY as of timestamp '2020-09-06 00:00:00';新しい統計タイプ
tidb_analyze_version = 2
(Experimental) を導入します。デフォルトでは
tidb_analyze_version
が2
に設定されており、これにより、バージョン 1 のハッシュ競合によって大量のデータで発生する可能性のある大きなエラーが回避され、ほとんどのシナリオで推定精度が維持されます。
トランザクション
ビューのロック機能をサポート (Experimental)
ロックビュー機能は、ロックの競合と悲観的ロックのロック待機に関する詳細情報を提供します。これは、DBA がトランザクション ロック状態を観察し、デッドロックの問題をトラブルシューティングするのに役立ちます。 #24199
ユーザー文書:
- クラスター内のすべての TiKV ノードで現在発生している悲観的ロックとその他のロックをビュー
DATA_LOCK_WAITS
- TiDB ノードで最近発生したいくつかのデッドロック エラーをビュー:
DEADLOCKS
- TiDB ノード上で現在実行されているトランザクション情報をビュー:
TIDB_TRX
- クラスター内のすべての TiKV ノードで現在発生している悲観的ロックとその他のロックをビュー
パフォーマンス
データ レプリカの古い読み取り (Experimental)
ローカル レプリカ データを直接読み取ることで、読み取りレイテンシーを短縮し、クエリのパフォーマンスを向上させます。
デフォルトで休止状態リージョン機能を有効にします。
リージョンが長期間非アクティブな状態にある場合、リージョンは自動的にサイレント状態に設定され、LeaderとFollowerの間のハートビート情報のシステム オーバーヘッドが削減されます。
安定性
TiCDC のレプリケーションの安定性の問題を解決する
TiCDCメモリ使用量を改善して、次のシナリオで OOM を回避します。
レプリケーションの中断中に 1TB を超える大量のデータが蓄積されると、再レプリケーションによって OOM の問題が発生します。
大量のデータ書き込みにより、TiCDC で OOM 問題が発生します。
次のシナリオで TiCDC レプリケーションが中断される可能性を減らします。
- ネットワークが不安定な場合のレプリケーションの中断
- 一部の TiKV/PD/TiCDC ノードがダウンした場合のレプリケーションの中断
TiFlashstorageメモリ制御
リージョンスナップショット生成の速度とメモリ使用量を最適化し、OOM の可能性を低減します。
TiKV バックグラウンド タスクの書き込みレート リミッターを追加します (TiKV 書き込みレート リミッター)
読み取りおよび書き込みリクエストの期間の安定性を確保するために、TiKV 書き込みレート リミッターは、GC やコンパクションなどの TiKV バックグラウンド タスクの書き込みトラフィックを平滑化します。 TiKV バックグラウンド タスクの書き込みレート リミッターのデフォルト値は「0MB」です。この値を、クラウド ディスクの製造元が指定する最大 I/O 帯域幅など、ディスクの最適な I/O 帯域幅に設定することをお勧めします。
複数のスケーリング タスクが同時に実行される場合のスケジュールの安定性の問題を解決する
テレメトリー
TiDB は、実行ステータスや失敗ステータスなど、TiDB クラスター リクエストの実行ステータスをテレメトリに追加します。
情報の詳細とこの動作を無効にする方法については、 テレメトリーを参照してください。
改善点
TiDB
- 組み込み関数のサポート
VITESS_HASH()
#23915 WHERE
節#23619で列挙型を使用する場合のパフォーマンスを向上させるために、列挙型のデータを TiKV にプッシュダウンするサポートRENAME USER
構文#23648をサポートします。- ROW_NUMBER() #23807でデータをページングする際の TiDB OOM 問題を解決するために、ウィンドウ関数の計算を最適化します。
UNION ALL
を使用して多数のSELECT
ステートメントを結合する場合の TiDB OOM 問題を解決するためにUNION ALL
の計算を最適化する#21441- パーティションテーブルの動的プルーニングモードを最適化して、パフォーマンスと安定性を向上させます#24150
- 複数のシナリオで発生する
Region is Unavailable
問題を修正しますプロジェクト#62 - 頻繁なスケジュール状況で発生する可能性のある複数の
Region is Unavailable
問題を修正します - 一部の高ストレス書き込み状況で発生する可能性がある問題
Region is Unavailable
を修正 mysql.stats_histograms
キャッシュされた統計が最新の場合は、CPU 使用率が高くなるのを避けるためにテーブルを頻繁に読み取らないようにします#24317
- 組み込み関数のサポート
TiKV
zstd
を使用してリージョンスナップショットを圧縮し、大量のスケジュールまたはスケーリングの場合にノード間で大きなスペースの差が生じるのを防ぎます#10005複数のケースで OOM の問題を解決する#10183
- 各モジュールのメモリ使用量追跡を追加する
- サイズ超過のRaftエントリ キャッシュによって引き起こされる OOM 問題を解決する
- スタックされた GC タスクによって引き起こされる OOM 問題を解決する
- Raftログからメモリに一度に多すぎるRaftエントリをフェッチすることによって引き起こされる OOM 問題を解決する
ホットスポット書き込みがある場合にリージョンサイズの増加が分割速度を超える問題を軽減するために、リージョンをより均等に分割します#9785
TiFlash
Union All
、TopN
、およびLimit
関数をサポート- MPP モードで左外部結合およびセミアンチ結合を含むデカルト積をサポートする
- ロック操作を最適化して、実行中の DDL ステートメントと読み取り操作が相互にブロックされないようにする
- TiFlashによる期限切れデータのクリーンアップを最適化する
- TiFlashstorageレベルで
timestamp
列に対するクエリ フィルタのさらなるフィルタリングをサポートします。 - クラスター内に多数のテーブルがある場合のTiFlashの起動速度とスケーラビリティ速度を向上させます。
- 不明な CPU で実行する場合のTiFlash の互換性を向上させる
PD
scatter region
スケジューラ#3602を追加した後の予期しない統計を回避しますスケーリングプロセスにおける複数のスケジュールの問題を解決する
ツール
バックアップと復元 (BR)
TiCDC
Dumpling
TiDB Lightning
バグの修正
TiDB
- 投影結果が空の場合、プロジェクトの削除の実行結果が正しくない場合がある問題を修正#23887
- 列に
NULL
値が含まれる場合に、場合によっては間違ったクエリ結果が表示される問題を修正します#23891 - スキャンに仮想列が含まれる場合、MPP プランの生成を禁止する#23886
- プラン キャッシュ#23187 #23144 #23304 #23290の
PointGet
とTableDual
の誤った再利用を修正 - オプティマイザーがクラスター化インデックス
IndexMerge
のプランを構築するときに発生するエラーを修正します#23906 - BIT 型エラーの型推論を修正#23832
PointGet
演算子が存在する場合、一部のオプティマイザ ヒントが有効にならない問題を修正#23570- ロールバック時にエラー#23893が原因で DDL 操作が失敗する可能性がある問題を修正します。
- バイナリリテラル定数のインデックス範囲が正しく構築されない問題を修正#23672
- 場合によっては
IN
節の誤った結果が生じる可能性がある問題を修正#23889 - 一部の文字列関数の間違った結果を修正#23759
- ユーザーが
REPLACE
操作を実行するには、テーブルに対するINSERT
とDELETE
両方の権限が必要になる#23909 - ユーザーが
REPLACE
操作を実行するには、テーブルに対するINSERT
とDELETE
両方の権限が必要になる#24070 - バイナリとバイト#23846の誤った比較によって引き起こされる間違った
TableDual
プランを修正します。 - 場合によってはプレフィックスインデックスとインデックスジョインの使用によって引き起こされるpanicの問題を修正#24547 #24716 #24717
- 準備されたプラン キャッシュ
point get
がトランザクション#24741のpoint get
ステートメントによって誤って使用される問題を修正します。 - 照合順序が
ascii_bin
またはlatin1_bin
#24569場合に、間違ったプレフィックス インデックス値が書き込まれる問題を修正します。 - 進行中のトランザクションが GC ワーカーによって中断される可能性がある問題を修正します#24591
new-collation
が有効でnew-row-format
が無効な場合、クラスター化インデックスでポイント クエリが誤る可能性があるバグを修正#24541- シャッフル ハッシュ結合#24490パーティション キーの変換をリファクタリングします。
HAVING
節#24045を含むクエリのプランを構築するときに発生するpanicの問題を修正します。- 列枝刈りの改善により
Apply
とJoin
演算子の結果がおかしくなる問題を修正#23887 - 非同期コミットからフォールバックしたプライマリロックが解決できないバグを修正#24384
- fm-sketch レコードの重複を引き起こす可能性がある統計の GC 問題を修正#24357
- 悲観的的ロックが
ErrKeyExists
エラー#23799を受け取った場合、不必要な悲観的的ロールバックを回避します。 - sql_mode に
ANSI_QUOTES
#24429が含まれる場合、数値リテラルが認識されない問題を修正 INSERT INTO table PARTITION (<partitions>) ... ON DUPLICATE KEY UPDATE
のようなステートメントによる、リストされていないパーティションからのデータの読み取りを禁止します#24746- SQL ステートメントに
GROUP BY
とUNION
両方が含まれる場合に発生する可能性のあるindex out of range
エラーを修正#24281 CONCAT
関数が照合順序#24296を正しく処理しない問題を修正します。collation_server
グローバル変数が新しいセッション#24156で有効にならない問題を修正します。
TiKV
- コプロセッサが
IN
式#9821の符号付き整数型または符号なし整数型を適切に処理できない問題を修正します。 - SST ファイルのバッチ取り込み後に多数の空のリージョンが発生する問題を修正#964
- ファイル辞書ファイルが破損するとTiKVが起動できなくなるバグを修正#9886
- 古い値の読み取りによって発生する TiCDC OOM 問題を修正#9996 #9981
- 照合順序が
latin1_bin
#24548の場合に、クラスター化された主キー列のセカンダリ インデックスに空の値が表示される問題を修正します。 abort-on-panic
構成を追加します。これにより、panic発生時に TiKV がコア ダンプ ファイルを生成できるようになります。ユーザーは、コア ダンプ#10216を有効にするために環境を正しく構成する必要があります。- TiKV がビジーでないときに発生する
point get
クエリのパフォーマンス低下の問題を修正します#10046
- コプロセッサが
PD
TiFlash
- 時刻型を整数型にキャストするときに誤った結果が表示される問題を修正
receiver
が10秒以内に対応するタスクを見つけられないバグを修正cancelMPPQuery
に無効な反復子が存在する可能性がある問題を修正bitwise
オペレーターの挙動がTiDBと異なるバグを修正prefix key
を使用するときに範囲が重複することによって引き起こされるアラートの問題を修正します。- 文字列型を整数型にキャストするときに誤った結果が発生する問題を修正
- 連続した高速書き込みによりTiFlash がメモリ不足になる可能性がある問題を修正
- テーブル GC 中に null ポインターの例外が発生する可能性がある潜在的な問題を修正
- ドロップされたテーブルにデータを書き込むときに発生するTiFlashpanic問題を修正
- BR復元中にTiFlash がpanicになる可能性がある問題を修正
- 共有デルタインデックスを同時にクローン作成するときに誤った結果が発生する問題を修正
- 圧縮フィルター機能が有効になっているときに発生する可能性のあるpanicを修正しました。
- TiFlash が非同期コミットからフォールバックしたロックを解決できない問題を修正
TIMEZONE
型のキャスト結果にTIMESTAMP
型が含まれる場合に誤った結果が返される問題を修正- セグメント分割中に発生するTiFlashpanic問題を修正
ツール
TiDB Lightning
バックアップと復元 (BR)
- いくつかの TiKV ノードの障害によって引き起こされるバックアップ中断の問題を修正します#980
TiCDC
- 統合ソーターの同時実行の問題を修正し、役に立たないエラー メッセージをフィルタリングします#1678
- 冗長ディレクトリの作成により MinIO #1463でのレプリケーションが中断される可能性があるバグを修正
explicit_defaults_for_timestamp
セッション変数のデフォルト値を ON に設定して、 MySQL 5.7ダウンストリームがアップストリームの TiDB #1585と同じ動作を維持できるようにします。io.EOF
の処理を誤るとレプリケーションが中断される可能性がある問題を修正#1633- TiCDC ダッシュボード#1645で TiKV CDC エンドポイントの CPU メトリックを修正します。
- 場合によってはレプリケーションのブロックを避けるために
defaultBufferChanSize
を増やします#1259 - Avro 出力#1712でタイムゾーン情報が失われる問題を修正
- 統合ソーターでの古い一時ファイルのクリーンアップをサポートし、ディレクトリ
sort-dir
の共有を禁止します#1742 - 古いリージョンが多数存在する場合に発生する KV クライアントのデッドロック バグを修正#1599
--cert-allowed-cn
フラグ#1697の間違ったヘルプ情報を修正- データを MySQL #1750にレプリケートするときに SUPER 権限が必要となる
explicit_defaults_for_timestamp
の更新を元に戻します。 - シンク フロー制御をサポートしてメモリオーバーフローのリスクを軽減します#1840
- テーブル#1828の移動時にレプリケーションタスクが停止する場合があるバグを修正
- TiCDC チェンジフィード チェックポイント#1759の停滞により TiKV GC セーフ ポイントがブロックされる問題を修正