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 倍以上です。Views のサポートにより、TPC-H 50G Q15 は正常に実行できるようになりました。
- ウィンドウ関数、ビュー (Experimental)、パーティション テーブル、プラグイン フレームワーク、悲観的ロック (Experimental)、および
SQL Plan Management
などの新機能。
ティビ
- 新機能
- ウィンドウ
CUME_DIST
FIRST_VALUE
サポート。1、3、5、7、9、11、13、15、17、19、21RANK
DENSE_RANK
MySQLLEAD
のすべてNTILE
ウィンドウ関数PERCENT_RANK
LAG
性LAST_VALUE
ありNTH_VALUE
ROW_NUMBER
- ビューのサポート (Experimental)
- テーブルパーティションの改善
- 範囲パーティションのサポート
- ハッシュパーティションをサポート
- IP ホワイトリスト ( Enterprise ) や監査ログ ( Enterprise ) などのプラグインをサポートするプラグイン フレームワークを追加します。
- クエリの安定性を確保するために SQL 実行プラン バインディングを作成する SQL プラン管理機能をサポートします (Experimental)
- ウィンドウ
- SQL オプティマイザー
NOT EXISTS
サブクエリを最適化し、Anti Semi Join
に変換してパフォーマンスを向上させます。Outer Join
の定数伝播を最適化し、Outer Join
除去の最適化ルールを追加して、非効率的な計算を減らし、パフォーマンスを向上させます。- パフォーマンスを向上させるために、集計後に
IN
サブクエリをInner Join
実行するように最適化します。 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
をサポートします BENCHMARK
つCOALESCE
組み込み関数NAME_CONST
JSON_ARRAY_APPEND
しJSON_MERGE_PRESERVE
:JSON_QUOTE
- チャンクサイズの制御ロジックを最適化し、クエリコンテキストに基づいて動的に調整することで、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
文を追加して、データベースの文字セットと照合順序を変更します。INSTANT
アルゴリズムをサポートINPLACE
- サポート
SHOW CREATE VIEW
- サポート
SHOW CREATE USER
- 誤って削除されたテーブルの高速回復をサポート
- ADD INDEXの同時実行数を動的に調整する機能をサポート
- テーブル作成後の大量の書き込みによって発生する書き込みホット領域を軽減するために、
CREATE TABLE
ステートメントを使用してテーブルを作成するときに領域を事前に割り当てるpre_split_regions
オプションを追加します。 - ホットスポットの問題を軽減するために、SQL ステートメントを使用して指定されたテーブルのインデックスと範囲でリージョンを分割することをサポートします。
- DDLタスクの再試行回数を制限するために
ddl_error_count_limit
グローバル変数を追加します。 - ホットスポットの問題を軽減するために、列に 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
ステートメントに対して権限チェックSHOW PROCESSLIST
SET GLOBAL
する- ロールベースのアクセス制御 (RBAC) のサポート (Experimental)
- サーバ
- 遅いクエリ ログを最適化します。
- ログ形式の再構築
- ログコンテンツを最適化する
- メモリテーブルの
INFORMATION_SCHEMA.SLOW_QUERY
とADMIN SHOW SLOW
ステートメントを使用してスロー クエリ ログをクエリできるように、ログ クエリ メソッドを最適化します。
- ツールによる収集と分析を容易にするために、ログシステムを再構築した統一ログフォーマット仕様を開発する
- ステータスのクエリ、TiDB Binlogの有効化、TiDB Binlog戦略の維持と送信など、SQL ステートメントを使用した TiDB Binlogサービスの管理をサポートします。
unix_socket
使用してデータベースに接続することをサポートします- SQL文のサポート
Trace
- トラブルシューティングを容易にするために、
/debug/zip
HTTP インターフェイスを介して 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のstorageボトルネックを解決するために、リージョンメタデータをetcdからgo-leveldbstorageエンジンに移行します。
- 翻訳
- トゥームストーンストアをクリアするための
remove-tombstone
API を追加します - リージョン情報を一括クエリするAPI
ScanRegions
を追加 - 実行中の演算子を照会するための
GetOperator
API を追加します。 GetStores
APIのパフォーマンスを最適化する
- トゥームストーンストアをクリアするための
- 構成
- 構成チェックロジックを最適化して構成項目のエラーを回避する
- リージョン結合の方向を制御するには
enable-two-way-merge
を追加します - ホットリージョンのスケジュールレートを制御するには
hot-region-schedule-limit
を追加します - 複数のしきい値を連続して超える場合は、ホットスポットを識別するために
hot-region-cache-hits-threshold
を追加します。 - 1 分あたりに許可されるバランスリージョンオペレータの最大数を制御するための
store-balance-rate
構成項目を追加します。
- スケジューラの最適化
- 各店舗のオペレーターの速度を個別に制御する店舗制限メカニズムを追加
- 異なるスケジューラ間のリソース競合を最適化するために
waitingOperator
キューをサポートします。 - スケジューリング レート制限をサポートし、スケジューリング操作を TiKV にアクティブに送信します。これにより、単一ノード上の同時スケジューリング タスクの数を制限することで、スケジューリング レートが向上します。
- 制限機構に制約されないよう
Region Scatter
スケジュールを最適化する - ホットスポットのスケジュールが不十分なシナリオで TiKV の安定性テストを容易にするために
shuffle-hot-region
スケジューラを追加します。
- シミュレーター
- データインポートシナリオのシミュレーターを追加
- ストアの異なるハートビート間隔の設定をサポート
- その他
- etcd をアップグレードして、ログ出力形式の不一致、事前投票でのLeader選択の失敗、リースのデッドロックの問題を解決します。
- ツールによる収集と分析を容易にするために、ログシステムを再構築した統一ログフォーマット仕様を開発する
- スケジューリング パラメータ、クラスター ラベル情報、PD が TSO 要求、ストア ID、アドレス情報を処理するために消費した時間などの監視メトリックを追加します。
ティクヴ
- 分散GCと同時ロック解決をサポートし、GCパフォーマンスを向上
- サポートは
raw_scan
とraw_batch_scan
逆にしました - マルチスレッドRaftstoreとマルチスレッドApplyをサポートし、単一ノード内でのスケーラビリティ、同時実行能力、リソース使用率を向上させます。同じレベルの負荷でパフォーマンスが70%向上します。
- Raftメッセージのバッチ受信と送信をサポートし、書き込み集中型のシナリオで TPS を 7% 向上します。
- 書き込み停止を回避するために、スナップショットを適用する前に RocksDB レベル 0 ファイルのチェックをサポートします。
- 1KiBを超える値のサイズでの書き込みパフォーマンスを向上させ、ある程度の書き込み増幅を軽減するキー値プラグインであるTitanを導入します。
- 悲観的トランザクションモードをサポートする(Experimental)
- HTTP経由で監視情報を取得できる
Insert
のセマンティクスを変更して、キーがない場合にのみ Prewrite が成功するようにします。- ツールによる収集と分析を容易にするために、ログシステムを再構築した統一ログフォーマット仕様を開発する
- 構成情報とキー境界の交差に関連するパフォーマンスメトリックを追加します
- パフォーマンスを向上させるために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インポーターのパフォーマンスを向上させるために、大きなテーブルのデータとインデックスを個別にインポートすることをサポートします。
- 新しいファイルに列データが欠落している場合、
row_id
またはデフォルトの列値を使用して欠落している列を埋めることをサポートします。 - SST ファイルを TiKV にアップロードする際の速度制限を
TIKV-importer
に設定できるようになりました
- TiDBBinlog
- コンテナ環境でブリッジモードをサポートするために、 Drainerに
advertise-addr
構成を追加します。 - トランザクションステータスのクエリを高速化するために、 Pumpに
GetMvccByEncodeKey
関数を追加します。 - コンポーネント間の通信データの圧縮をサポートし、ネットワークリソースの消費を削減します。
- Kafka からbinlog を読み取り、データを MySQL に複製する Arbiter ツールを追加します。
- Reparoによるレプリケーションを必要としないファイルのフィルタリングをサポート
- 生成された列の複製をサポート
- 異なるSQLモードを使用してDDLクエリを解析できるように、
syncer.sql-mode
構成項目を追加します。 - 複製されないテーブルのフィルタリングをサポートするために
syncer.ignore-table
構成項目を追加します。
- コンテナ環境でブリッジモードをサポートするために、 Drainerに
- 同期差分インスペクター
- 検証ステータスを記録し、再起動後に最後に保存したポイントから検証を続行するためのチェックポイントをサポートします。
- チェックサムを計算してデータの整合性をチェックするための構成項目を
only-use-checksum
追加します - より多くのシナリオに適応するために、TiDB 統計と複数の列を使用して比較用にチャンクを分割するサポート
TiDB アンシブル
- 次の監視コンポーネントを安定バージョンにアップグレードします。
- Prometheus V2.2.1 から V2.8.1 へ
- Pushgateway V0.4.0 から V0.7.0 へ
- Node_exporter V0.15.2 から V0.17.0 へ
- Alertmanager 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の導入と運用をサポート
table-regions.py
スクリプトを最適化して、Leader分布をテーブルで表示できるようにしました。- TiDB 監視を最適化し、SQL カテゴリ別にレイテンシー関連の監視項目を追加します。
- オペレーティング システムのバージョン制限を変更し、CentOS 7.0+ および Red Hat 7.0+ オペレーティング システムのみをサポートするようにしました。
- クラスターの最大 QPS を予測するための監視項目を追加します (デフォルトでは非表示)