TiDB 5.1 リリースノート
発売日:2021年6月24日
TiDB バージョン: 5.1.0
バージョン5.1における主な新機能または改善点は以下のとおりです。
- SQL文の可読性と実行効率を向上させるため、MySQL 8.0の共通テーブル式(CTE)機能をサポートします。
- コード開発の柔軟性を向上させるため、列の型をオンラインで変更できる機能をサポートする。
- クエリの安定性を向上させるための新しい統計タイプを導入しました。これは実験的機能としてデフォルトで有効になっています。
- MySQL 8.0の動的権限機能をサポートし、特定の操作に対するよりきめ細かな制御を実現します。
- 読み取りレイテンシーを削減し、クエリパフォーマンスを向上させるために、 ステイル読み取り機能を使用してローカルレプリカから直接データを読み取ることをサポートします(Experimental)。
- データベース管理者(DBA)がトランザクションのロックイベントを監視し、デッドロックの問題をトラブルシューティングしやすくするために、ロックビュー機能を追加します(Experimental)。
- バックグラウンドタスクにTiKV書き込みレートリミッターを追加し、読み取りおよび書き込みリクエストのレイテンシーが安定するようにします。
互換性の変更
注記:
以前の TiDB バージョンから v5.1 にアップグレードする場合、中間バージョンの互換性変更点を確認したい場合は、該当バージョンのリリースノートを参照してください。
システム変数
コンフィグレーションファイルパラメータ
その他
- アップグレード前に、TiDB構成の
feedback-probabilityの値を確認してください。値が0でない場合、アップグレード後に「回復可能なゴルーチンでpanicが発生しました」というエラーが発生しますが、このエラーはアップグレード自体には影響しません。 - TiDBのパフォーマンスを向上させるため、TiDBのGoコンパイラバージョンをgo1.13.7からgo1.16.4にアップグレードしてください。TiDB開発者の方は、スムーズなコンパイルを保証するために、Goコンパイラバージョンをアップグレードすることをお勧めします。
- TiDBローリングアップグレード中は、TiDB Binlogを使用するクラスタでクラスタ化インデックスを持つテーブルを作成しないようにしてください。
- TiDB のローリングアップグレード中は
alter table ... modify columnやalter table ... change columnのようなステートメントを実行しないでください。 - バージョン5.1以降、各テーブルのTiFlashレプリカを作成する際に、システムテーブルのレプリカを設定する機能はサポートされなくなりました。クラスタをアップグレードする前に、関連するシステムテーブルのレプリカをクリアする必要があります。クリアしないと、アップグレードは失敗します。
- TiCDC の
--sort-dirコマンドのcdc cli changefeedパラメータは非推奨です。代わりに、--sort-dirコマンドでcdc server} を設定できます。 #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の共通テーブル式(CTE)機能をサポートします。
この機能により、TiDBは階層型データを再帰的または非再帰的にクエリする機能を備え、人事、製造、金融市場、教育など、複数の分野におけるアプリケーションロジックの実装にツリークエリを使用するニーズを満たします。
TiDB では、
WITHステートメントを適用して共通テーブル式を使用できます。ユーザー向けドキュメント、 #17472MySQL 8.0の動的権限機能をサポートします。
動的権限は、
SUPER権限を制限し、TiDBに、よりきめ細かなアクセス制御のための柔軟な権限構成を提供するために使用されます。たとえば、動的権限を使用して、BACKUPおよびRESTORE操作のみを実行できるユーザーアカウントを作成できます。サポートされている動的権限は以下のとおりです。
BACKUP_ADMINRESTORE_ADMINROLE_ADMINCONNECTION_ADMINSYSTEM_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)
ローカルレプリカのデータを直接読み込むことで、読み取りレイテンシーを削減し、クエリパフォーマンスを向上させます。
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クラスタリクエストの実行ステータスをテレメトリに追加します。
この情報の詳細と、この動作を無効にする方法については、テレメトリーを参照してください。
改善点
TiDB
- 組み込み関数
VITESS_HASH()をサポートする #23915 WHERE句で列挙型を使用する際のパフォーマンス向上のため、列挙型のデータを TiKV にプッシュダウンする機能をサポートする #23619RENAME USER構文をサポート #23648- ROW_NUMBER() でデータをページングする際の TiDB の OOM 問題を解決するために、ウィンドウ関数の計算を最適化します #23807
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 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
- プランキャッシュにおける
PointGetとTableDualの誤った再利用を修正#23187 #23144 #23304 #23290 - クラスター化インデックスの
IndexMergeプランを作成する際に発生するエラーを修正します #23906 - BIT型エラーの型推論を修正 #23832
PointGet演算子が存在する場合に、一部のオプティマイザヒントが有効にならない問題を修正しました #23570- エラー #23893によりロールバック時にDDL操作が失敗する可能性がある問題を修正しました。
- バイナリリテラル定数のインデックス範囲が正しく構築されていない問題を修正しました #23672
IN句が場合によっては誤った結果をもたらす可能性がある問題を修正 #23889- 一部の文字列関数の誤った結果を修正 #23759
- ユーザーが
INSERT操作を実行するには、テーブルに対するDELETE権限とREPLACE権限の両方が必要になりました #23909 - ユーザーが
INSERT操作を実行するには、テーブルに対するDELETE権限とREPLACE権限の両方が必要になりました #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句を含むクエリのプランを作成する際に発生するpanic問題を修正します #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文に
index out of rangeとGROUP BY両方が含まれている場合に発生する可能性のあるUNIONエラーを修正し #24281 CONCAT関数が照合順序を正しく処理しない問題を修正しました #24296collation_serverグローバル変数が新しいセッションで有効にならない問題を修正しました #24156
ティクヴ
- コプロセッサが
IN式内の符号付きまたは符号なし整数型を正しく処理できない問題を修正します #9821 - SSTファイルをバッチ処理で取り込んだ後に、多数のリージョンが空になる問題を修正しました #964
- ファイル辞書ファイルが破損した後にTiKVが起動できないバグを修正しました #9886
- 古い値の読み取りによって発生する TiCDC の OOM 問題を修正#9996 #9981
- 照合順序が
latin1_binの場合に、クラスタ化された主キー列のセカンダリ インデックスに空の値が含まれる問題を修正します #24548 - TiKVがpanic発生時にコアダンプファイルを生成できるようにする
abort-on-panic設定を追加します。ユーザーはコアダンプを有効にするために環境を正しく構成する必要があります #10216 - TiKVがビジー状態でない場合に発生する
point getクエリのパフォーマンス低下問題を修正 #10046
- コプロセッサが
PD
TiFlash
- 時間型を整数型にキャストした際に、結果が正しくない問題を修正しました。
receiverが10秒以内に対応するタスクを見つけられないバグを修正しました。cancelMPPQueryに無効なイテレータが存在する可能性がある問題を修正します。bitwise演算子の動作がTiDBの動作と異なるバグを修正しました。prefix keyを使用する際に範囲が重複することによって発生するアラートの問題を修正します。- 文字列型を整数型にキャストした際に、結果が正しくない問題を修正しました。
- 連続して高速な書き込みを行うと、 TiFlashのメモリが不足する可能性がある問題を修正しました。
- テーブルGC中にヌルポインタ例外が発生する可能性がある問題を修正しました。
- 削除されたテーブルにデータを書き込む際に発生するTiFlashpanic問題を修正します。
- TiFlashがBR復元中にpanic可能性がある問題を修正しました。
- 共有デルタインデックスを同時クローンする際に結果が正しくない問題を修正しました。
- 圧縮フィルター機能が有効になっているときに発生する可能性のあるpanicを修正します。
- TiFlashが非同期コミットからフォールバックしたロックを解決できない問題を修正します。
TIMEZONE型のキャスト結果にTIMESTAMP型が含まれている場合に、誤った結果が返される問題を修正しました。- セグメント分割中に発生するTiFlashpanic問題を修正します
ツール
TiDB Lightning
バックアップと復元 (BR)
- 一部のTiKVノードの障害によって発生するバックアップ中断の問題を修正しました #980
TiCDC
- Unified Sorter の同時実行性問題を修正し、役に立たないエラーメッセージをフィルタリングする #1678
- MinIO を使用したレプリケーションで、冗長ディレクトリの作成が中断される可能性があるバグを修正しました #1463
- MySQL 5.7ダウンストリームがアップストリーム TiDB と同じ動作を維持するように、
explicit_defaults_for_timestampセッション変数のデフォルト値を ON に設定します #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へのデータ複製時にSUPER権限を必要とする
explicit_defaults_for_timestampの更新を元に戻す #1750 - メモリオーバーフローのリスクを軽減するために、シンクフロー制御をサポートする #1840
- テーブルを移動する際にレプリケーションタスクが停止する可能性があるバグを修正しました #1828
- TiCDCチェンジフィードチェックポイントの停滞によりTiKV GCセーフポイントがブロックされる問題を修正しました #1759