程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2性能調優SAP應用程序中對SQL查詢性能的提高(1)

DB2性能調優SAP應用程序中對SQL查詢性能的提高(1)

編輯:DB2教程

以下的文章主要向大家講述的是DB2性能調優之SAP應用程序中對SQL查詢性能的提高,如果你對DB2性能調優之SAP應用程序中對SQL查詢性能的提高有興趣的話,你就可以對以下的文章點擊觀看了。

SAP 提供了下面接口和數據庫通訊:

應用程序寫入 ABAP

SAP Open SQL

自然 SQL 通過 ADBC 接口(ABAP 數據庫連接)

自然 SQL,以 EXEC SQL 語句開始並以 ENDEXEC 語句結束

JDBC 用於 SAP Java 應用程序

SAP ABAP 應用程序主要使用 SAP Open SQL 來訪問數據庫。 SAP Open SQL 由一組執行數據庫操作的 ABAP 語句組成。被開發來為 SAP 支持的所有關系數據庫平台提供一個通用接口。 SAP Open SQL 語句在 SAP 數據庫接口中被轉換為自然 SQL 。

SAP NetWeaver BI 使用 SAP BI 發布的 ADBC 。對於自然 SQL 接口 ADBC 是一個基於類的 API,它支持執行動態生成 SQL 語句。在 ABAP 環境中使用 ADBC 和在 Java 環境中使用 JDBC 類似。

用戶他們自己寫的 report 和事務可以使用任何一個可用接口來訪問數據庫。

在 SAP Open SQL 中使用 DB2 參數

SAP 支持一批 DB2 參數,它們可以添加到 Open SQL 語句中以影響從 Open SQL 生成的自然 SQL 語句如何在數據庫層編譯和運行。客戶可以在他們自己寫的 report 和事務中使用這些 DB2 參數來提高 SQL 查詢性能。

注意,對前面描述的 DB2 SAP 指定參數設置,他應該只需要在特殊情況下使用這些參數。只有發生數據庫DB2性能調優問題需要快速解決方案和替代解決方案時才使用它們。

對 Open SQL ,SAP 支持下列 DB2 參數

OPT_FOR_ROWS N:如果 N > 0,一個 OPTIMIZE FOR N ROWS 子句就被添加到 SQL 語句中。對 ABAP 語句它包含 UP TO N ROWS 子句,OPTIMIZE FOR N ROWS 是自動生成的。 OPT_FOR_ROWS 0 被用於防止自動生成 OPTIMIZE FOR N ROWS 。

USE_OPTLEVEL X:這個參數可以被用來指定語句處理的 DB2 查詢優化級別。默認情況下,SAP 使用優化級別 5,這為大多數情況提供了合理的語句編譯和執行時間。在某些情況下,一個較低或較高的優化級別可能生成一個對特定語句並具有更高DB2性能調優的訪問計劃。在這些情況下,參數可以被用作短期解決方案或替代方案。

&SUBSTITUTE LITERALS&:對於 SAP 內核版本 4.6,這個參數需要把 SAP 配置參數 dbs/db6/dbsl_substitute_literals 設置為 1 。這個參數使 ABAP 語句文本中的文字被作為 SQL 語句的文字實現(而不是作為參數標記)。如果這些文字被使用,優化器可以使用涉及這些列的表中的分布信息。注意,存在這種可能,沒有對這個表搜集分布統計信息。

&SUBSTITUTE VALUES&:對於 SAP 內核版本 4.6,這個參數需要把 SAP 配置參數 dbs/db6/dbsl_substitute_literals 設置為 1 。這個參數使在 ABAP 語句中的所有輸入值都被作為 SQL 語句文本的文字實現。就像 &SUBSTITUTE LITERALS&,DB2 優化器可以使用關於涉及表中的分布信息。然而,由於值的替換因為語句文本改變了,這個語句每次運行的時候都需要重新准備。

CONVERT_FAE_TO_CTE:對於內核版本早於 7.0 的 SAP,這個參數用來給控制有 FOR ALL ENTIRES 結構的 ABAP 語句生成 SQL 。

