大量のデータを含むクエリが実行されている場合、SQL層がストレージエンジン層からデータを読み取り、計算を実行するため、大量の計算リソースが消費されます。 クエリのパフォーマンスを向上させるために、PolarDB for MySQLはオプティマイザをストレージエンジン層にプッシュする高速トラバース機能を提供します。 このトピックでは、高速トラバース機能について説明します。
前提条件
PolarDB for MySQLクラスターのバージョンが8.0で、リビジョンバージョンは次の要件を満たしています。
8.0.1.1.5以降
8.0.2.2.0以降
クラスターのバージョンを表示する方法については、「エンジンバージョン5.6、5.7、8.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. row ***************************
id: 1
select_type: SIMPLE
table: lineitem
partitions: NULL
type: index
possible_keys: NULL
key: i_l_shipdate
key_len: 4
ref: NULL
rows: 59440464
filtered: 100.00
Extra: Using indexテスト結果
TPC-Hテストは10のスケールファクタで実行されます。 次の図に示すように、高速トラバース機能を有効にしたPolarDBクラスターは、MySQL Community Edition 8.0.13および8.0.18よりも優れたパフォーマンスを提供します。 innodb_parallel_read_threadsパラメーターは1に設定されています。
よくある質問
PolarDB for MySQLのinnodb_parallel_read_threadsのデフォルト値は何ですか?
innodb_parallel_read_threadsのデフォルト値は0です。 詳細については、「クラスターとノードパラメーターの設定」をご参照ください。