データ ウェアハウスの実践丨テーブル スキャン中にフィルタリングされた行が多すぎることが原因で生じるパフォーマンスのボトルネック

この記事は、 O Paoguolai~ によるHuawei クラウド コミュニティ「GaussDB (DWS) パフォーマンス チューニング: テーブル スキャン中にフィルター処理された過剰な数の行によって引き起こされるパフォーマンス ボトルネック問題のケース スタディ」から共有されたものです。

1. 【問題の説明】

SQL ステートメントの実行中に、データ量 12 億の大きなテーブルがスキャンされ、データの 99% がフィルタリングされ、617 行のデータのみが残ります。パフォーマンスのボトルネックはテーブルのスキャンにあります。

2. 【原文】

set search_path = 'bi_dashboard'; 

WITH F_SRV_DB_DIM_PRD_D AS (SELECT EXTERNAL_NAME FROM ( SELECT MKT_NAME EXTERNAL_NAME   
		       FROM BI_DASHBOARD.DM_MSS_ITEM_PRODUCT_D PRD 
		      WHERE PRD.COMPANY_BRAND =any(array[string_to_array('HUAWEI',',')]) 
		            
	          AND PRD .MKT_NAME =任意(array[string_to_array('Enjoy 60、Enjoy 50、Enjoy 60X、Enjoy 60 Pro、Enjoy 50 Pro、Enjoy 50z、Enjoy 10z、Enjoy 20e、Enjoy 20 Pro、Enjoy 10e、Enjoy 10 Plus、Enjoy 20 SE、Enjoy 10、 nova 11i、Enjoy 20 Plus、Enjoy 9 Plus、Enjoy 20 5G、nova Y90、Enjoy 10S、nova Y70、Enjoy Z、Enjoy 9S、nova 8 SE Active Edition、Maimang 9 5G、Y9s、Maimang 9 5G',',' )]) ) 
	            WHERE EXTERNAL_NAME<>'SNULL' GROUP BY EXTERNAL_NAME)、

V_PERIOD AS 
 ( 
  SELECT PERIOD_ID AS PERIOD_ID_M, 
         LEAST(TO_CHAR(PERIOD_END_DATE, 'YYYYMMDD '), '20230630') AS PERIOD_ID, 
         PERIOD_ID AS DATES 
    FROM BI_D ASHBOARD.RPT_TML_ACCOUNT_PERIOD_D 
   WHERE PERIOD_TYPE = 'M' 
     AND PERIOD_ID BETWEEN 202207 AND 202306 
 )、
 
V_DATA_BASE AS 
 ( 
  SELECT A.PERIOD_ID, 
         IFNULL(A.CHANNEL_ NAME, 'SNULL') AS DISTRIBUTOR_CHANNEL_NAME, 
         SUM(A.SO_QTY_MTD) AS SO_QTY, 
         SUM(DECODE(A. PERIOD_ID、20230630、A.SO_QTY_MTD)) AS SO_QTY_ORDER 
 select count(*) FROM DM_MSS_CN_PC_REP_RP_ST_D_F A 
   INNER JOIN F_SRV_DB_DIM_PRD_D PRD 
      ON A.EXTERNAL_NAME = PRD.EXTERNAL_NAME 
   WHERE 1 = 1 
     AND A.CHANNEL_ID IN ('100013388802')
     および A.ORG_KEY IN (10000651) 
    
     AND A.SALES_FLAG IN ('1', '0') 
     AND A.PERIOD_ID IN (20220731,20221031,20220930,20220831,20221130, 20221231,20230131,20230228,20230430) 、20230331、20230531、20230630)
     および (A .SO_QTY_MTD <> 0) -- 日付 SO_QTY が 0 であるすべてのデータをフィルターします
   GROUP BY A.PERIOD_ID, 
            IFNULL(A.CHANNEL_NAME, 'SNULL' ) 
 ) , 
 
