TiDB 5.1 リリースノート
発売日:2021年6月24日
TiDB バージョン: 5.1.0
v5.1 の主な新機能または改善点は次のとおりです。
- MySQL 8.0 の共通テーブル式 (CTE) 機能をサポートして、SQL ステートメントの読みやすさと実行効率を向上させます。
- コード開発の柔軟性を向上させるために、オンラインでの列の型の変更をサポートします。
- デフォルトで実験的機能として有効になっている、クエリの安定性を向上させる新しい統計タイプを導入します。
- MySQL 8.0 の動的特権機能をサポートして、特定の操作をよりきめ細かく制御できるようにします。
- ステイル読み取り機能を使用してローカル レプリカから直接データを読み取ることをサポートし、読み取りのレイテンシー時間を短縮してクエリのパフォーマンスを向上させます (実験的)。
- ロックビュー機能を追加して、データベース管理者 (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 がインスタンス レベルでオプティマイザーのコスト見積もりを無視し、MPP モードを適用するかどうかを制御します。デフォルト値はfalse です。この構成項目は、システム変数tidb_enforce_mpp の初期値を制御します。 |
TiDB 構成ファイル | pessimistic-txn.deadlock-history-capacity | 新規追加 | 1 つの 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 | 新規追加 | resolved-ts .デフォルト値は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 が「function READ ONLY has only noop implementation」というエラーを返した場合、値
tidb_enable_noop_functions
をON
に設定することで、TiDB にこのエラーを無視させることができます。これは、MySQL のread_only
変数がまだ TiDB で有効になっていないためです (これは TiDB の「ヌープ」動作です)。したがって、この変数が TiDB で設定されていても、TiDB クラスターにデータを書き込むことができます。
新機能
SQL
MySQL 8.0 の Common Table Expression (CTE) 機能をサポートします。
この機能は、階層データを再帰的または非再帰的にクエリする機能を TiDB に提供し、ツリー クエリを使用して、人事、製造、金融市場、教育などの複数のセクターでアプリケーション ロジックを実装するニーズを満たします。
TiDB では、
WITH
ステートメントを適用して Common Table Expressions を使用できます。 ユーザー文書 , #17472MySQL 8.0 の動的特権機能をサポートします。
動的権限を使用して
SUPER
の特権を制限し、TiDB により柔軟な特権構成を提供して、よりきめ細かいアクセス制御を実現します。たとえば、動的権限を使用して、BACKUP
つとRESTORE
の操作しか実行できないユーザー アカウントを作成できます。サポートされている動的権限は次のとおりです。
BACKUP_ADMIN
RESTORE_ADMIN
ROLE_ADMIN
CONNECTION_ADMIN
SYSTEM_VARIABLES_ADMIN
プラグインを使用して新しい権限を追加することもできます。サポートされているすべての権限を確認するには、
SHOW PRIVILEGES
ステートメントを実行します。 ユーザー文書TiDB 管理者権限をよりきめ細かく分割する Security Enhanced Mode (SEM) 用の新しい構成項目を追加します。
セキュリティ拡張モードはデフォルトで無効になっています。有効にするには、 ユーザー文書を参照してください。
列の種類をオンラインで変更する機能を強化します。
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
(実験的) を導入します。tidb_analyze_version
は既定で2
に設定されています。これにより、バージョン 1 のハッシュ競合によって大量のデータ ボリュームで発生する可能性のある大きなエラーが回避され、ほとんどのシナリオで推定精度が維持されます。
取引
Lock ビュー機能のサポート (実験的)
ロックビュー機能は、ペシミスティック ロックのロック競合とロック待機に関する詳細情報を提供します。これは、DBA がトランザクションのロック状態を観察し、デッドロックの問題をトラブルシューティングするのに役立ちます。 #24199
ユーザー文書:
- クラスター内のすべての TiKV ノードで現在発生しているペシミスティック ロックとその他のロックをビューし
DATA_LOCK_WAITS
。 - TiDB ノードで最近発生したいくつかのデッドロック エラーをビューし
DEADLOCKS
。 - TiDB ノードで現在実行されているトランザクション情報をビューします。
TIDB_TRX
- クラスター内のすべての TiKV ノードで現在発生しているペシミスティック ロックとその他のロックをビューし
パフォーマンス
データ レプリカの古い読み取り (実験的)
ローカル レプリカ データを直接読み取り、読み取りレイテンシーを短縮し、クエリ パフォーマンスを向上させる
デフォルトで Hibernate リージョン機能を有効にします。
リージョンが長時間非アクティブ状態にある場合、自動的にサイレント状態に設定され、リーダーとフォロワー間のハートビート情報のシステム オーバーヘッドが削減されます。
安定性
TiCDC の複製安定性の問題を解決する
次のシナリオで OOM を回避するために、TiCDC メモリ使用量を改善します。
レプリケーションの中断中に 1 TB を超える大量のデータが蓄積されると、再レプリケーションによって 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 - 列挙型のデータの TiKV へのプッシュ ダウンをサポートして、
WHERE
句で列挙型を使用する場合のパフォーマンスを向上させます#23619 - ウィンドウ関数の計算を最適化して、ROW_NUMBER() でデータをページングする際の TiDB OOM の問題を解決します#23807
UNION ALL
を使用して多数のSELECT
ステートメントを結合する場合の TiDB OOM 問題を解決するためにUNION ALL
の計算を最適化します#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
ティフラッシュ
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
- Plan Cache #23187 #23144 #23304 #23290での
PointGet
とTableDual
の間違った再利用を修正 - オプティマイザーがクラスター化インデックス#23906の
IndexMerge
プランを構築するときに発生するエラーを修正します。 - BIT 型エラーの型推論を修正します#23832
PointGet
演算子が存在する場合、一部のオプティマイザー ヒントが有効にならない問題を修正します#23570- エラーが原因でロールバックすると DDL 操作が失敗する可能性がある問題を修正します#23893
- バイナリ リテラル定数のインデックス範囲が正しく構築されていない問題を修正します#23672
- 場合によっては
IN
句の潜在的な間違った結果を修正します#23889 - 一部の文字列関数の間違った結果を修正します#23759
- ユーザーが
REPLACE
の操作を実行するには、テーブルに対してINSERT
とDELETE
の両方の権限が必要です#23909 - ユーザーが
REPLACE
の操作を実行するには、テーブルに対してINSERT
とDELETE
の両方の権限が必要です#24070 - 間違った
TableDual
バイナリとバイトの比較によって引き起こされた計画を修正します#23846 - 場合によっては、プレフィックス インデックスとインデックス結合を使用することによって引き起こされるpanicの問題を修正します。 #24547 #24716 #24717
- トランザクション#24741の
point get
ステートメントで、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
TiKV
- コプロセッサが
IN
式の符号付きまたは符号なし整数型を適切に処理できない問題を修正します#9821 - SST ファイルのバッチ取り込み後に空のリージョンが多数発生する問題を修正します#964
- ファイル辞書ファイルが破損した後、TiKV が起動できなくなるバグを修正#9886
- 古い値を読み取ることによって発生する TiCDC OOM の問題を修正します#9996 #9981
- 照合順序が
latin1_bin
#24548の場合にクラスター化された主キー列のセカンダリ インデックスに空の値が表示される問題を修正します。 - panicが発生したときに TiKV がコア ダンプ ファイルを生成できるようにする
abort-on-panic
の構成を追加します。コア ダンプ#10216を有効にするには、ユーザーが環境を正しく構成する必要があります。 - TiKV がビジーでないときに発生する
point get
クエリのパフォーマンス低下の問題を修正します#10046
- コプロセッサが
PD
ティフラッシュ
- 時刻型を整数型にキャストすると、結果が正しくなくなる問題を修正
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
- Unified Sorter の同時実行の問題を修正し、役に立たないエラー メッセージをフィルター処理する#1678
- MinIO #1463で冗長ディレクトリを作成するとレプリケーションが中断することがある不具合を修正
explicit_defaults_for_timestamp
セッション変数のデフォルト値を ON に設定して、 MySQL 5.7ダウンストリームがアップストリーム TiDB #1585と同じ動作を維持するようにします。io.EOF
の扱いを誤るとレプリケーションが中断することがある問題を修正#1633- TiCDC ダッシュボードで TiKV CDC エンドポイントの CPU メトリックを修正する#1645
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 changefeed チェックポイント#1759の停滞により、TiKV GC セーフポイントがブロックされる問題を修正