すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ブルームフィルターpushdown

最終更新日:May 30, 2024

大量のデータを含むクエリが実行されている場合、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。 有効な値:
  • 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で実施される。 次の図は、ブルームフィルターの有効化と無効化のパフォーマンスの違いを示しています。Bloom Filter