TiDB5.1リリースノート
発売日:2021年6月24日
TiDBバージョン:5.1.0
v5.1では、主な新機能または改善点は次のとおりです。
- MySQL8.0のCommonTableExpression(CTE)機能をサポートして、SQLステートメントの可読性と実行効率を向上させます。
- オンラインでの列タイプの変更をサポートして、コード開発の柔軟性を向上させます。
- クエリの安定性を向上させるために新しい統計タイプを導入します。これはデフォルトで実験的機能として有効になっています。
- MySQL 8.0の動的特権機能をサポートして、特定の操作に対してよりきめ細かい制御を実装します。
- Stale Read機能を使用してローカルレプリカからデータを直接読み取ることをサポートして、読み取りの待ち時間を短縮し、クエリのパフォーマンスを向上させます(実験的)。
- ロックビュー機能を追加して、データベース管理者(DBA)がトランザクションロックイベントを監視し、デッドロックの問題をトラブルシューティングできるようにします(実験的)。
- バックグラウンドタスクにTiKV書き込みレートリミッターを追加して、読み取りおよび書き込み要求のレイテンシーが安定するようにします。
互換性の変更
ノート:
以前のTiDBバージョンからv5.1にアップグレードするときに、すべての中間バージョンの互換性の変更に関する注意事項を知りたい場合は、対応するバージョンのリリースノートを確認できます。
システム変数
| 変数名 | タイプを変更する | 説明 |
|---|---|---|
cte_max_recursion_depth | 新しく追加されました | 共通テーブル式の最大再帰深度を制御します。 |
init_connect | 新しく追加されました | TiDBサーバーへの初期接続を制御します。 |
tidb_analyze_version | 新しく追加されました | TiDBが統計を収集する方法を制御します。この変数のデフォルト値は2です。これは実験的機能です。 |
tidb_enable_enhanced_security | 新しく追加されました | 接続しているTiDBサーバーでセキュリティ拡張モード(SEM)が有効になっているかどうかを示します。この変数設定は、TiDBサーバーを再起動せずに変更することはできません。 |
tidb_enforce_mpp | 新しく追加されました | オプティマイザのコスト見積もりを無視するかどうか、およびクエリの実行にMPPモードを強制的に使用するかどうかを制御します。この変数のデータ型はBOOLで、デフォルト値はfalseです。 |
tidb_partition_prune_mode | 新しく追加されました | パーティション表の動的プルーニング・モードを使用可能にするかどうかを指定します。この機能は実験的です。この変数のデフォルト値はstaticです。これは、パーティション表の動的プルーニング・モードがデフォルトで無効になっていることを意味します。 |
Configuration / コンフィグレーションファイルのパラメーター
| Configuration / コンフィグレーションファイル | Configuration / コンフィグレーション項目 | タイプを変更する | 説明 |
|---|---|---|---|
| TiDB構成ファイル | security.enable-sem | 新しく追加されました | セキュリティ拡張モード(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がインスタンスレベルでOptimizerのコスト見積もりを無視し、MPPモードを適用するかどうかを制御します。デフォルト値はfalseです。この構成項目は、システム変数tidb_enforce_mppの初期値を制御します。 |
| TiDB構成ファイル | pessimistic-txn.deadlock-history-capacity | 新しく追加されました | 単一のTiDBサーバーのINFORMATION_SCHEMA.DEADLOCKSつのテーブルに記録できるデッドロックイベントの最大数を設定します。デフォルト値は10です。 |
| TiKV構成ファイル | abort-on-panic | 新しく追加されました | abortプロセスで、TiKVがパニックになったときにシステムがコアダンプファイルを生成できるようにするかどうかを設定します。デフォルト値は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 | 新しく追加されました | resolved-tsを初期化するときにTiKVがMVCC(マルチバージョン同時実行制御)ロックデータをスキャンするために使用するスレッドの数。デフォルト値は2です。 |
その他
- アップグレードする前に、TiDB構成
feedback-probabilityの値を確認してください。値が0でない場合、アップグレード後に「回復可能なゴルーチンのパニック」エラーが発生しますが、このエラーはアップグレードには影響しません。 - TiDBのGoコンパイラバージョンをgo1.13.7からgo1.16.4にアップグレードします。これにより、TiDBのパフォーマンスが向上します。 TiDB開発者の場合は、Goコンパイラのバージョンをアップグレードして、スムーズにコンパイルできるようにしてください。
- TiDBローリングアップグレード中にTiDBBinlogを使用するクラスタで、クラスター化インデックスを使用してテーブルを作成することは避けてください。
- 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
MySQL8.0のCommonTableExpression(CTE)機能をサポートします。
この機能により、TiDBは階層データを再帰的または非再帰的にクエリすることができ、ツリークエリを使用して、人事、製造、金融市場、教育などの複数のセクターでアプリケーションロジックを実装する必要があります。
TiDBでは、
WITHステートメントを適用して共通テーブル式を使用できます。 ユーザードキュメント #17472MySQL8.0の動的特権機能をサポートします。
動的特権は、
SUPERの特権を制限し、TiDBに、よりきめ細かいアクセス制御のためのより柔軟な特権構成を提供するために使用されます。たとえば、動的権限を使用して、BACKUPおよびRESTOREの操作のみを実行できるユーザーアカウントを作成できます。サポートされている動的特権は次のとおりです。
BACKUP_ADMINRESTORE_ADMINROLE_ADMINCONNECTION_ADMINSYSTEM_VARIABLES_ADMIN
プラグインを使用して新しい権限を追加することもできます。サポートされているすべての特権をチェックアウトするには、
SHOW PRIVILEGESステートメントを実行します。 ユーザードキュメントセキュリティ拡張モード(SEM)の新しい構成項目を追加します。これにより、TiDB管理者権限がよりきめ細かく分割されます。
セキュリティ強化モードはデフォルトで無効になっています。有効にするには、 ユーザードキュメントを参照してください。
オンラインで列タイプを変更する機能を強化します。以下を含むがこれらに限定されない、
ALTER TABLEステートメントを使用したオンラインでの列タイプの変更をサポートします。VARCHARからBIGINTに変更DECIMAL精度の変更VARCHAR(10)からVARCHAR(5)の長さを圧縮します
新しいSQL構文
AS OF TIMESTAMPを導入して、指定された時点または指定された時間範囲から履歴データを読み取るために使用される新しい実験的機能であるStaleReadを実行します。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(実験的)を導入します。デフォルトでは
tidb_analyze_versionが2に設定されています。これにより、バージョン1のハッシュの競合によって発生する可能性のある大量のデータで発生する可能性のある大きなエラーが回避され、ほとんどのシナリオで推定精度が維持されます。
取引
ロックビュー機能をサポートする(実験的)
ロックビュー機能は、ペシミスティックロックのロック競合とロック待機に関する詳細情報を提供します。これは、DBAがトランザクションのロック状態を監視し、デッドロックの問題をトラブルシューティングするのに役立ちます。 #24199
ユーザードキュメント:
- クラスター内のすべてのTiKVノードで現在発生している悲観的ロックおよびその他のロックを表示します
DATA_LOCK_WAITS - TiDBノードで最近発生したいくつかのデッドロックエラーを表示します
DEADLOCKS - TiDBノードで現在実行されているトランザクション情報を表示します
TIDB_TRX
- クラスター内のすべてのTiKVノードで現在発生している悲観的ロックおよびその他のロックを表示します
パフォーマンス
データレプリカの古い読み取り(実験的)
ローカルレプリカデータを直接読み取ることで、読み取りの待ち時間を短縮し、クエリのパフォーマンスを向上させます
デフォルトで休止状態機能を有効にします。
リージョンが長期間非アクティブ状態にある場合、リージョンは自動的にサイレント状態に設定されます。これにより、リーダーとフォロワーの間のハートビート情報のシステムオーバーヘッドが削減されます。
安定
TiCDCの複製の安定性の問題を解決する
次のシナリオでOOMを回避するために、TiCDCのメモリ使用量を改善します
レプリケーションの中断中に1TBを超える大量のデータが蓄積されると、再レプリケーションによってOOMの問題が発生します。
大量のデータ書き込みは、TiCDCでOOMの問題を引き起こします。
次のシナリオで、TiCDCレプリケーションの中断の可能性を減らします。
- ネットワークが不安定な場合のレプリケーションの中断
- 一部のTiKV/PD/TiCDCノードがダウンした場合のレプリケーションの中断
TiFlashストレージメモリ制御
リージョンスナップショット生成の速度とメモリ使用量を最適化し、OOMの可能性を減らします
TiKVバックグラウンドタスクの書き込みレートリミッターを追加します(TiKV書き込みレートリミッター)
読み取りおよび書き込み要求の継続時間の安定性を確保するために、TiKV書き込みレートリミッターは、GCや圧縮などのTiKVバックグラウンドタスクの書き込みトラフィックをスムーズにします。 TiKVバックグラウンドタスク書き込みレートリミッターのデフォルト値は「0MB」です。この値は、クラウドディスクの製造元が指定した最大I / O帯域幅など、ディスクの最適なI/O帯域幅に設定することをお勧めします。
複数のスケーリングタスクが同時に実行される場合のスケジューリングの安定性の問題を解決します
テレメトリー
TiDBは、実行ステータス、障害ステータスなどを含む、テレメトリでのTiDBクラスタ要求の実行ステータスを追加します。
情報とこの動作を無効にする方法の詳細については、 テレメトリーを参照してください。
改善
TiDB
- 組み込み機能をサポートする
VITESS_HASH()#23915 WHERE節#23619で列挙型を使用する場合のパフォーマンスを向上させるために、列挙型のデータをTiKVにプッシュダウンすることをサポートします。- ROW_NUMBER() #23807を使用してデータをページングするときに、ウィンドウ関数の計算を最適化してTiDBOOMの問題を解決します。
UNION ALLの計算を最適化して、UNION ALLを使用して多数のSELECTのステートメントを結合する場合のTiDBOOMの問題を解決します#21441- パーティションテーブルの動的プルーニングモードを最適化して、パフォーマンスと安定性を向上させます#24150
- 複数のシナリオで発生する
Region is Unavailableの問題を修正しますプロジェクト#62 - 頻繁なスケジューリング状況で発生する可能性のある複数の
Region is Unavailableの問題を修正します - 一部の高ストレス書き込み状況で発生する可能性のある
Region is Unavailableの問題を修正 - キャッシュされた統計が最新の場合は、CPU使用率が高くなるのを避けるために、
mysql.stats_histogramsテーブルを頻繁に#24317ことは避けてください。
- 組み込み機能をサポートする
TiKV
zstdを使用してリージョンのスナップショットを圧縮し、大量のスケジューリングまたはスケーリングの場合にノード間の大きなスペースの違いを防ぎます#10005複数のケースでOOMの問題を解決する#10183
- 各モジュールのメモリ使用量追跡を追加します
- 特大のRaftエントリキャッシュによって引き起こされるOOMの問題を解決します
- スタックされたGCタスクによって引き起こされるOOMの問題を解決します
- 一度にRaftログからメモリに取得するRaftエントリが多すぎるために発生するOOMの問題を解決します
ホットスポット書き込みがある場合にリージョンサイズの増加がスプリット速度を超えるという問題を軽減するために、リージョンをより均等に分割します#9785
TiFlash
Union All、およびTopNの機能をLimit- MPPモードでの左外部結合と半反結合を含むデカルト積をサポートします
- ロック操作を最適化して、実行中のDDLステートメントと読み取り操作が相互にブロックされないようにします
- TiFlashによる期限切れデータのクリーンアップを最適化する
- TiFlashストレージレベルで
timestamp列のクエリフィルターのさらなるフィルタリングをサポート - 多数のテーブルがクラスタにある場合のTiFlashの起動とスケーラビリティの速度を向上させる
- 不明なCPUで実行する場合のTiFlashの互換性を改善します
PD
scatter regionスケジューラーを追加した後の予期しない統計を回避する#3602スケーリングプロセスで複数のスケジューリングの問題を解決する
ツール
バックアップと復元(BR)
TiCDC
Dumpling
TiDB Lightning
バグの修正
TiDB
- 投影結果が空の場合、プロジェクト除去の実行結果が間違っている可能性がある問題を修正します#23887
- 列に
NULLの値が含まれている場合の誤ったクエリ結果の問題を修正します#23891 - スキャンに仮想列が含まれている場合にMPPプランの生成を禁止する#23886
- プラン#23144 #23187での
PointGetとTableDualの#23290た再利用を#23304 - オプティマイザーがクラスター化インデックスの
IndexMergeプランを作成するときに発生するエラーを修正します#23906 - BITタイプエラーのタイプ推論を修正します#23832
PointGet演算子が存在する場合に一部のオプティマイザヒントが有効にならない問題を修正します#23570- エラー#23893が原因でロールバック時にDDL操作が失敗する可能性がある問題を修正します
- バイナリリテラル定数のインデックス範囲が正しく構築されない問題を修正します#23672
- 場合によっては
IN句の潜在的な誤った結果を修正します#23889 - 一部の文字列関数の誤った結果を修正する#23759
- ユーザーは、
REPLACEの操作を実行するために、テーブルに対してINSERTとDELETEの両方の特権が必要になります#23909 - ユーザーは、
REPLACEの操作を実行するために、テーブルに対してINSERTとDELETEの両方の特権が必要になります#24070 - バイナリとバイト#23846を誤って比較することによって引き起こされた間違った
TableDualプランを修正します - 場合によっては#24717インデックスとインデックス結合を使用することによって引き起こされるパニックの問題を修正し#24547 #24716
- 準備されたプランキャッシュ
point getがトランザクション#24741のpoint getステートメントによって誤って使用される問題を修正します。 - 照合順序が
ascii_binまたは#24569の場合に間違ったプレフィックスインデックス値を書き込む問題を修正しlatin1_bin - 進行中のトランザクションがGCワーカーによって中断される可能性があるという問題を修正します#24591
new-collationが有効で、new-row-formatが無効の場合、クラスター化インデックスでポイントクエリが間違ってしまう可能性があるバグを修正します#24541- シャッフルハッシュ結合#24490のパーティションキーの変換をリファクタリングする
HAVING句#24045を含むクエリのプランを作成するときに発生するパニックの問題を修正します- 列プルーニングの改善により、
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と#24281の両方が含まれている場合の潜在的なindex out of rangeエラーを修正しUNION。 CONCAT関数が照合順序#24296を誤って処理する問題を修正しますcollation_serverグローバル変数が新しいセッションで有効にならない問題を修正します#24156
TiKV
- コプロセッサーが
IN式#9821の符号付きまたは符号なし整数型を適切に処理できない問題を修正します。 - SSTファイルをバッチ取り込みした後の多くの空のリージョンの問題を修正します#964
- ファイル辞書ファイルが破損した後にTiKVが起動できないバグを修正します#9886
- 古い値の読み取りによって引き起こされる#9981の問題を修正します#9996
- 照合順序が
latin1_binの場合に、クラスター化された主キー列の2次インデックスの値が空になる問題を修正し#24548 。 - パニックが発生したときにTiKVがコアダンプファイルを生成できるようにする
abort-on-panicの構成を追加します。ユーザーは、コアダンプ#10216を有効にするために環境を正しく構成する必要があります。 - TiKVがビジーでないときに発生する
point getクエリのパフォーマンスリグレッションの問題を修正します#10046
- コプロセッサーが
PD
TiFlash
- 時間型を整数型にキャストするときの誤った結果の問題を修正します
receiverが10秒以内に対応するタスクを見つけることができないバグを修正しますcancelMPPQueryに無効なイテレータが存在する可能性があるという問題を修正しますbitwise演算子の動作がTiDBの動作と異なるバグを修正しますprefix keyを使用するときに範囲が重複することによって発生するアラートの問題を修正します- 文字列型を整数型にキャストするときの誤った結果の問題を修正します
- 連続した高速書き込みによってTiFlashのメモリが不足する可能性がある問題を修正します
- テーブルGC中にnullポインタの例外が発生する可能性があるという潜在的な問題を修正します
- ドロップされたテーブルにデータを書き込むときに発生するTiFlashパニックの問題を修正します
- BRの復元中にTiFlashがパニックになる可能性がある問題を修正します
- 共有デルタインデックスを同時に複製した場合の誤った結果の問題を修正
- 圧縮フィルター機能が有効になっているときに発生する可能性のあるパニックを修正します
- TiFlashが非同期コミットからフォールバックされたロックを解決できない問題を修正します
TIMEZONEタイプのキャスト結果にTIMESTAMPタイプが含まれている場合に誤った結果が返される問題を修正しました- セグメント分割中に発生するTiFlashパニックの問題を修正します
ツール
TiDB Lightning
バックアップと復元(BR)
- いくつかのTiKVノードの障害によって引き起こされるバックアップ中断の問題を修正します#980
TiCDC
- Unified Sorterの同時実行の問題を修正し、役に立たないエラーメッセージをフィルタリングします#1678
- 冗長ディレクトリの作成がMinIO1でのレプリケーションを中断する可能性があるバグを修正し#1463
explicit_defaults_for_timestampセッション変数のデフォルト値をONに設定して、MySQL5.7ダウンストリームがアップストリーム#1585と同じ動作を維持するようにします。io.EOFを誤って処理すると、レプリケーションが中断される可能性があるという問題を修正します#1633- TiCDCダッシュボードのTiKVCDCエンドポイントCPUメトリックを修正します#1645
- 場合によってはレプリケーションのブロックを回避するために
defaultBufferChanSizeを増やします#1259 - Avro出力#1712でタイムゾーン情報が失われる問題を修正します
- Unified Sorterで古い一時ファイルのクリーンアップをサポートし、
sort-dirディレクトリの共有を禁止します#1742 - 多くの古いリージョンが存在する場合に発生するKVクライアントのデッドロックバグを修正します#1599
--cert-allowed-cnフラグ#1697の間違ったヘルプ情報を修正します- #1750にデータを複製するときにSUPER特権を必要とする
explicit_defaults_for_timestampの更新を元に戻します。 - シンクフロー制御をサポートして、メモリオーバーフローのリスクを軽減します#1840
- テーブルを移動するときにレプリケーションタスクが停止する可能性があるバグを修正します#1828
- TiCDCチェンジフィードチェックポイント#1759の停滞により、TiKVGCセーフポイントがブロックされる問題を修正します。