TiDB 3.0 GA リリースノート
発売日:2019年6月28日
TiDB バージョン: 3.0.0
TiDB アンシブル バージョン: 3.0.0
概要
2019 年 6 月 28 日に、TiDB 3.0 GA がリリースされました。対応する TiDB Ansible のバージョンは 3.0.0 です。 TiDB 2.1 と比較すると、このリリースでは次の点が大幅に改善されています。
- 安定性。 TiDB 3.0 は、最大 150 以上のノードと 300 TB 以上のstorage大規模なクラスターで長期的な安定性を実証しています。
- 使いやすさ。 TiDB 3.0 では、標準化されたスロー クエリ ログ、十分に開発されたログ ファイル仕様、ユーザーの運用コストを節約する
EXPLAIN ANALYZEや SQL トレースなどの新機能など、使いやすさが多面的に改善されています。 - パフォーマンス。 TiDB 3.0 のパフォーマンスは、TPC-C ベンチマークで TiDB 2.1 の 4.5 倍、Sysbench ベンチマークで 1.5 倍以上です。ビューのサポートのおかげで、TPC-H 50G Q15 は正常に実行できるようになりました。
- ウィンドウ関数、ビュー (Experimental)、分割テーブル、プラグイン フレームワーク、悲観的ロック (Experimental)、および
SQL Plan Managementを含む新機能。
TiDB
- 新機能
- サポートウィンドウ機能;
NTILE、LEAD、LAG、PERCENT_RANK、NTH_VALUE、CUME_DIST、FIRST_VALUE、LAST_VALUE、RANK、DENSE_RANK、およびROW_NUMBERを含む、MySQL 8.0 のすべてのウィンドウ関数と互換性があります。 - サポート ビュー (Experimental)
- テーブル パーティションの改善
- サポート範囲パーティション
- ハッシュパーティションをサポート
- IP ホワイトリスト ( Enterprise ) や監査ログ ( Enterprise ) などのプラグインをサポートするプラグイン フレームワークを追加します。
- クエリの安定性を確保するために SQL 実行計画バインディングを作成するための SQL 計画管理機能をサポートします (Experimental)。
- サポートウィンドウ機能;
- SQL オプティマイザー
NOT EXISTSサブクエリを最適化し、それをAnti Semi Joinに変換してパフォーマンスを向上させるOuter Joinの定数伝播を最適化し、Outer Join除去の最適化ルールを追加して、効果のない計算を減らし、パフォーマンスを向上させます。INサブクエリを最適化して、集計後にInner Joinを実行し、パフォーマンスを向上させます- より多くのシナリオに適応するための最適化
Index Join - Range Partition の Partition Pruning 最適化ルールを改善
- クエリ ロジックを
_tidb_rowidに最適化して、テーブル全体のスキャンを回避し、パフォーマンスを向上させます。 - フィルターに関連する列がある場合、複合インデックスのアクセス条件を抽出するときに、より多くのインデックスのプレフィックス列を一致させてパフォーマンスを向上させます
- 列間の順序相関を使用してコスト見積もりの精度を向上させる
- 貪欲な戦略と動的計画法アルゴリズムに基づいて最適化
Join Orderを行い、複数のテーブルの結合操作を高速化します。 - Skyline Pruning をサポートし、クエリの安定性を向上させるために実行計画が統計に過度に依存するのを防ぐいくつかのルールを使用します。
- NULL 値を持つ単一列インデックスの行数推定の精度を向上
- 各リージョンでランダムにサンプリングする
FAST ANALYZEをサポートして、完全なテーブル スキャンを回避し、統計収集でパフォーマンスを向上させます - 統計収集でパフォーマンスを向上させるために、単調に増加するインデックス列に対するインクリメンタル Analyze 操作をサポートします。
DOステートメントでのサブクエリの使用をサポート- トランザクションで
Index Joinを使用するサポート - パラメーターなしの DDL ステートメントをサポートするために
prepareexecute最適化します stats-lease変数の値が 0 の場合に統計を自動ロードするようにシステムの動作を変更します。- 履歴統計のエクスポートをサポート
- ヒストグラムの
dump相関loadサポート
- SQL 実行エンジン
- ログ出力の最適化: トラブルシューティングを容易にするために、
EXECUTEはユーザー変数を出力し、COMMITはスロー クエリ ログを出力します。 - SQLチューニングの使いやすさを向上させる機能を
EXPLAIN ANALYZEサポート - 次の行の ID を取得する
admin show next_row_idコマンドをサポート - 6 つの組み込み関数を追加:
JSON_QUOTE、JSON_ARRAY_APPEND、JSON_MERGE_PRESERVE、BENCHMARK、COALESCE、およびNAME_CONST - チャンク サイズの制御ロジックを最適化して、クエリ コンテキストに基づいて動的に調整し、SQL の実行時間とリソース消費を削減します。
TableReader、IndexReader、IndexLookupReaderの 3 つの演算子でメモリ使用量の追跡と制御をサポート- 空の
ON条件をサポートするように Merge Join 演算子を最適化する - 列が多すぎる単一テーブルの書き込みパフォーマンスを最適化する
- 逆順でのデータのスキャンをサポートすることで、
admin show ddl jobsのパフォーマンスを向上させます - ホットスポットの問題を軽減するためにテーブルリージョン を手動で分割する
split table regionステートメントを追加します。 split index regionステートメントを追加して、インデックスリージョンを手動で分割し、ホットスポットの問題を軽減します- ブロックリストを追加して、式をコプロセッサーにプッシュすることを禁止します
Expensive Queryログを最適化して、構成された実行時間またはメモリの制限を超えたときにログに SQL クエリを出力します。
- ログ出力の最適化: トラブルシューティングを容易にするために、
- DDL
- 文字セット
utf8からutf8mb4への移行のサポート - デフォルトの文字セットを
utf8からutf8mb4に変更します - データベースの文字セットと照合順序を変更するステートメントを
alter schema追加します。 - サポート ALTER アルゴリズム
INPLACE/INSTANT - サポート
SHOW CREATE VIEW - サポート
SHOW CREATE USER - 誤って削除されたテーブルの高速リカバリをサポート
- ADD INDEX の同時実行数の動的な調整をサポート
CREATE TABLEステートメントを使用してテーブルを作成するときにリージョンを事前に割り当てるpre_split_regionsオプションを追加して、テーブル作成後の大量の書き込みによって発生する書き込みホット リージョンを軽減します。- ホットスポットの問題を軽減するために、SQL ステートメントを使用して指定されたテーブルのインデックスと範囲によるリージョンの分割をサポートします
ddl_error_count_limitグローバル変数を追加して、DDL タスクの再試行回数を制限します- ホットスポットの問題を軽減するために、列に AUTO_INCREMENT 属性が含まれている場合に行 ID を分散するために
SHARD_ROW_ID_BITSを使用する機能を追加します - 無効な DDL メタデータの有効期間を最適化して、TiDB クラスターのアップグレード後に DDL 操作の通常の実行を回復する速度を上げます
- 文字セット
- 取引
- 悲観的トランザクション モードのサポート (Experimental)
- トランザクション処理ロジックを最適化して、より多くのシナリオに適応します。
- デフォルト値
tidb_disable_txn_auto_retryをonに変更します。これは、自動コミットされていないトランザクションが再試行されないことを意味します tidb_batch_commitシステム変数を追加して、トランザクションを複数のトランザクションに分割して同時に実行するtidb_low_resolution_tsoシステム変数を追加して、バッチで取得する TSO の数を制御し、トランザクションが TSO を要求する回数を減らして、一貫性の要件が比較的低いシナリオでのパフォーマンスを向上させます。- 分離レベルがSERIALIZABLEに設定されている場合にエラーを報告するかどうかを制御する
tidb_skip_isolation_level_check変数を追加します。 tidb_disable_txn_auto_retryシステム変数を変更して、再試行可能なすべてのエラーで機能するようにします。
- デフォルト値
- 権限管理
ANALYZE、USE、SET GLOBAL、およびSHOW PROCESSLISTステートメントに対して権限チェックを実行する- 役割ベースのアクセス制御 (RBAC) をサポート (Experimental)
- サーバ
- スロー クエリ ログを最適化します。
- ログ形式の再構築
- ログの内容を最適化する
- ログ クエリ メソッドを最適化して、メモリテーブルの
INFORMATION_SCHEMA.SLOW_QUERYステートメントとADMIN SHOW SLOWステートメントを使用してスロー クエリ ログをクエリできるようにします。
- ツールによる収集と分析を容易にするために、ログシステムを再構築した統一ログフォーマット仕様を開発する
- SQL ステートメントを使用した TiDB Binlogサービスの管理をサポートします。これには、ステータスのクエリ、 TiDB Binlog の有効化、TiDB Binlog戦略の維持と送信が含まれます。
unix_socketを使用したデータベースへの接続をサポート- SQL ステートメントのサポート
Trace - トラブルシューティングを容易にするために、
/debug/zipHTTP インターフェイスを介して TiDB インスタンスの情報を取得することをサポートします。 - トラブルシューティングを容易にするために監視項目を最適化します。
- 実際のデータ量と統計に基づく推定データ量の差を監視する監視項目を
high_error_rate_feedback_total追加 - データベース ディメンションに QPS 監視項目を追加する
- 実際のデータ量と統計に基づく推定データ量の差を監視する監視項目を
- システム初期化プロセスを最適化して、DDL 所有者のみが初期化を実行できるようにします。これにより、初期化またはアップグレードの起動時間が短縮されます。
kill queryの実行ロジックを最適化して、パフォーマンスを改善し、リソースが適切に解放されるようにします- 起動オプション
config-checkを追加して、構成ファイルの有効性を確認します tidb_back_off_weightシステム変数を追加して、内部エラーの再試行のバックオフ時間を制御しますwait_timeoutおよびinteractive_timeoutシステム変数を追加して、許容される最大アイドル接続を制御します。- 接続確立時間を短縮するために、TiKV 用の接続プールを追加します。
- スロー クエリ ログを最適化します。
- 互換性
ALLOW_INVALID_DATESSQLモードをサポート- MySQL 320 Handshake プロトコルをサポート
- 自動インクリメント列として符号なし BIGINT 列をマニフェストするサポート
SHOW CREATE DATABASE IF NOT EXISTS構文をサポート- CSV ファイルのフォールト トレランスを
load dataに最適化する - フィルタリング条件にユーザー変数が含まれている場合、述語プッシュダウン操作を放棄して、ウィンドウ関数をシミュレートするためにユーザー変数を使用する MySQL の動作との互換性を向上させます。
PD
- 単一ノードからのクラスターの再作成をサポート
- リージョンメタデータを etcd から go-leveldbstorageエンジンに移行して、大規模なクラスターの etcd でのstorageのボトルネックを解決します
- API
- Tombstone ストアをクリアする
remove-tombstoneAPI を追加します。 ScanRegionsAPI を追加して、リージョン情報をバッチ クエリしますGetOperatorAPI を追加して、実行中のオペレーターを照会しますGetStoresAPI のパフォーマンスを最適化する
- Tombstone ストアをクリアする
- 構成
- 構成アイテムのエラーを回避するために構成チェック ロジックを最適化する
- リージョンマージの方向を制御するには、
enable-two-way-mergeを追加します。 hot-region-schedule-limitを追加して、ホット リージョンのスケジュール レートを制御します- 複数のしきい値に連続してヒットした場合、ホットスポットを識別するために
hot-region-cache-hits-thresholdを追加します - 1 分間に許可されるバランスリージョンオペレーターの最大数を制御する
store-balance-rate構成項目を追加します
- スケジューラの最適化
- 店舗ごとにオペレーターの速度を個別に制御するための店舗制限メカニズムを追加します
waitingOperatorキューをサポートして、異なるスケジューラ間のリソース競合を最適化します- スケジュール操作を TiKV にアクティブに送信するためのスケジュール レート制限をサポートします。これにより、1 つのノードで同時に実行されるスケジューリング タスクの数が制限されるため、スケジューリング レートが向上します。
- 制限メカニズムに拘束されないように
Region Scatterのスケジューリングを最適化する shuffle-hot-regionスケジューラーを追加して、ホットスポットのスケジューリングが不十分なシナリオで TiKV の安定性テストを容易にします
- シミュレーター
- データ インポート シナリオ用のシミュレーターを追加する
- ストアの異なるハートビート間隔の設定をサポート
- その他
- etcd をアップグレードして、一貫性のないログ出力形式、事前投票でのLeader選択の失敗、およびリースのデッドロックの問題を解決します。
- ツールによる収集と分析を容易にするために、ログシステムを再構築した統一ログフォーマット仕様を開発する
- スケジューリング パラメーター、クラスター ラベル情報、TSO 要求の処理に PD が消費する時間、ストア ID、アドレス情報などの監視メトリックを追加します。
TiKV
- 分散 GC と同時ロック解決をサポートして、GC パフォーマンスを向上
raw_scanとraw_batch_scanを逆にサポート- マルチスレッドのRaftstoreとマルチスレッドの適用をサポートして、単一ノード内でのスケーラビリティ、同時実行容量、およびリソースの使用を改善します。同じレベルのプレッシャーの下でパフォーマンスが 70% 向上
- Raftメッセージのバッチ送受信をサポートし、書き込みが集中するシナリオで TPS を 7% 向上
- 書き込み停止を回避するためにスナップショットを適用する前に RocksDB レベル 0 ファイルのチェックをサポート
- 値のサイズが 1KiB を超えるシナリオの書き込みパフォーマンスを向上させ、書き込み増幅をある程度軽減するキー値プラグインである Titan を導入します。
- 悲観的トランザクション モードのサポート (Experimental)
- HTTP 経由での監視情報の取得をサポート
- キーがない場合にのみプリライトが成功するように、
Insertのセマンティクスを変更します。 - ツールによる収集と分析を容易にするために、ログシステムを再構築した統一ログフォーマット仕様を開発する
- 構成情報とキー バインド クロッシングに関連するパフォーマンス メトリックを追加します。
- RawKV でローカル リーダーをサポートしてパフォーマンスを向上させる
- エンジン
- メモリ管理を最適化して、メモリの割り当てとコピーを
Iterator Key Bound Optionに減らす - 異なる列ファミリー間で
block cache共有をサポート
- メモリ管理を最適化して、メモリの割り当てとコピーを
- サーバ
- コンテキスト スイッチのオーバーヘッドを
batch commandsから減らす txn schedulerを削除read indexに関連する監視項目GC worker追加
- コンテキスト スイッチのオーバーヘッドを
- ラフトストア
- RaftStore からの CPU 消費を最適化するための Hibernate Regions のサポート (Experimental)
- ローカル リーダー スレッドを削除する
- コプロセッサー
- 計算フレームワークをリファクタリングして、ベクトル演算子、ベクトル式を使用した計算、およびベクトル集計を実装してパフォーマンスを向上させます
- TiDB の
EXPLAIN ANALYZEステートメントのオペレーター実行ステータスの提供をサポート work-stealingスレッド プール モデルに切り替えてコンテキスト スイッチのコストを削減する
ツール
- TiDB Lightning
- データ テーブルのリダイレクト レプリケーションをサポート
- CSVファイルのインポートをサポート
- SQL から KV ペアへの変換のパフォーマンスを向上させる
- 単一テーブルのバッチ インポートをサポートしてパフォーマンスを向上させる
- TiKV-importer のパフォーマンスを向上させるために、大きなテーブルのデータとインデックスを個別にインポートすることをサポートします
- 新しいファイルで列データが欠落している場合に、
row_idまたはデフォルトの列値を使用して欠落している列を埋めることをサポートします - SSTファイルをTiKVにアップロードする際の速度
TIKV-importerの設定をサポート
- TiDBBinlog
- Drainerに
advertise-addr構成を追加して、コンテナー環境でブリッジ モードをサポートします。 - Pumpに
GetMvccByEncodeKey関数を追加して、トランザクション ステータスのクエリを高速化します。 - コンポーネント間の通信データの圧縮をサポートして、ネットワーク リソースの消費を削減します。
- Kafka からのbinlog の読み取りをサポートする Arbiter ツールを追加し、データを MySQL にレプリケートします。
- Reparoによるレプリケーションを必要としないファイルの除外をサポート
- 生成された列の複製をサポート
syncer.sql-mode構成アイテムを追加して、さまざまな SQL モードを使用して DDL クエリを解析することをサポートします- レプリケートされないテーブルのフィルタリングをサポートする
syncer.ignore-table構成アイテムを追加します
- Drainerに
- 同期差分インスペクター
- チェックポイントをサポートして検証ステータスを記録し、再起動後に最後に保存されたポイントから検証を続行します
- チェックサムを計算してデータの整合性をチェックする構成項目を
only-use-checksum追加します - より多くのシナリオに適応するために比較のためにチャンクを分割するために TiDB 統計と複数の列を使用するサポート
TiDB アンシブル
- 次の監視コンポーネントを安定したバージョンにアップグレードします。
- Prometheus V2.2.1 から V2.8.1 へ
- V0.4.0からV0.7.0へのプッシュゲートウェイ
- V0.15.2からV0.17.0へのNode_exporter
- V0.14.0からV0.17.0へのAlertmanager
- V4.6.3 から V6.1.6 への Grafana
- V2.5.14 から V2.7.11 までの Ansible
- TiKV サマリー監視ダッシュボードを追加して、クラスターのステータスを便利に表示します
- TiKV トラブルシューティング監視ダッシュボードを追加して、重複するアイテムを削除し、トラブルシューティングを容易にします
- TiKV 詳細監視ダッシュボードを追加して、デバッグとトラブルシューティングを容易にします
- ローリング更新中にバージョンの一貫性を確認する同時チェックを追加して、更新のパフォーマンスを向上させます
- TiDB Lightningの展開と運用をサポート
- テーブルごとのLeader分布の表示をサポートするために
table-regions.pyスクリプトを最適化します - TiDB 監視を最適化し、SQL カテゴリ別にレイテンシー関連の監視項目を追加
- オペレーティング システムのバージョン制限を変更して、CentOS 7.0+ および Red Hat 7.0+ オペレーティング システムのみをサポートするようにします。
- クラスタの最大 QPS を予測するための監視項目を追加します (デフォルトでは非表示)