V_DATA AS 
 ( 
  SELECT PERIOD_ID, 
         NVL(DISTRIBUTOR_CHANNEL_NAME, 'Total') AS DISTRIBUTOR_CHANNEL_NAME 、
         SUM(SO_QTY) AS SO_QTY, 
         SUM(SO_QTY_ORDER) AS SO_QTY_ORDER 
    FROM V_DATA_BASE A 
   GROUP BY GROUPING SETS ((PERIOD_ID), (PERIOD_ID, DISTRI BUTOR_CHANNEL_NAME)) 
 ) 

  SELECT STRING_AGG(P.DATES, ',' ORDER BY P.PERIOD_ID_M) AS PERIOD_LIST, 
         B.DISTRIBUTOR_CHANNEL_NAME, 
         STRING_AGG(NVL(TO_CHAR(ROUND(A.SO_QTY)), '0'), ',' ORDER BY P.PERIOD_ID_M ) AS SO_QTY 
    FROM V_PERIOD P 
    FULL JOIN (SELECT DISTINCT DISTRIBUTOR_CHANNEL_NAME FROM V_DATA) B 
      ON 1 = 1 
    LEFT JOIN V_DATA A 
      ON A。PERIOD_ID = P.PERIOD_ID
     および A.DISTRIBUTOR_CHANNEL_NAME = B.DISTRIBUTOR_CHANNEL_NAME
   GROUP BY B.DISTRIBUTOR_CHANNEL_NAME
   ORDER BY DECODE(B.DISTRIBUTOR_CHANNEL_NAME, 'Total', 0, 'SOURCE IS NULL', 2, '源空', 3, 'SNULL', 4, 1), SUM(A.SO_QTY_ORDER) DESC NULLS LAST 
            LIMIT 
   50オフセット0

3. 【性能分析】

画像.png
画像.png
上の図のパフォーマンス実行計画 (完全な実行計画は付録 1 にあります) からわかるように、SQL ステートメントはテーブル a (bi_dashboard.dm_mss_cn_pc_rep_rp_st_d_f_test) をスキャンする際に時間がかかります。スキャン中のフィルタ条件には、sales_flag、so_qty_mtd、channel_id、org_key、period_id が含まれます。テーブル上の元のローカル クラスタリング キー PCK には、period_id のみが含まれ、他の 3 つのフィルタ条件のいずれも含まれていません。したがって、PCK を調整して、スキャンテーブルの実行時間 a.

補足: ローカルクラスタリングキー

部分クラスター キー (PCK) は、最小/最大スパース インデックスを使用してベース テーブルの高速スキャンを実現する、列ストレージのインデックス テクノロジです。部分クラスター キーでは複数の列を指定できますが、通常は 2 列を超えることはお勧めできません。PCK は、大規模な列ストア テーブルに対するポイント クエリを高速化するのに適しています。

また、view文のwhere条件にin値(12個)が多くありますが、DWSではin以降の条件はデフォルトで5個までしか指定できません。6個以上あるとフィルタリングが追い込まれません。このとき、 または を使用して12個の値の書き換えを組み合わせることができます。

A.PERIOD_ID IN (20220731,20221031,20220930,20220831,20221130)
または A.PERIOD_ID IN (20221231,20230131,20230228,20230430,20230331)
または A.PERIOD_ID IN (202) 30531,20230630)

画像.png

現時点では、SQL ステートメントの実行時間は 487 ミリ秒に短縮されており、完全なパフォーマンス計画を付録 2 に示します。

クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~

Alibaba Cloudが深刻な障害に見舞われ、全製品が影響(復旧) Tumblr がロシアのオペレーティングシステムAurora OS 5.0 を冷却新しいUIが公開 Delphi 12とC++ Builder 12、RAD Studio 12多くのインターネット企業がHongmengプログラマーを緊急採用UNIX時間17 億時代に突入しようとしている (すでに突入している) Meituan が兵力を募集し、Hongmeng システム アプリの開発を計画Amazon が Linux 上の .NET 8 への Android の依存を取り除くために Linux ベースのオペレーティング システムを開発独立した規模はFFmpeg 6.1「Heaviside」がリリースされまし
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/4526289/blog/10141543