TiDB 6.1.0 リリースノート
リリース日:2022年6月13日
TiDB バージョン: 6.1.0
クイックアクセス: クイックスタート | 本番環境へのデプロイ
6.1.0 の主な新機能または改善点は次のとおりです。
- リストパーティショニングとリストCOLUMNSパーティショニングが GA になり、 MySQL 5.7と互換性があります
- TiFlashパーティションテーブル(動的プルーニング)が GA になりました
- ユーザーレベルのロック管理をサポートし、MySQLと互換性があります
- 非トランザクションDML文をサポート(
DELETEのみサポート) - TiFlashはオンデマンドのデータ圧縮をサポート
- MPPはウィンドウ関数フレームワークを導入する
- TiCDCはAvro経由でKafkaへの変更ログの複製をサポートします
- TiCDCはレプリケーション中に大規模なトランザクションを分割することをサポートしており、これにより大規模なトランザクションによって発生するレプリケーションのレイテンシーが大幅に削減されます。
- シャードテーブルのマージと移行の楽観的モードがGAになりました
新機能
SQL
リストパーティショニングとリストCOLUMNSパーティショニングがGAになりました。どちらもMySQL 5.7と互換性があります。
ユーザードキュメント: リストパーティショニング、リストCOLUMNSパーティショニング
TiFlash は、コンパクト コマンドの開始をサポートしています。(実験的)
TiFlash v6.1.0 では
ALTER TABLE ... COMPACTステートメントが導入されました。このステートメントは、既存のバックグラウンドのコンパクションメカニズムに基づいて、物理データを手動でコンパクションする方法を提供します。このステートメントを使用すると、以前の形式のデータを更新し、必要に応じていつでも読み取り/書き込みのパフォーマンスを向上できます。クラスターを v6.1.0 にアップグレードした後、このステートメントを実行してデータをコンパクションすることをお勧めします。このステートメントは標準 SQL 構文の拡張であるため、MySQL クライアントと互換性があります。TiFlash のアップグレード以外のシナリオでは、通常、このステートメントを使用する必要はありません。TiFlash はウィンドウ関数フレームワークを実装し、次のウィンドウ関数をサポートします。
RANK()DENSE_RANK()ROW_NUMBER()
可観測性
継続的なプロファイリングは、ARMアーキテクチャとTiFlash をサポートします。
Grafana は、全体的なパフォーマンス診断のためのシステム レベルのエントリを提供するPerformance Overview ダッシュボードを追加します。
TiDB可視化監視コンポーネントGrafanaの新しいダッシュボードである「Performance Overview」は、システム全体のパフォーマンス診断のためのエントリーを提供します。トップダウン型パフォーマンス分析手法に基づき、「Performance Overview」ダッシュボードは、TiDBのパフォーマンスメトリクスをデータベース時間の内訳に基づいて整理し、異なる色で表示します。これらの色を確認することで、システム全体のパフォーマンスボトルネックを一目で特定できるため、パフォーマンス診断時間を大幅に短縮し、パフォーマンス分析と診断を簡素化します。
パフォーマンス
カスタマイズされたリージョンサイズをサポート
v6.1.0以降では、
coprocessor.region-split-sizeを設定することでリージョンのサイズを大きく設定できます。これにより、リージョンの数を効果的に削減し、リージョンの管理を容易にし、クラスターのパフォーマンスと安定性を向上させることができます。同時実行性を高めるためにバケットの使用をサポート(実験的)
リージョンのサイズを大きくした後でもクエリの同時実行性をさらに向上させるために、TiDB ではバケットという概念が導入されています。バケットとは、リージョン内のより小さな範囲を指します。バケットをクエリ単位として使用すると、リージョンのサイズを大きくした場合に同時実行クエリのパフォーマンスを最適化できます。また、バケットをクエリ単位として使用すると、ホットスポットリージョンのサイズを動的に調整して、スケジューリングの効率と負荷分散を確保することもできます。この機能は現在実験的です。本番環境での使用は推奨されません。
Raft Engine をデフォルトのログストレージエンジンとして使用する
v6.1.0以降、TiDBはログのデフォルトストレージエンジンとしてRaft Engineを使用しています。RocksDBと比較して、 Raft EngineはTiKV I/O書き込みトラフィックを最大40%、CPU使用率を10%削減し、フォアグラウンドスループットを約5%向上させ、特定の負荷下ではテールレイテンシーを20%削減します。
結合順序ヒント構文をサポートする
LEADINGヒントは、指定した順序を結合操作のプレフィックスとして使用するようにオプティマイザに指示します。適切な結合のプレフィックスにより、結合の初期段階でデータ量を素早く削減し、クエリのパフォーマンスを向上できます。STRAIGHT_JOINヒントは、FROM句内のテーブルの順序と一致する順序でテーブルを結合するようにオプティマイザに通知します。これにより、テーブル結合の順序を固定することができます。ヒントを適切に使用することで、SQLパフォーマンスとクラスタの安定性を効果的に向上させることができます。
ユーザードキュメント:
LEADING、STRAIGHT_JOIN、 #29932
TiFlash はさらに 4つの関数をサポートしています。
FROM_DAYSTO_DAYSTO_SECONDSWEEKOFYEAR
TiFlash は、動的プルーニングモードでパーティション化されたテーブルをサポートします。
OLAPシナリオにおけるパフォーマンス向上のため、パーティションテーブルでは動的プルーニングモードがサポートされています。TiDBをv6.0.0より前のバージョンからアップグレードする場合は、パフォーマンスを最大限に高めるために、既存のパーティションテーブルの統計情報を手動で更新することをお勧めします(新規インストールの場合、またはv6.1.0へのアップグレード後に新しく作成されたパーティションの場合は必要ありません)。
ユーザードキュメント: MPP モードでパーティションテーブルにアクセスする 、 動的プルーニングモード 、 #3873
安定性
SST 破損からの自動回復
RocksDBがバックグラウンドで破損したSSTファイルを検出すると、TiKVは影響を受けたピアのスケジュールを設定し、他のレプリカを使用してそのデータの復旧を試みます。パラメータ
background-error-recovery-windowを使用して、復旧の最大許容時間を設定できます。復旧操作が指定時間内に完了しない場合、TiKVはpanicになります。この機能は、復旧可能な破損ストレージを自動的に検出して復旧するため、クラスターの安定性が向上します。非トランザクションDML文をサポートする
大規模データ処理のシナリオでは、大規模なトランザクションを伴う単一のSQL文が、クラスタの安定性とパフォーマンスに悪影響を及ぼす可能性があります。TiDB v6.1.0以降、
DELETESQL文を複数のSQL文に分割してバッチ処理する構文がサポートされています。分割文はトランザクションの原子性と分離性を損ないますが、クラスタの安定性を大幅に向上させます。詳細な構文については、BATCHを参照してください。TiDBは最大GC待機時間の設定をサポートしています
TiDB のトランザクションは、マルチバージョン同時実行制御 (MVCC) メカニズムを採用しています。新しく書き込まれたデータが古いデータを上書きする場合、古いデータは置き換えられず、両方のバージョンのデータが格納されます。古いデータはガベージコレクション (GC) タスクによって定期的にクリーンアップされ、ストレージスペースの再利用を促進してクラスターのパフォーマンスと安定性を向上させます。GC は、デフォルトでは 10分ごとにトリガーされます。長時間実行トランザクションが対応する履歴データにアクセスできるようにするため、実行中のトランザクションがある場合は GC タスクが遅延されます。GC タスクが無期限に遅延されないように、TiDB は GC タスクの最大遅延時間を制御するシステム変数
tidb_gc_max_wait_timeを導入しています。最大遅延時間を超えると、GC は強制的に実行されます。変数のデフォルト値は 24時間です。この機能により、GC の待機時間と長時間実行トランザクションの関係を制御でき、クラスターの安定性が向上します。TiDBは自動統計収集タスクの最大実行時間の設定をサポートします
データベースは統計情報を収集することでデータの分布を効果的に把握し、合理的な実行計画を生成してSQL実行の効率を向上させることができます。TiDBは、頻繁に変更されるデータオブジェクトの統計をバックグラウンドで定期的に収集します。しかし、統計の収集はクラスタリソースを消費するため、ビジネスピーク時にはビジネスの安定運用に影響を与える可能性があります。
v6.1.0以降、TiDBはバックグラウンド統計収集の最大実行時間を制御するための
tidb_max_auto_analyze_timeを導入しました。これはデフォルトで12時間です。アプリケーションがリソースのボトルネックに遭遇しない場合は、TiDBがタイムリーに統計を収集できるように、この変数を変更しないことを推奨します。
使いやすさ
複数のレプリカが失われた場合のワンストップオンラインデータ復旧をサポート
TiDB v6.1.0より前のバージョンでは、マシン障害により複数のリージョンレプリカが失われた場合、ユーザーはすべてのTiKVサーバーを停止し、 TiKV Controlを使用してTiKVを1つずつリカバリする必要がありました。TiDB v6.1.0以降では、リカバリプロセスは完全に自動化されており、TiKVを停止する必要がなく、他のオンラインアプリケーションに影響を与えることもありません。リカバリプロセスはPD Controlを使用して開始でき、よりユーザーフレンドリーな概要情報を提供します。
履歴統計収集タスクの表示をサポート
SHOW ANALYZE STATUS文を使用すると、クラスターレベルの統計収集タスクを表示できます。TiDB v6.1.0 より前のバージョンでは、SHOW ANALYZE STATUS文はインスタンスレベルのタスクのみを表示し、履歴タスクの記録は TiDB の再起動後に消去されます。そのため、履歴統計収集の時間と詳細は表示できません。TiDB v6.1.0 以降では、統計収集タスクの履歴記録は保持され、クラスターの再起動後もクエリを実行できます。これにより、統計の異常によって発生するクエリパフォーマンスの問題をトラブルシューティングするための参考資料となります。TiDB、TiKV、およびTiFlash構成の動的な変更をサポート
以前のバージョンのTiDBでは、設定項目を変更した後、変更を有効にするにはクラスタを再起動する必要がありました。これにより、オンラインサービスが中断される可能性がありました。この問題に対処するため、TiDB v6.1.0では動的設定機能が導入され、クラスタを再起動せずにパラメータ変更を検証できるようになりました。具体的な最適化は以下の通りです。
TiDBの一部の設定項目をシステム変数に変換し、動的に変更・保存できるようにします。変換後は元の設定項目は非推奨となることに注意してください。変換後の設定項目の詳細なリストについては、 設定ファイルのパラメータを参照してください。
一部のTiKVパラメータのオンライン設定をサポートします。パラメータの詳細なリストについては、 その他を参照してください。
TiFlash設定項目
max_threadsをシステム変数tidb_max_tiflash_threadsに変換し、構成を動的に変更して永続化できるようにします。変換後も元の設定項目は保持されることに注意してください。以前のバージョンからアップグレードされた v6.1.0 クラスター (オンライン アップグレードとオフライン アップグレードを含む) については、次の点に注意してください。
アップグレード前に設定ファイルに指定された設定項目が既に存在する場合、TiDBはアップグレードプロセス中に、設定された項目の値を対応するシステム変数の値に自動的に更新します。これにより、パラメータの最適化により、アップグレード後もシステムの動作は変わりません。
上記の自動更新はアップグレード中に1回のみ実行されます。アップグレード後は、廃止された設定項目は無効になります。
この機能により、システムを再起動したりサービスを中断したりすることなく、パラメータを動的に変更し、検証して永続化することができます。これにより、日々のメンテナンスが容易になります。
クエリや接続をグローバルに強制終了する機能をサポート
enable-global-kill構成 (デフォルトで有効) を使用して、グローバル キル機能を制御できます。TiDB v6.1.0より前のバージョンでは、操作が大量のリソースを消費し、クラスタの安定性に問題が発生する場合、対象のTiDBインスタンスに接続してから
KILL TIDB ${id};のコマンドを実行して対象の接続と操作を終了する必要がありました。多くのTiDBインスタンスの場合、この方法は使いにくく、誤操作が発生しやすいという問題がありました。v6.1.0以降では、enable-global-kill構成が導入され、デフォルトで有効になっています。クライアントとTiDBの間にプロキシがある場合、他のクエリやセッションを誤って終了してしまう心配なく、任意のTiDBインスタンスでkillコマンドを実行して、指定した接続と操作を終了できます。現在、TiDBはCtrl+Cを使用してクエリまたはセッションを終了することをサポートしていません。TiKV API V2 (実験的)
v6.1.0 より前では、TiKV が Raw Key Valueストレージとして使用される場合、TiKV はクライアントから渡された生データのみを保存するため、基本的な Key Value の読み取りおよび書き込み機能のみを提供します。
TiKV API V2 は、次のような新しい Raw Key Valueストレージ形式とアクセス インターフェイスを提供します。
データはMVCCに保存され、データの変更タイムスタンプが記録されます。この機能は、変更データキャプチャ(CDC)と増分バックアップおよびリストアの実装の基盤となります。
データはさまざまな使用法に応じてスコープ設定され、単一の TiDB クラスター、トランザクション KV、RawKV アプリケーションの共存をサポートします。
MySQLとの互換性
MySQL のユーザーレベルロック管理との互換性をサポート
ユーザーレベルロックは、MySQL が組み込み関数を通じて提供する、ユーザーが名前を付けるロック管理システムです。ロック関数は、ロックのブロック、待機、その他のロック管理機能を提供できます。ユーザーレベルロックは、Rails、Elixir、Ecto などの ORM フレームワークでも広く使用されています。v6.1.0 以降、TiDB は MySQL 互換のユーザーレベルロック管理をサポートし、
GET_LOCK、RELEASE_LOCK、RELEASE_ALL_LOCKS関数をサポートしています。
データ移行
シャードテーブルのマージと移行の楽観的モードがGAになりました
DMは、シャードテーブルからデータをマージおよび移行するタスク向けに、楽観的モードに対応した多数のシナリオテストを追加しており、日常的な使用シナリオの90%をカバーしています。悲観的モードと比較して、楽観的モードはよりシンプルで効率的です。使用上の注意をよく理解した上で、楽観的モードを推奨します。
DM WebUIは指定されたパラメータに従ってタスクの開始をサポートします
移行タスクを開始する際、開始時刻とセーフモードの継続時間を指定できます。これは、多数のソースを持つ増分移行タスクを作成する場合に特に便利です。これにより、ソースごとにbinlogの開始位置を個別に指定する必要がなくなります。
TiDBデータ共有サブスクリプション
TiDBは、さまざまなサードパーティのデータエコシステムとのデータ共有をサポートします。
TiCDC は、TiDB 増分データを Avro 形式で Kafka に送信することをサポートしており、Confluent を介して KSQL や Snowflake などのサードパーティとデータを共有できます。
TiCDC は、テーブルごとに TiDB からさまざまな Kafka トピックに増分データをディスパッチすることをサポートしており、これを Canal-json 形式と組み合わせることで、Flink と直接データを共有できます。
TiCDC は SASL GSSAPI 認証タイプをサポートし、Kafka を使用した SASL 認証の例を追加します。
TiCDC は
charset=GBKテーブルの複製をサポートします。
互換性の変更
システム変数
設定ファイルのパラメータ
その他
プリペアドプランキャッシュをデフォルトで有効にする
新しいクラスターでは、 プリペアドプランキャッシュがデフォルトで有効化され、
Prepare/Executeリクエストの実行計画をキャッシュします。以降の実行では、クエリプランの最適化をスキップできるため、パフォーマンスが向上します。アップグレードされたクラスターは、設定ファイルから設定を継承します。新しいクラスターは新しいデフォルト値を使用するため、 プリペアドプランキャッシュ はデフォルトで有効化され、各セッションで最大100プランをキャッシュできます (capacity=100)。この機能のメモリ消費量については、 プリペアドプランキャッシュのメモリ管理を参照してください。TiDB v6.1.0より前のバージョンでは、
SHOW ANALYZE STATUSはインスタンスレベルのタスクを示し、タスクレコードはTiDBの再起動後に消去されます。TiDB v6.1.0以降では、SHOW ANALYZE STATUSはクラスタレベルのタスクを示し、タスクレコードは再起動後も保持されます。tidb_analyze_version = 2の場合、Job_info列にanalyze option情報が追加されます。TiKV内のSSTファイルが破損すると、TiKVプロセスがpanicになる可能性があります。TiDB v6.1.0より前では、SSTファイルが破損するとTiKVは直ちにpanic状態になりました。TiDB v6.1.0以降では、SSTファイルが破損してから1時間後にTiKVプロセスがpanicになります。
次の TiKV 設定項目は値を動的に変更することをサポートします。
raftstore.raft-entry-max-sizequota.foreground-cpu-timequota.foreground-write-bandwidthquota.foreground-read-bandwidthquota.max-delay-durationserver.grpc-memory-pool-quotaserver.max-grpc-send-msg-lenserver.raft-msg-max-batch-size
v6.1.0では、一部の設定ファイルパラメータがシステム変数に変換されます。以前のバージョンからv6.1.0クラスターにアップグレード(オンラインおよびオフラインアップグレードを含む)する場合は、以下の点にご注意ください。
- アップグレード前に設定ファイルに指定された設定項目が既に存在する場合、TiDBはアップグレードプロセス中に、設定された項目の値を対応するシステム変数の値に自動的に更新します。これにより、パラメータの最適化により、アップグレード後もシステムの動作は変わりません。
- 上記の自動更新はアップグレード中に1回のみ実行されます。アップグレード後は、廃止された設定項目は無効になります。
ダッシュボード ページはDM WebUIから削除されます。
dispatchers.topicとdispatchers.partitionが有効になっている場合、TiCDC を v6.1.0 より前のバージョンにダウングレードすることはできません。Avro プロトコルを使用するTiCDC Changefeed は、v6.1.0 より前のバージョンにダウングレードできません。
改善点
TiDB
TiKV
- インメモリ悲観的ロック使用時の CDC の古い値のヒット率を改善 #12279
- ヘルスチェックを改善して、利用できないRaftstoreを検出し、TiKV クライアントがリージョンキャッシュを時間内に更新できるようにします#12398
- Raft Engine のメモリ制限設定をサポート #12255
- TiKVは、破損したSSTファイルを自動的に検出して削除し、製品の可用性を向上させます#10578
- CDCはRawKV をサポートしています #11965
- 大きなスナップショットファイルを複数のファイルに分割することをサポートします #11595
- スナップショットGCがRaftstoreのメッセージループをブロックするのを防ぐために、スナップショットガベージコレクションをRaftstoreからバックグラウンドスレッドに移動します#11966
- gRPCメッセージの最大メッセージ長(
max-grpc-send-msg-len)と最大バッチサイズ(raft-msg-max-batch-size) の動的設定をサポート #12334 - Raft によるオンラインアンセーフリカバリ計画の実行をサポート #10483
PD
TiFlash
- 集約オペレーターのメモリ計算を最適化して、マージフェーズでより効率的なアルゴリズムが使用されるようにします。 #4451
ツール
バグ修正
TiDB
in関数がbitタイプのデータを処理する際に発生する可能性のあるpanicの問題を修正しました#33070UnionScanオペレーターが順序を維持できないために間違ったクエリ結果が発生する問題を修正#33175- 特定のケースで Merge Join 演算子が間違った結果を返す問題を修正#33042
- 動的プルーニングモードで
index join結果が間違っている可能性がある問題を修正しました #33231 - パーティションテーブルの一部のパーティションが削除されたときにデータがガベージコレクションされない可能性がある問題を修正#33620
- クラスターのPDノードが交換された後、一部のDDL文が一定期間スタックする可能性がある問題を修正しました#33908
INFORMATION_SCHEMA.CLUSTER_SLOW_QUERYテーブルへのクエリ実行時に TiDBサーバーがメモリ不足になる可能性がある問題を修正しました。この問題は、Grafana ダッシュボードでスロークエリをチェックすると発生する可能性があります。 #33893- システム変数
max_allowed_packetが有効にならない問題を修正#31422 - TopSQLモジュール のメモリリークの問題を修正 #34502 #34525
- PointGetプランでプランキャッシュが間違っている可能性がある問題を修正しました #32371
- RC分離レベルでプランキャッシュが開始されるとクエリ結果が間違っている可能性がある問題を修正しました #34447
TiKV
- TiKVインスタンスがオフラインになったときにRaftログの遅延が増加する問題を修正#12161
- マージ対象のリージョンが無効なために TiKV がpanicを起こし、予期せずピアを破棄する問題を修正しました #12232
- v5.3.1 または v5.4.0 から v6.0.0 以降のバージョンにアップグレードするときに TiKV が
failed to load_latest_optionsエラーを報告する問題を修正しました#12269 - メモリリソースが不足しているときにRaftログを追加することによって発生する OOM の問題を修正しました#11379
- ピアの破棄とリージョンのバッチ分割の競合により TiKV がpanicを起こす問題を修正しました #12368
stats_monitorがデッドループに陥った後、短時間で TiKVメモリ使用量が急増する問題を修正#12416- Follower Read 使用時に TiKV が
invalid store ID 0エラーを報告する問題を修正しました #12478
PD
TiDB Dashboard
- Top SQL機能が有効になる前に実行されていた SQL 文の CPU オーバーヘッドをTop SQLが収集できないバグを修正#33859
TiFlash
- 多数のINSERTおよびDELETE操作後に発生する可能性のあるデータの不整合を修正#4956
ツール
TiCDC
TiDB Data Migration (DM)
start-timeタイムゾーンの問題を修正し、DM の動作をダウンストリーム タイムゾーンの使用からアップストリーム タイムゾーンの使用に変更します#5471- タスクが自動的に再開された後にDMがより多くのディスクスペースを占有する問題を修正#3734 #5344
- チェックポイントフラッシュにより失敗した行のデータがスキップされる可能性がある問題を修正#5279
- 一部のケースでダウンストリームでフィルタリングされた DDL を手動で実行するとタスクの再開に失敗する可能性がある問題を修正しました #5272
case-sensitive: trueが設定されていない場合、大文字テーブルを複製できない問題を修正#5255- DM-workerが、
SHOW CREATE TABLE文によって返されるインデックスの先頭に主キーがない場合にpanicする問題を修正しました。 #5159 - GTID が有効になっているときやタスクが自動的に再開されたときに CPU 使用率が上昇し、大量のログが出力される問題を修正しました#5063
- DM WebUI のオフライン オプションとその他の使用上の問題を修正しました #4993
- アップストリームでGTIDが空の場合に増分タスクの開始に失敗する問題を修正 #3731
- 空の設定により dm-master がpanicを起こす可能性がある問題を修正#3732
TiDB Lightning