TiDB 3.0 GA リリース ノート
発売日:2019年6月28日
TiDB バージョン: 3.0.0
TiDB Ansible バージョン: 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 倍以上です。 View のサポートのおかげで、TPC-H 50G Q15 は正常に実行できるようになりました。
- ウィンドウ関数、ビュー (Experimental)、パーティション テーブル、プラグイン フレームワーク、悲観的ロック (Experimental)、および
SQL Plan Management
を含む新機能。
TiDB
- 新機能
- ウィンドウ関数をサポートします。 MySQL 8.0 のすべてのウィンドウ関数(
NTILE
、LEAD
、LAG
、PERCENT_RANK
、NTH_VALUE
、CUME_DIST
、FIRST_VALUE
、LAST_VALUE
、RANK
、DENSE_RANK
、ROW_NUMBER
を含む) と互換性があります。 - サポートビュー (Experimental)
- テーブルパーティションの改善
- サポート範囲パーティション
- ハッシュパーティションのサポート
- プラグイン フレームワークを追加し、IP ホワイトリスト ( Enterprise ) や監査ログ ( Enterprise ) などのプラグインをサポートします。
- SQL 実行プラン バインディングを作成してクエリの安定性を確保する SQL プラン管理機能をサポート (Experimental)
- ウィンドウ関数をサポートします。 MySQL 8.0 のすべてのウィンドウ関数(
- SQLオプティマイザー
NOT EXISTS
サブクエリを最適化し、Anti Semi Join
に変換してパフォーマンスを向上させます。Outer Join
の定数伝播を最適化し、Outer Join
消去法による最適化ルールを追加して非効率な計算を削減し、パフォーマンスを向上させます。- パフォーマンスを向上させるために、集計後に
Inner Join
サブクエリを実行するようにIN
のサブクエリを最適化します。 Index Join
最適化してより多くのシナリオに適応する- レンジパーティションのパーティションプルーニング最適化ルールを改善
- クエリ ロジックを
_tidb_rowid
に最適化して、テーブル全体のスキャンを回避し、パフォーマンスを向上させます。 - パフォーマンスを向上させるためにフィルタ内に関連する列がある場合、複合インデックスのアクセス条件を抽出するときにインデックスのより多くのプレフィックス列と一致します。
- 列間の注文相関を使用してコスト見積もりの精度を向上させる
- 貪欲戦略と動的プログラミング アルゴリズムに基づいて
Join Order
を最適化し、複数のテーブルの結合操作を高速化します。 - Skyline Pruning をサポートし、クエリの安定性を向上させるために実行計画が統計に過度に依存することを防ぐいくつかのルールを備えています。
- NULL 値を含む単一列インデックスの行数推定の精度を向上させます。
- テーブル全体のスキャンを回避し、統計収集のパフォーマンスを向上させるために、各リージョンでランダムにサンプリングするサポート
FAST ANALYZE
- 単調に増加するインデックス列に対する増分分析操作をサポートし、統計収集のパフォーマンスを向上させます。
DO
ステートメントでのサブクエリの使用のサポート- トランザクションでの
Index Join
使用のサポート - パラメータのない DDL ステートメントをサポートするために
prepare
/execute
を最適化します。 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 の実行時間とリソース消費を削減します。
- 3 つの演算子 (
TableReader
IndexReader
およびIndexLookupReader
) でのメモリ使用量の追跡と制御をサポートします。 - 空の
ON
条件をサポートするように Merge Join 演算子を最適化します。 - 列が多すぎる単一テーブルの書き込みパフォーマンスを最適化する
- 逆順でのデータのスキャンをサポートすることで
admin show ddl jobs
のパフォーマンスを向上させます。 split table region
ステートメントを追加してテーブルリージョンを手動で分割し、ホットスポットの問題を軽減しますsplit index region
ステートメントを追加してインデックスリージョンを手動で分割し、ホットスポットの問題を軽減します。- 式をコプロセッサーにプッシュダウンすることを禁止するブロックリストを追加する
- 構成された実行時間またはメモリの制限を超えた場合に SQL クエリをログに出力するように
Expensive Query
ログを最適化します。
- ログ出力の最適化:
- 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 属性が含まれる場合に
SHARD_ROW_ID_BITS
を使用して行 ID を分散する機能を追加します。 - 無効な 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/zip
インターフェイスを介した TiDB インスタンスの情報の取得をサポートします。 - トラブルシューティングを容易にするために監視項目を最適化します。
- 実際のデータ量と統計に基づく推定データ量の差を監視する監視項目を
high_error_rate_feedback_total
追加 - データベース ディメンションに QPS モニタリング項目を追加する
- 実際のデータ量と統計に基づく推定データ量の差を監視する監視項目を
- DDL 所有者のみが初期化を実行できるようにシステム初期化プロセスを最適化します。これにより、初期化またはアップグレードの起動時間が短縮されます。
kill query
の実行ロジックを最適化してパフォーマンスを向上させ、リソースが適切に解放されるようにします。- 設定ファイルの有効性を確認するための起動オプション
config-check
を追加します。 tidb_back_off_weight
システム変数を追加して、内部エラーの再試行のバックオフ時間を制御しますwait_timeout
およびinteractive_timeout
システム変数を追加して、許可される最大アイドル接続を制御します- TiKVの接続プールを追加して接続確立時間を短縮します
- 遅いクエリのログを最適化します。
- 互換性
ALLOW_INVALID_DATES
SQL モードをサポート- MySQL 320 ハンドシェイク プロトコルのサポート
- 符号なし BIGINT 列を自動インクリメント列としてマニフェスト化するサポート
SHOW CREATE DATABASE IF NOT EXISTS
構文をサポートする- CSV ファイルのフォールト トレランスを
load data
に最適化する - ユーザー変数を使用してウィンドウ関数をシミュレートする MySQL の動作との互換性を向上させるために、フィルター条件にユーザー変数が含まれている場合は述語プッシュダウン操作を放棄します。
PD
- 単一ノードからのクラスターの再作成のサポート
- リージョンのメタデータを etcd から go-leveldbstorageエンジンに移行して、大規模クラスターの etcd のstorageボトルネックを解決します。
- API
- Tombstone ストアをクリアするための
remove-tombstone
API を追加します - リージョン情報をバッチクエリするための
ScanRegions
API を追加します - 実行中のオペレーターをクエリする
GetOperator
API を追加します GetStores
APIのパフォーマンスを最適化する
- Tombstone ストアをクリアするための
- 構成
- 構成項目のエラーを回避するために構成チェックロジックを最適化する
enable-two-way-merge
を追加してリージョン結合の方向を制御しますhot-region-schedule-limit
を追加して、ホット リージョンのスケジューリング レートを制御します- 複数のしきい値に連続して到達した場合にホットスポットを識別するには
hot-region-cache-hits-threshold
を追加します。 store-balance-rate
構成項目を追加して、1 分あたりに許可されるバランスリージョンオペレーターの最大数を制御します
- スケジューラの最適化
- 店舗ごとにオペレーターの速度を個別に制御するための店舗制限メカニズムを追加します。
waitingOperator
キューをサポートして、異なるスケジューラー間のリソース競合を最適化します。- スケジューリング操作を TiKV にアクティブに送信するためのスケジューリング レート制限をサポートします。これにより、単一ノード上の同時スケジューリング タスクの数が制限されるため、スケジューリング速度が向上します。
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 ファイルのチェックをサポートします
- Titan の導入
- 悲観的トランザクション モードのサポート (Experimental)
- HTTP経由での監視情報の取得をサポート
Insert
のセマンティクスを変更して、キーがない場合にのみ Prewrite が成功できるようにします。- ツールによる収集と分析を容易にするために、再構築されたログ システムを使用して統一されたログ形式仕様を開発します。
- 構成情報とキー バインド交差に関連するパフォーマンス メトリクスを追加します。
- RawKV でローカル リーダーをサポートしてパフォーマンスを向上させる
- エンジン
- メモリ管理を最適化して、メモリの割り当てとコピーを削減します
Iterator Key Bound Option
- 異なる列ファミリー間での
block cache
共有のサポート
- メモリ管理を最適化して、メモリの割り当てとコピーを削減します
- サーバ
- コンテキストスイッチのオーバーヘッドを
batch commands
から削減 txn scheduler
を削除read index
とGC worker
に関する監視項目を追加
- コンテキストスイッチのオーバーヘッドを
- RaftStore
- RaftStore からの CPU 消費を最適化するための Hibernate リージョンのサポート (Experimental)
- ローカルリーダースレッドを削除する
- コプロセッサー
- 計算フレームワークをリファクタリングして、ベクトル演算子、ベクトル式を使用した計算、ベクトル集計を実装し、パフォーマンスを向上させます。
- TiDB の
EXPLAIN ANALYZE
ステートメントのオペレーター実行ステータスの提供をサポート work-stealing
スレッド プール モデルに切り替えてコンテキスト スイッチのコストを削減します。
ツール
- TiDB Lightning
- データテーブルのリダイレクトされたレプリケーションをサポート
- CSVファイルのインポートをサポート
- SQL から KV ペアへの変換のパフォーマンスの向上
- 単一テーブルのバッチインポートをサポートしてパフォーマンスを向上させます
- TiKV インポーターのパフォーマンスを向上させるために、大きなテーブルのデータとインデックスを個別にインポートすることをサポートします。
- 新しいファイルで列データが欠落している場合に、
row_id
またはデフォルトの列値を使用して欠落している列を埋めるサポート - SST ファイルを TiKV にアップロードする際の速度制限の設定を
TIKV-importer
でサポート
- TiDBBinlog
- コンテナ環境でブリッジ モードをサポートするために、 Drainerに
advertise-addr
構成を追加します。 - Pumpに
GetMvccByEncodeKey
関数を追加して、トランザクション ステータスのクエリを高速化します。 - コンポーネント間の通信データの圧縮をサポートし、ネットワークリソースの消費を削減します
- Kafka からのbinlogの読み取りをサポートする Arbiter ツールを追加し、データを MySQL にレプリケートします
- Reparoによるレプリケーションを必要としないファイルのフィルタリングのサポート
- 生成された列のレプリケートをサポート
- DDL クエリを解析するためのさまざまな SQL モードの使用をサポートする
syncer.sql-mode
構成項目を追加します。 - 複製されないテーブルのフィルタリングをサポートするための
syncer.ignore-table
構成アイテムを追加します
- コンテナ環境でブリッジ モードをサポートするために、 Drainerに
- 同期差分インスペクター
- チェックポイントをサポートして検証ステータスを記録し、再起動後に最後に保存されたポイントから検証を続行します
- チェックサムを計算してデータの整合性をチェックするための構成アイテムを
only-use-checksum
追加します - TiDB 統計と複数の列を使用してチャンクを分割して比較し、より多くのシナリオに適応できるようにサポート
TiDB Ansible
- 次の監視コンポーネントを安定バージョンにアップグレードします。
- プロメテウス V2.2.1 から V2.8.1 へ
- V0.4.0 から V0.7.0 へのプッシュゲートウェイ
- Node_exporter V0.15.2 から V0.17.0 へ
- アラートマネージャー V0.14.0 から V0.17.0 へ
- Grafana V4.6.3 から V6.1.6 へ
- Ansible V2.5.14 から V2.7.11 へ
- TiKV 概要監視ダッシュボードを追加して、クラスターのステータスを簡単に表示します
- TiKV トラブルシューティング監視ダッシュボードを追加して重複アイテムを削除し、トラブルシューティングを容易にします。
- TiKV 詳細監視ダッシュボードを追加して、デバッグとトラブルシューティングを容易にします。
- 更新のパフォーマンスを向上させるために、ローリング アップデート中にバージョン整合性の同時チェックを追加します。
- TiDB Lightningの導入と運用をサポート
- テーブルごとのLeader分布の表示をサポートするように
table-regions.py
スクリプトを最適化します。 - TiDB 監視を最適化し、SQL カテゴリごとにレイテンシー関連の監視項目を追加します
- CentOS 7.0+ および Red Hat 7.0+ オペレーティング システムのみをサポートするようにオペレーティング システムのバージョン制限を変更します。
- クラスターの最大 QPS を予測する監視項目を追加します (デフォルトでは非表示)