使用正確的 SAP 配置參數來控制為 FOR ALL ENTIRES Open SQL 查詢生成 SQL

FOR ALL ENTRIES (FAE) 語句是一個通用的 SAP ABAP 語句結構。這個參數允許 ABAP 程序員用一個 ABAP 內部表連接一個或幾個數據庫表。 FAE 語句總是返回一個唯一的結果集。 SAP 數據庫接口將刪除任何從數據庫返回的重復數據。

例如:

  1. SELECT … FROM <dbtable> FOR ALL ENTRIES IN <itab>   
  2. WHERE <col> = <itab>~<col>  

SAP 提供了下列配置參數來控制把多少語句被轉化為 SQL:

rsdb/prefer_in_itab_opt:如果這個參數被設置為 1 而且如果 FAE 語句只在 WHERE 子句中涉及一個內部表列,那麼一個有 IN 列表的自然 SQL 語句就被生成出來:

  1. SELECT … FROM <dbtable> WHERE  
  2. <col> IN (<itab>[1]~<col>,  
  3. <itab>[2]~<col>, … , <itab>[N]~<col> ) 

rsdb/prefer_join:這個參數是在 SAP 內核版本 7.0 或以後可用。如果這個參數被設置為 1 並且如果 FAE 語句不包含任何多表之間的連接,那麼 FAE 語句就被實現為一個連接: SELECT

  1. …  
  2. FROM <dbtable> t1,  
  3. ( SELECT * FROM ( VALUES(<itab>[2]~<col>, <itab>[2]~<col>, … ,  
  4. <itab>[N]~<col> ) )  
  5. AS t2_tmp ( <coL> ) GROUP BY <col> )  
  6. AS T2  
  7. WHERE t1.<col> = t2.<col> 

rsdb/prefer_union_all:如果這個參數被設置為 1,那麼將為內部表中的每一個值都會生成一個 SQL 語句並且通過 UNION ALL 鏈接起來: SELECT … FROM <dbtable> WHERE <col> =

  1. <itab>[1]~<col> UNION ALL  
  2. SELECT … FROM <dbtable> WHERE <col> = <itab>[2]~<col> UNION ALL  
  3. …  
  4. SELECT … FROM <dbtable> WHERE <col> = <itab>[N]~<col> 

如果這個參數被設為 0,那麼將生成由 OR 鏈接的條件:

  1. SELECT … FROM <dbtable> WHERE  
  2. <col> = <itab>[1]~<col> OR  
  3. <col> = <itab>[2]~<col> OR  
  4. …  
  5. <col> = <itab>[N]~<col> OR 

這個參數在 rsdb/prefer_join 參數被設置為 1 的情況下不被使用。

如果上面的轉換一個都沒有發生,FAE 語句將被轉換為帶 OR 的自然 SQL 語句。

下面附加的 SAP 配置參數通過一個自然 SQL 語句控制內部 ABAP 表中輸入的數目。

  1. rsdb/max_blocking_factor   
  2. rsdb/max_in_blocking_factor   
  3. rsdb/prefer_fix_blocking   
  4. rsdb/min_blocking_factor   
  5. rsdb/min_in_blocking_factor  

如果內部表包含更多輸入,一些自然 SQL 語句會被生成出來而且結果搜集在 SAP 數據庫接口中。更多細節,參見 SAP note 48230 。

SAP 用於控制 FAE 語句的執行的配置參數在整個 SAP 系統的很大范圍內對關鍵數據庫命令和DB2性能調優影響上都有非常大的效果。因此,只有在進行了詳細問題分析之後或是 SAP 技術支持推薦的情況下覆蓋這些配置參數的默認設置。

對 SAP 內核 7.0 之後的版本,rsdb/prefer_join=1 選項是不可用的。可用 IN 列表,UNION ALL 語句或在 WHERE 子句中有 OR 鏈接條件的語句來替換。 SAP 的參數 CONVERT_FAE_TO_CTE 可以被添加到 ABAP FAE 語句中來轉換成一個 DB2 通用表的表達式(CTE)。這提高了性能,因為 DB2 優化器可以產生更好的訪問計劃 – 因為內部表中的重復值已經在 CTE 中被刪除了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved