調整關聯式資料庫查詢的效能

許多客戶都經歷過資料倉儲應用程式的效能問題,所以此處提供一些如何分析及改善 Oracle Analytics 中報表效能的高階指南。在某些情況下,Oracle Analytics 產生的 SQL 查詢會相當複雜而難以進行分析。本主題描述如何分析 Oracle Analytics 所產生的 SQL 查詢,以及如何將可能源自這些 SQL 查詢的效能問題減至最低。

本主題不涵蓋因網路、瀏覽器或報表展示問題所導致的效能問題。

分析 Oracle Analytics 的查詢日誌 (需為日誌層級 3)

如需如何找到此日誌或瞭解其內容的相關資訊,請參閱收集及分析查詢日誌

  1. 將查詢在 Oracle Analytics 所花費的時間與在資料庫所花費的時間做比較,亦即回應時間 vs 實體查詢持續時間。一般而言,在 Oracle Analytics 所花費的時間不會超過數秒鐘。
  2. 如果回應時間超過數秒鐘,請分析 Oracle Analytics 中所進行的個別步驟以找出原因 (需為日誌層級 5)。

分析實體 SQL

  1. 檢查查詢中包含的所有表格是否皆為必要。尋找是否有任何已結合但 SELECT 子句中未包含,而且未套用任何篩選 (真正的篩選,而非結合條件) 的表格。
  2. 識別產生了多少實體查詢和子查詢。更準確地說,查詢讀取了多少次的事實表格。在完美情況下,查詢只會讀取單一事實表格,而且只會讀取一次。若有一個以上的事實表格時,請找出原因並且瞭解是否能夠移除部分事實表格。
  3. 檢查排除的資料欄、非相加聚總規則 (REPORT_AGGREGATEcount(distinct)...)、選擇步驟、報表中的子查詢、集合運算子 (UNION)、總計、小計、多種視觀表等等。
  4. 檢查是否有任何外部結合。尋找這些外部結合源自何處,以及是否能夠透過變更設計將部分結合移除。

分析執行計畫

如果最佳化 SQL 還不足夠,請分析執行計畫以找出效能問題的根本原因。請向 DBA 尋求協助。在目前的點上,可採取以下的 4 種主要方式來改善效能:
  1. 改進資料存取路徑 (索引) 以減少 IO 數量。
  2. 減少資料讀取數量,以減少 IO 數量。例如,可以複查套用的篩選或資料模型結構 (請參閱下一節)。
  3. 提高併行執行程度 (用於讀取大型表格的繫線數目)。
  4. 提升 IO 速度 (基礎架構增強、記憶體式資料庫等等)。

複查並改進資料模型以減少資料讀取量

  1. 建立聚總表格。
  2. 使用片段。

    例如,如果使用者主要選取本年度、季別或月份的資料,您可以將事實分割成以下兩個表格:當前和存檔。在 Oracle Database上,您還可以使用分割功能。

  3. 使用去正規化 (以減少結合數目)。
  4. 將表格分割,以減少資料欄數目。

    資料讀取量不僅只取決於每個表格中的資料列數目。表格量也取決於其資料欄的數目與大小。例如,您可以將包含 500 個資料欄的大型表格分割成兩個表格;其中一個表格包含 50 個最常使用的資料欄,另一個表格則包含其餘較不常使用的 450 個資料欄。

Oracle Analytics 中的許多效能問題都源自設計不良,這導致無法產生最佳化的 SQL 查詢。您可以透過修改設計,改善 Oracle Analytics 所產生的 SQL 查詢。這會產生巨大的影響,不只是對報表的效能,對於資料庫中所使用資源的數量也有所影響。