首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 for SAP 應用程式 SQL 效能調優基礎架構篇 (一):介面層、Open SQL 參數與 FOR ALL ENTRIES 生成策略

     編輯:DB2 教學

SAP 與 DB2 通訊介面層總覽

SAP 應用透過四大通道存取 DB2:

  1. ABAP Open SQL:核心介面,平台無關,經 Database Interface (DBI) 轉換為原生 SQL。
  2. ADBC (ABAP Database Connectivity):類別基礎 API,支援動態原生 SQL,供 SAP BI / 自訂報表使用。
  3. EXEC SQL / ENDEXEC:嵌入原生 SQL,繞過 DBI,需極謹慎使用。
  4. JDBC:SAP Java Stack 專用。

ERP 核心交易 95%+ 走 Open SQL;BI/分析型查詢多走 ADBC。

Open SQL 內建 DB2 專屬提示參數

可在自訂 ABAP 報告/交易中加入,影響 DBI 生成的原生 SQL 編譯行為:

參數語法範例效果適用版本
OPT_FOR_ROWSSELECT ... %_HINTS DB2 'OPT_FOR_ROWS 100'產生 OPTIMIZE FOR 100 ROWS;0 可抑制自動生成全版本
USE_OPTLEVEL%_HINTS DB2 'USE_OPTLEVEL 3'指定語句優化級別 (1-7),預設 5全版本
&SUBSTITUTE LITERALS&%_HINTS DB2 '&SUBSTITUTE LITERALS&'將 ABAP 字面值直接內嵌 SQL,優化器可利用分布統計;需 dbs/db6/dbsl_substitute_literals = 1Kernel 4.6+
&SUBSTITUTE VALUES&%_HINTS DB2 '&SUBSTITUTE VALUES&'所有輸入值內嵌,同樣利用分布統計,但每次需重新 PREPAREKernel 4.6+
CONVERT_FAE_TO_CTE%_HINTS DB2 'CONVERT_FAE_TO_CTE'將 FOR ALL ENTRIES 轉為 CTE (WITH 子句),優化器可消除重複值產生更好計畫Kernel < 7.0

黃金法則:這些參數僅作緊急臨時方案,長期解決應修正 ABAP 邏輯、建立索引或收集統計。

FOR ALL ENTRIES (FAE) 深度解析

FAE 是 ABAP 將內表 (itab) 與資料庫表連接的通用結構,永遠回傳去重後的唯一結果集。

SELECT ... FROM  FOR ALL ENTRIES IN 
WHERE  = -.

SAP 透過三大配置參數控制 SQL 生成策略 (優先序遞減)

  1. rsdb/prefer_in_itab_opt = 1 (預設關閉)
    單一內表欄位條件 → 生成 IN (val1, val2, ...) 列表。
    優點:簡潔、優化器易處理。
    缺點:IN 列表過長 (超過參數 rsdb/max_in_blocking_factor) 會分塊多語句。
  2. rsdb/prefer_join = 1 (Kernel 7.0+,預設關閉)
    無其他表連結時 → 將內表轉為衍生表 JOIN (SELECT ... FROM VALUES ...)。
    優點:集合運算、可利用排序/雜湊連結。
    注意:Kernel 7.0+ 已移除此選項,改用 IN LIST / UNION ALL / OR 鏈。
  3. rsdb/prefer_union_all = 1 (預設關閉)
    每個內表值產生一條 SELECT ... WHERE col = val 並 UNION ALL 串聯。
    優點:每條語句極簡單、並行度高。
    缺點:語句數 = 內表行數,編譯/網路開銷大。

若以上皆未觸發 → 退回預設 OR 鏈條件:WHERE col = val1 OR col = val2 ...。

分塊控制參數 (防止單一 SQL 過大)

rsdb/max_blocking_factor
rsdb/max_in_blocking_factor
rsdb/prefer_fix_blocking
rsdb/min_blocking_factor
rsdb/min_in_blocking_factor

內表行數超過閾值時,SAP DBI 會自動分塊生成多條 SQL,結果在應用層合併。詳細機制請參考 SAP Note 48230。

關鍵治理原則

  • FAE 相關參數影響全系統關鍵 SQL 與 DB2 效能,嚴禁隨意修改預設值,僅在詳細根因分析或 SAP Support 建議下調整。
  • Kernel 7.0+ 已移除 rsdb/prefer_join,改用 CONVERT_FAE_TO_CTE 提示將 FAE 轉為 CTE,優化器可消除重複值並產生更優計畫。
  • 建立變更管理流程:分析 → 測試 → 灰度 → 全量 → 監控,所有參數調整必須留存審計軌跡。

DB2 for SAP FAE SQL 生成策略圖解

總結

理解 SAP Open SQL/ADBC/FAE 的轉換機制與參數控制點,是 DB2 for SAP 效能調優的基石。掌握「介面層 → 提示參數 → FAE 生成策略 → 分塊控制」四層架構,即可從源頭預防 80% 以上的 SQL 效能問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved