大量のデータを含むクエリが実行されている場合、SQL層がストレージエンジン層からデータを読み取り、計算を実行するため、大量の計算リソースが消費されます。 クエリのパフォーマンスを向上させるために、PolarDB for MySQLはブルームフィルターをストレージエンジンレイヤーにプッシュします。 このトピックでは、ブルームフィルターのプッシュダウン機能について説明します。
前提条件
- PolarDB for MySQLクラスターのバージョンは8.0で、リビジョンバージョンは8.0.2.2.3以降です。 クラスターバージョンを表示する方法の詳細については、「エンジンバージョンの照会」をご参照ください。
- データはINT型です。
背景
ブルームフィルタは、ストレージエンジンから読み取られるデータを削減し、コンピューティング効率を向上させる実証済みの方法です。 PolarDB for MySQLは、ブルームフィルターを使用してハッシュ結合を高速化します。 ハッシュテーブルが作成されると、システムはブルームフィルタを作成し、それらをプローブエンジンにプッシュダウンします。 プローブエンジンは、ブルームフィルタを使用して、クエリに不要なデータを除外します。 この方法では、SQL層とストレージエンジン層の間で送信されるデータ量を減らし、SQL層でのコンピューティングワークロードを減らすことで、クエリのパフォーマンスを大幅に向上させることができます。
ブルームフィルターのプッシュダウン機能を使用する
loose_bloom_filter_enabledパラメーターを使用して、ブルームフィルターを有効にできます。 詳細については、「クラスターとノードパラメーターの設定」をご参照ください。
パラメーター | レベル | 説明 |
loose_bloom_filter_enabled | グローバルとセッション | ブルームフィルターを有効にするかどうかを指定します。 デフォルト値: ON。 有効な値:
|
性能テスト
このパフォーマンステストでは、主キーとインデックスのないTPC-Hスキーマが使用されます。 次のセクションでは、TPC-HのQ3、Q11、およびQ16の実行計画について説明します。
Extra
パラメーターのhash join with bloom filter
は、ブルームフィルターが使用されていることを示します。 - 第3四半期
の使用の説明 SELECT l_orderkey, SUM(l_extendedprice * (1 - l_discount)) 収益として、 o_orderdate, o_shippriority 顧客から、 注文、 lineitem c_mktsegment = 'MACHINERY' AND c_custkey = o_custkey AND l_orderkey = o_orderkey AND o_orderdate < '1995-03-10' AND l_shipdate > '1995-03-10' グループBY l_orderkey, o_orderdate, o_shippriority 収益による注文DESC、 o_orderdate リミット10\G *************************** 1。 行 *************************** id: 1 select_type: シンプル テーブル: 顧客 パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 148463 filtered: 10.00 エクストラ: どこで使用する; 一時的な使用; ファイルソートの使用 *************************** 2. 行 *************************** id: 1 select_type: シンプル テーブル: 注文 パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 1486962 filtered: 3.33 Extra: Using where; 結合バッファの使用 (ブルームフィルタ付きハッシュ結合) 3. 行 *************************** id: 1 select_type: シンプル テーブル: lineitem パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 5948979 filtered: 3.33 Extra: Using where; join buffer (hash join with bloom filter)
- Q11
の使用の説明 SELECT ps_partkey, SUM(ps_supplycost * ps_availqty) 値として partsuppから、 サプライヤー, 国家 WHERE ps_suppkey = s_suppkey AND s_nationkey = n_nationkey AND n_name = 'INDIA グループBY ps_partkey 持っているSUM(ps_supplycost * ps_availqty) > (SELECT SUM(ps_supplycost * ps_availqty) * 0.0001000000 partsuppから、 サプライヤー, 国家 WHERE ps_suppkey = s_suppkey AND s_nationkey = n_nationkey AND n_name = 'INDIA) ORDER BY値DESC\G *************************** 1。 行 *************************** id: 1 select_type: PRIMARY テーブル: 国家 パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 25 filtered: 10.00 エクストラ: どこで使用する; 一時的な使用; ファイルソートの使用 *************************** 2. 行 *************************** id: 1 select_type: PRIMARY テーブル: サプライヤー パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 10000 filtered: 10.00 Extra: Using where; 結合バッファの使用 (ブルームフィルタ付きハッシュ結合) 3. 行 *************************** id: 1 select_type: PRIMARY テーブル: partsupp パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 791815 filtered: 10.00 Extra: Using where; 結合バッファの使用 (ブルームフィルタ付きハッシュ結合) 4. 行 *************************** id: 2 select_type: サブクエリ テーブル: 国家 パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 25 filtered: 10.00 エクストラ: どこで使用 *************************** 5。 行 *************************** id: 2 select_type: サブクエリ テーブル: サプライヤー パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 10000 filtered: 10.00 Extra: Using where; 結合バッファの使用 (ブルームフィルタ付きハッシュ結合) *************************** 6. 行 *************************** id: 2 select_type: サブクエリ テーブル: partsupp パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 791815 filtered: 10.00 Extra: Using where; join buffer (hash join with bloom filter)
- Q16
使用EXPLAIN SELECT p_brand、 p_type, p_size, カウント (DISTINCT ps_suppkey) AS supplier_cnt partsuppから、 部分 WHERE p_partkey = ps_partkey AND p_brand <> 'ブランド #33' そしてp_type 'PROMO POLISHED % 'のようではない そしてp_size IN (34、 45, 33, 42, 9, 24, 26, 7) そしてps_suppkeyではない (SELECT s_suppkey) サプライヤーから WHERE s_comment LIKE '% Customer % Complaints %') p_brandによるグループ、 p_type, p_size ORDER BY supplier_cnt DESC、 p_brand, p_type, p_size\G *************************** 1。 行 *************************** id: 1 select_type: PRIMARY テーブル: 部品 パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 198116 filtered: 40.00 エクストラ: どこで使用する; 一時的な使用; ファイルソートの使用 *************************** 2. 行 *************************** id: 1 select_type: PRIMARY テーブル: partsupp パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 791815 filtered: 10.00 Extra: Using where; 結合バッファの使用 (ブルームフィルタ付きハッシュ結合) 3. 行 *************************** id: 2 select_type: サブクエリ テーブル: サプライヤー パーティション: NULL タイプ: すべて possible_keys: NULL キー: NULL key_len: NULL ref: NULL 行: 10000 filtered: 11.11 エクストラ: どこで
テスト結果
TPC-H試験は、スケールファクタ1で実施される。 次の図は、ブルームフィルターの有効化と無効化のパフォーマンスの違いを示しています。