大量のデータを含むクエリが実行されている場合、SQL層がストレージエンジン層からデータを読み取り、計算を実行するため、大量の計算リソースが消費されます。 クエリのパフォーマンスを向上させるために、PolarDB for MySQLはオプティマイザをストレージエンジン層にプッシュする高速トラバース機能を提供します。 このトピックでは、高速トラバース機能について説明します。
前提条件
PolarDB for MySQLクラスターのバージョンが8.0で、リビジョンバージョンは次の要件を満たしています。
- 8.0.1.1.5以降
- 8.0.2.2.0以降
クラスターのバージョンを表示する方法については、「エンジンバージョンの照会」をご参照ください。
背景
MySQL Community Edition 8.0.13では、COUNT (*)
操作がInnoDBエンジンによって実行されないため、パフォーマンスのオーバーヘッドが大きくなります。 MySQL Community Edition 8.0.18では、InnoDBページのレコードをトラバースできますが、オプティマイザが選択したインデックスに従うことはできません。 代わりに主キーインデックスが使用されます。
PolarDB for MySQLは、オプティマイザによって選択されたインデックスに基づいてページ上のレコードをトラバースできる高速トラバース機能を提供します。 この機能により、テーブルからデータを取得するインデックスや、マルチバージョン同時実行制御 (MVCC) によるバージョンの復元によって引き起こされるページロックの保持が長引くのを防ぎます。
高速トラバース機能を使用する
高速トラバース機能は、サポートされているPolarDB for MySQLクラスターとすぐに使用できます。
性能テスト
このパフォーマンステストでは、TPC-Hスキーマが使用されます。 EXPLAINステートメントを実行して、TPC-Hクエリの実行計画を表示します。
mysql> EXPLAIN SELECT COUNT(*) FROM lineitem\G
*************************** 1。 行 ***************************
id: 1
select_type: シンプル
テーブル: lineitem
パーティション: NULL
タイプ: index
possible_keys: NULL
キー: i_l_shipdate
key_len: 4
ref: NULL
行: 59440464
filtered: 100.00
エクストラ: インデックス
の使用テスト結果
TPC-Hテストは10のスケールファクタで実行されます。 次の図に示すように、高速トラバース機能を有効にしたPolarDBクラスターは、MySQL Community Edition 8.0.13および8.0.18よりも優れたパフォーマンスを提供します。
innodb_parallel_read_threads
パラメーターは1に設定されています。