TiDB 5.1 リリースノート
発売日:2021年6月24日
TiDB バージョン: 5.1.0
v5.1 の主な新機能または改善点は次のとおりです。
- MySQL 8.0 の共通テーブル式 (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でない場合、アップグレード後に「回復可能なゴルーチンで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に設定することで、このエラーを無視することができます。これは、MySQLのread_only変数がまだTiDBで有効になっていないためです(これはTiDBでは「noop」動作です)。したがって、この変数がTiDBで設定されていても、TiDBクラスタにデータを書き込むことは可能です。
新機能
SQL
MySQL 8.0 の共通テーブル式 (CTE) 機能をサポートします。
この機能により、TiDB は階層データを再帰的または非再帰的にクエリする機能を持つようになり、人事、製造、金融市場、教育などの複数の分野でツリー クエリを使用してアプリケーション ロジックを実装するというニーズを満たします。
TiDBでは、共通テーブル式#17472使用するために
WITH文を適用できますユーザードキュメントMySQL 8.0 の動的権限機能をサポートします。
動的権限は、
SUPER権限を制限し、TiDB に柔軟な権限設定を提供して、よりきめ細かなアクセス制御を実現するために使用されます。例えば、動的権限を使用して、BACKUPとRESTORE操作のみを実行できるユーザーアカウントを作成できます。サポートされている動的権限は次のとおりです。
BACKUP_ADMINRESTORE_ADMINROLE_ADMINCONNECTION_ADMINSYSTEM_VARIABLES_ADMIN
プラグインを使って新しい権限を追加することもできます。サポートされているすべての権限を確認するには、
SHOW PRIVILEGES文を実行してくださいユーザードキュメントSecurity拡張モード (SEM) の新しい構成項目を追加します。これにより、TiDB 管理者権限がより細かく分割されます。
Security強化モードはデフォルトで無効になっています。有効にするには、 ユーザードキュメントを参照してください。
オンラインでの列タイプの変更機能を強化しました。1 ステートメントを使用したオンラインでの列タイプの変更をサポートします。これには
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)
ローカルレプリカデータを直接読み取り、読み取りレイテンシーを削減し、クエリパフォーマンスを向上させます。
Hibernate リージョン機能をデフォルトで有効にします。
リージョンが長時間非アクティブ状態にある場合、自動的にサイレント状態に設定され、LeaderとFollower間のハートビート情報のシステム オーバーヘッドが削減されます。
安定性
TiCDCのレプリケーション安定性の問題を解決する
以下のシナリオで OOM を回避するために TiCDC のメモリ使用量を改善します
レプリケーション中断中に 1TB を超える大量のデータが蓄積されると、再レプリケーションによって OOM 問題が発生します。
大量のデータ書き込みは TiCDC で OOM の問題を引き起こします。
次のシナリオで TiCDC レプリケーションが中断される可能性を減らします。
- ネットワークが不安定な場合のレプリケーションの中断
- 一部の TiKV/PD/TiCDC ノードがダウンした場合のレプリケーションの中断
TiFlashstorageメモリ制御
リージョンスナップショット生成の速度とメモリ使用量を最適化し、OOMの可能性を減らします。
TiKV バックグラウンド タスクの書き込みレート リミッターを追加します (TiKV 書き込みレート リミッター)
読み取りおよび書き込みリクエストの持続時間の安定性を確保するため、TiKV書き込みレートリミッターは、GCやコンパクションなどのTiKVバックグラウンドタスクの書き込みトラフィックを平滑化します。TiKVバックグラウンドタスク書き込みレートリミッターのデフォルト値は「0MB」です。この値は、クラウドディスクメーカーが指定する最大I/O帯域幅など、ディスクの最適なI/O帯域幅に設定することをお勧めします。
複数のスケーリングタスクが同時に実行される場合のスケジュールの安定性の問題を解決します
テレメトリー
TiDB は、実行ステータスや失敗ステータスなど、テレメトリに TiDB クラスター要求の実行ステータスを追加します。
情報の詳細とこの動作を無効にする方法については、 テレメトリーを参照してください。
改善点
ティドブ
- 組み込み関数
VITESS_HASH()#23915をサポート WHERE節#23619で列挙型を使用するときにパフォーマンスを向上させるために、列挙型のデータを TiKV にプッシュダウンすることをサポートします。RENAME USER構文#23648をサポートする- ROW_NUMBER() #23807を使用してデータをページングする際の TiDB OOM 問題を解決するためにウィンドウ関数の計算を最適化します。
UNION ALLの計算を最適化して、UNION ALL使用して多数のSELECTのステートメントを結合する場合のTiDB OOM問題を解決します#21441- パーティションテーブルの動的プルーニングモードを最適化してパフォーマンスと安定性を向上#24150
- 複数のシナリオで発生する
Region is Unavailable問題を修正するプロジェクト#62 - 頻繁なスケジュール設定で発生する可能性のある複数の
Region is Unavailable問題を修正 - 一部の高負荷書き込み状況で発生する可能性の
Region is Unavailable問題を修正しました - キャッシュされた統計が最新である場合は、CPU使用率の上昇を避けるために、
mysql.stats_histogramsテーブルを頻繁に読み取らないようにします#24317
- 組み込み関数
ティクブ
zstdを使用してリージョンスナップショットを圧縮し、高負荷のスケジュールやスケーリングの際にノード間の大きなスペースの違いを防ぎます#10005複数のケースにおけるOOMの問題を解決する#10183
- 各モジュールのメモリ使用量の追跡を追加する
- Raftエントリキャッシュが大きすぎることによって引き起こされるOOM問題を解決する
- GCタスクのスタックによって引き起こされるOOM問題を解決する
- 一度にRaftログからメモリに取得するRaftエントリが多すぎるために発生する OOM 問題を解決します。
ホットスポット書き込みがあるときに、リージョンサイズの増加が分割速度を超える問題を軽減するために、リージョンをより均等に分割します#9785
TiFlash
Union AllTopN関数Limitサポート- MPP モードで左外部結合と半反結合を含むカルテシアン積をサポートします。
- 実行中のDDL文と読み取り操作が相互にブロックされることを回避するためにロック操作を最適化します。
- TiFlashによる期限切れデータのクリーンアップを最適化
- TiFlashstorageレベルで
timestamp列のクエリ フィルターのさらなるフィルタリングをサポート - クラスター内に多数のテーブルがある場合のTiFlashの起動とスケーラビリティ速度を向上
- 不明なCPUで実行する場合のTiFlashの互換性を向上
PD
scatter regionスケジューラ#3602を追加した後の予期しない統計を回避するスケーリングプロセスにおける複数のスケジュールの問題を解決する
ツール
バックアップと復元 (BR)
TiCDC
Dumpling
TiDB Lightning
バグ修正
ティドブ
- 投影結果が空の場合にプロジェクト除去の実行結果が間違っている可能性がある問題を修正#23887
- 列に
NULL値が含まれている場合に間違ったクエリ結果が表示される問題を修正しました#23891 - スキャンに仮想列#23886が含まれている場合、MPP プランの生成を禁止します。
- プランキャッシュ#23187 #23144 #23304 #23290での
PointGetとTableDualの誤った再利用を修正 - オプティマイザがクラスタ化インデックス#23906の
IndexMergeプランを構築するときに発生するエラーを修正します - BIT型エラーの型推論を修正#23832
PointGet演算子が存在する場合に一部のオプティマイザヒントが有効にならない問題を修正#23570- エラー#23893によりロールバック時にDDL操作が失敗する可能性がある問題を修正
- バイナリリテラル定数のインデックス範囲が正しく構築されない問題を修正#23672
- いくつかのケースで
IN節の潜在的な誤った結果を修正#23889 - いくつかの文字列関数の誤った結果を修正#23759
- ユーザーは、テーブルに対して
REPLACE操作を実行するためにINSERTとDELETE両方の権限が必要になります#23909 - ユーザーは、テーブルに対して
REPLACE操作を実行するためにINSERTとDELETE両方の権限が必要になります#24070 - バイナリとバイトを誤って比較することで発生した間違った
TableDual計画を修正#23846 - 一部のケースでプレフィックスインデックスとインデックス結合を使用することで発生する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#24281が含まれている場合に発生する可能性のあるindex out of rangeエラーを修正します。 CONCAT関数が照合順序#24296を誤って処理する問題を修正しましたcollation_serverグローバル変数が新しいセッション#24156で有効にならない問題を修正しました
ティクブ
- コプロセッサが
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秒以内に対応するタスクが見つからないバグを修正cancelMPPQueryに無効なイテレータが存在する可能性がある問題を修正bitwise演算子の動作がTiDBと異なるバグを修正prefix key使用時に範囲が重複することで発生するアラートの問題を修正- 文字列型を整数型にキャストするときに誤った結果が返される問題を修正しました
- 連続した高速書き込みによりTiFlashのメモリが不足する可能性がある問題を修正しました
- テーブルGC中にヌルポインタ例外が発生する可能性がある問題を修正しました
- 削除されたテーブルにデータを書き込むときに発生するTiFlashpanicの問題を修正しました
- BR復元中にTiFlash がpanic可能性がある問題を修正しました
- 共有デルタインデックスを同時にクローン化する際に誤った結果が生成される問題を修正しました
- 圧縮フィルタ機能が有効になっているときに発生する可能性のあるpanicを修正しました
- TiFlash が非同期コミットからフォールバックしたロックを解決できない問題を修正しました
TIMEZONE型のキャスト結果にTIMESTAMP型が含まれている場合に誤った結果が返される問題を修正しました- セグメント分割中に発生するTiFlashpanic問題を修正
ツール
TiDB Lightning
バックアップと復元 (BR)
- いくつかの TiKV ノードの障害によって発生するバックアップ中断の問題を修正しました#980
TiCDC
- Unified Sorter の同時実行の問題を修正し、役に立たないエラーメッセージをフィルタリングする#1678
- 冗長ディレクトリの作成によりMinIO #1463でのレプリケーションが中断される可能性があるバグを修正
- MySQL 5.7ダウンストリームがアップストリーム TiDB #1585と同じ動作を維持するように、
explicit_defaults_for_timestampセッション変数のデフォルト値を ON に設定します。 io.EOFの誤った処理によりレプリケーションが中断される可能性がある問題を修正#1633- TiCDCダッシュボード#1645のTiKV CDCエンドポイントCPUメトリックを修正
- 場合によってはレプリケーションのブロックを回避するために
defaultBufferChanSize増やす#1259 - Avro出力#1712でタイムゾーン情報が失われる問題を修正
- Unified Sorter 内の古い一時ファイルのクリーンアップをサポートし、
sort-dirディレクトリ#1742の共有を禁止します。 - 多くの古いリージョンが存在する場合に発生する KV クライアントのデッドロックバグを修正#1599
--cert-allowed-cnフラグ#1697の間違ったヘルプ情報を修正- MySQL #1750にデータを複製する際にSUPER権限を必要とする
explicit_defaults_for_timestampの更新を元に戻します - シンクフロー制御をサポートし、メモリオーバーフローのリスクを軽減します#1840
- テーブル#1828を移動する際にレプリケーションタスクが停止する可能性があるバグを修正
- TiCDC チェンジフィード チェックポイント#1759の停滞により TiKV GC セーフ ポイントがブロックされる問題を修正しました