SAP 應用透過四大通道存取 DB2:
ERP 核心交易 95%+ 走 Open SQL;BI/分析型查詢多走 ADBC。
可在自訂 ABAP 報告/交易中加入,影響 DBI 生成的原生 SQL 編譯行為:
| 參數 | 語法範例 | 效果 | 適用版本 |
|---|---|---|---|
| OPT_FOR_ROWS | SELECT ... %_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 = 1 | Kernel 4.6+ |
| &SUBSTITUTE VALUES& | %_HINTS DB2 '&SUBSTITUTE VALUES&' | 所有輸入值內嵌,同樣利用分布統計,但每次需重新 PREPARE | Kernel 4.6+ |
| CONVERT_FAE_TO_CTE | %_HINTS DB2 'CONVERT_FAE_TO_CTE' | 將 FOR ALL ENTRIES 轉為 CTE (WITH 子句),優化器可消除重複值產生更好計畫 | Kernel < 7.0 |
黃金法則:這些參數僅作緊急臨時方案,長期解決應修正 ABAP 邏輯、建立索引或收集統計。
FAE 是 ABAP 將內表 (itab) 與資料庫表連接的通用結構,永遠回傳去重後的唯一結果集。
SELECT ... FROM FOR ALL ENTRIES IN
WHERE = - .
IN (val1, val2, ...) 列表。rsdb/max_in_blocking_factor) 會分塊多語句。JOIN (SELECT ... FROM VALUES ...)。SELECT ... WHERE col = val 並 UNION ALL 串聯。若以上皆未觸發 → 退回預設 OR 鏈條件:WHERE col = val1 OR col = val2 ...。
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。
rsdb/prefer_join,改用 CONVERT_FAE_TO_CTE 提示將 FAE 轉為 CTE,優化器可消除重複值並產生更優計畫。
理解 SAP Open SQL/ADBC/FAE 的轉換機制與參數控制點,是 DB2 for SAP 效能調優的基石。掌握「介面層 → 提示參數 → FAE 生成策略 → 分塊控制」四層架構,即可從源頭預防 80% 以上的 SQL 效能問題。