管理查詢快取功能

Oracle Analytics Cloud 會在查詢快取中保有查詢結果集的本機快取。

主題:

關於查詢快取

查詢快取可讓 Oracle Analytics Cloud 無須存取後端資料來源即可滿足許多後續查詢要求,這樣可以提升查詢效能。不過,後端資料來源若有更新,查詢快取項目可能會變為過時。

快取的優點

處理查詢的最快方式就是略過大量處理,並使用已預先計算的答案。

藉助查詢快取功能,Oracle Analytics Cloud 便可將已預先計算的查詢結果儲存在本機快取中。如果另一個查詢可以使用這些結果,就可免除該查詢的所有資料庫處理。這可大幅改善平均查詢回應時間。

除了改善效能之外,能夠從本機快取回答查詢也節省了網路資源和資料庫伺服器上的處理時間。之所以能夠節省網路資源,是因為中介結果不會傳回到 Oracle Analytics Cloud。不在資料庫上執行查詢可將資料庫伺服器釋出來進行其他工作。如果資料庫使用計費系統,則執行的查詢數量較少也可降低預算中的成本。

使用快取來回答查詢的另一個好處是節省 Oracle Analytics Cloud 上的處理時間,特別是當查詢結果擷取自多個資料庫時。視查詢而定,伺服器中可能會有相當多的結合與排序處理。如果查詢已經過計算,則可避免此處裡,讓伺服器資源可供用於其他作業。

簡言之,查詢快取功能可大幅改善查詢效能並降低網路流量、資料庫處理及處理負荷。

快取的成本

查詢快取功能有許多明顯的效益,但也有特定的成本。

  • 已快取的結果可能過期

  • 管理快取的管理成本

藉助快取管理,效益通常遠遠超過成本。

與快取關聯的管理作業

有些管理作業與快取相關聯。您必須為每個實體表格適當地設定快取保存時間,瞭解該表格中資料的更新頻率。

更新頻率有所不同時,您必須記錄變更發生時間,並視需要手動將快取永久清除。

將快取保持在最新狀態

如果快取項目在相關資料庫中的資料發生變更時沒有被永久清除,則查詢可能會傳回過時的結果。

您必須評估是否可接受這種情況。允許快取包含一些過時資料可能是可接受的情況。您必須決定哪種層級的過時資料是可接受的,然後設定 (並依循) 一組規則來反映這些層級。

例如,假設應用程式分析來自一個大型聚集項的公司資料,而您要執行該公司中不同部門的年度摘要。新資料並不會實質影響查詢,因為新資料只會影響下一年度的摘要。在此情況下,權衡取捨以決定是否要將快取永久清除時,可能會偏向將項目留在快取中。

不過,假設資料庫一天會更新三次,而您要執行當天活動的查詢。在此情況下,您就必須更常將快取永久清除,或是可能考慮完全不使用快取。

另一種情況是,您依定期間隔 (例如每週一次) 從頭開始重建資料集。在此範例中,您可以在重建資料集的過程中一併將整個快取永久清除,確保快取中一律不會有過時資料。

不論是哪一種情況,您都必須評估將哪些非目前的資訊傳回給使用者是可接受的。

跨使用者共用快取

如果已為特定連線集區啟用共用登入,便可跨使用者共用快取,而無須為每個使用者原始內建快取。

如果未啟用共用登入,而是以使用者特定資料庫登入,則每個使用者都會產生自己的快取項目。

啟用或停用查詢快取功能

在 Oracle Analytics Cloud 中,預設會啟用查詢快取。您可以在「系統設定值」頁面上啟用或停用查詢快取功能。

  1. 按一下主控台
  2. 按一下系統設定值
  3. 按一下效能和相容性
  4. 啟用快取設為開啟或關閉。
    • 開啟 — 啟用資料查詢快取功能。
    • 關閉 — 停用快取功能。
  5. 按一下套用
    請稍候片刻讓系統重新整理變更。

監督和管理快取

為了管理基礎資料庫中的變更並監督快取項目,您必須發展一個快取管理策略。

您需要一個可在組成快取項目之基礎表格中的資料發生變更時讓快取項目變成無效的處理作業,以及一個監督、識別和移除所有不想要之快取項目的處理作業。

本節包含下列主題:

選擇快取管理策略

快取管理策略的選擇取決於基礎資料庫中資料的變動性,以及造成此變動性之變更的可預測性。

此外,也取決於組成您快取之查詢的數目與類型,以及這些查詢所接收的使用狀況。本節提供各種快取管理方法的概觀。

停用系統的快取功能

您可以停用整個系統的快取功能以停止所有新的快取項目,以及防止任何新查詢使用現有快取。停用快取功能可讓您稍後再啟用它,而不會遺失任何儲存在快取中的項目。

如果您懷疑有過時的快取項目,但想要先確認這些項目是否真的過時,再將它們或整個快取永久清除,暫時停用快取功能會是一個實用的策略。如果您發現儲存在快取中的資料仍然相關,或在您放心地永久清除問題項目之後,便可以放心地啟用快取。如有必要,請先將整個快取與未與特定業務模型關聯的快取永久清除,再重新啟用快取。

所指定實體表格的快取與快取保留時機

您可以為每個實體表格設定可快取屬性,這可讓您指定是否要將該表格的查詢新增至快取來回答未來的查詢。

如果您為表格啟用快取功能,系統就會將涉及該表格的所有查詢都新增至快取。所有表格預設皆為可快取,但部分表格可能不是包含在快取中的良好候選項目,除非您設定合適的快取保存設定值。例如,假設您有一個儲存每分鐘更新之股票行情圖資料的表格。您可以指定每隔 59 秒永久清除一次表格項目。

您也可以使用快取保存設定值指定此表格的項目要在查詢快取中儲存多久。這對經常更新的資料來源相當有用。

  1. 模型管理工具的實體層中,按兩下實體表格。

    若使用「語意模型產生器」,請參閱何謂實體表格的一般特性?

  2. 實體表格特性對話方塊的一般頁籤中,選取下列其中一個項目:

    • 若要啟用快取,請選取可快取

    • 若要防止表格被快取,請取消選取可快取

  3. 若要設定快取到期時間,請指定快取保存時間並指定計量單位 (天、小時、分鐘或秒)。如果您不想要讓快取項目自動到期,請選取快取永久有效

  4. 按一下確定

語意模型變更對查詢快取有何影響

使用「語意模型產生器」或「模型管理工具」修改語意模型時,變更有可能會影響快取中儲存的項目。例如,如果您變更實體物件或動態語意模型變數的定義,則參照該物件或變數的快取項目可能不再有效。這些變更可能會導致必須永久清除快取。以下兩種情況需要注意:修改現有語意模型,以及建立 (或上傳) 新語意模型。

語意模型變更

修改語意模型或上傳不同的 .rpd 檔案時,您所做的任何變更若對快取項目有影響的話,系統會自動將參照該變更物件的所有快取項目永久清除。永久清除會在您上傳變更時進行。例如,如果您刪除語意模型的實體表格,則參照該表格的所有快取項目會在存入時被永久清除。對邏輯圖層中的語意模型所做的任何變更,會將該語意模型的所有快取項目永久清除。

全域語意模型變數變更

從查詢傳回的資料會重新整理全域語意模型變數的值。定義全域語意模型變數時,您需建立初始化區塊或使用包含 SQL 查詢的預先存在區塊。您也可以設定排程來執行查詢和定期重新整理變數的值。

如果全域語意模型變數的值發生變更,則在資料欄中使用此變數的所有快取項目都會變成過時,並當再次需要該項目中的資料時產生新的快取項目。系統不會立即移除舊的快取項目,而是會繼續保留,直到透過平常的快取機制將其清除為止。

使用快取的策略

查詢快取功能的其中一個主要優點就是明顯改善查詢效能。

查詢快取功能的價值可能在於在離峰時間透過執行查詢並快取其結果來原始內建快取。您必須知道快取命中的發生時機,才能夠訂出一個良好的原始內建策略。

如果您想要為所有使用者原始內建快取,則可以使用下列查詢來原始內建快取:

SELECT User, SRs

使用 SELECT User, SRs 來原始內建快取之後,下列查詢即為快取命中:

SELECT User, SRs WHERE user = valueof(nq_SESSION.USER) (and the user was USER1)
SELECT User, SRs WHERE user = valueof(nq_SESSION.USER) (and the user was USER2)
SELECT User, SRs WHERE user = valueof(nq_SESSION.USER) (and the user was USER3)

本節包含下列主題:

關於快取命中

已啟用快取功能時,系統會評估每個查詢以判斷它是否符合快取命中資格。

快取命中意謂著 Oracle Analytics Cloud 能夠使用快取來回答查詢,而完全不用前往資料庫。Oracle Analytics Cloud 可以使用查詢快取來回答相同或更高聚總層級的查詢。

有許多因素可決定快取是否為命中。下表描述這些因素。

因素或規則 描述

SELECT 清單中的資料欄子集必須相符

新查詢之 SELECT 清單中的所有資料欄必須存在於快取的查詢中,才符合快取命中資格,或是必須要能夠從查詢中的資料欄計算出它們。

此規則描述命中快取的最低需求,但符合此規則並不保證就是快取命中。此表格中所列的其他規則也適用。

SELECT 清單中的資料欄可由所快取查詢的資料欄表示式組成

Oracle Analytics Cloud 可以計算所快取結果的表示式來回答新查詢,但所有資料欄都必須在所快取的結果中。例如,查詢:

SELECT product, month, averageprice FROM sales WHERE year = 2000

會命中以下查詢的快取:

SELECT product, month, dollars, unitsales FROM sales WHERE year = 2000

因為可從 dollarsunitsales 計算出 averageprice (averageprice = dollars/unitsales)。

WHERE 子句必須是語意上相同或為邏輯子集

若要讓查詢符合快取命中資格,WHERE 子句限制必須等於所快取的結果,或是所快取結果的子集。

WHERE 子句若為所快取查詢的邏輯子集,當子集符合下列其中一個條件時,即符合快取命中資格:

  • IN 清單值的子集。查詢若要求較少的 IN 清單快取查詢元素,便符合快取命中資格。例如,下列查詢:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('EAST', 'WEST')

    在下列快取的查詢上符合命中資格:

    SELECT employeename, region
    FROM employee, geography
    WHERE region in ('NORTH', 'SOUTH', 'EAST', 'WEST')
  • 它包含比所快取結果少 (但相同的) OR 限制。

  • 它包含文字比較的邏輯子集。例如,下列述詞:

    WHERE revenue < 1000

    符合含以下述詞之可比較查詢的快取命中資格:

    WHERE revenue < 5000
  • 沒有 WHERE 子句。如果所快取的是沒有 WHERE 子句的查詢,則滿足所有其他快取命中規則的查詢不論其 WHERE 子句為何,都符合快取命中資格。

此外,WHERE 子句上使用的資料欄必須在輸出清單上。例如,下列查詢:

SELECT employeename
FROM employee, geography
WHERE region in ('EAST', 'WEST')

不會產生先前清單中原始內建查詢的快取命中,因為 REGION 不在輸出清單上。

僅限維度的查詢必須為完全相符

如果查詢僅限維度 (亦即查詢中不包含任何事實或計量),則只有與所快取查詢之輸出資料欄完全相符時,才表示命中快取。此行為可防止在維度表格有多個邏輯來源時出現假陽性的情況。

含特殊函數的查詢必須為完全相符

其他包含時間序列函數 (AGOTODATEPERIODROLLING)、限制與偏移量函數 (OFFSETFETCH)、關係函數 (ISANCESTORISLEAFISROOTISSIBLING)、外部聚總函數等特殊函數且一般包含篩選度量的查詢必須也與所快取查詢中的輸出資料欄完全相符。在這些情況下,篩選必須也是完全相符。針對篩選度量,如果篩選度量可以重新編寫為 WHERE 子句,則可以利用子集快取。

邏輯表格集必須相符

若要符合快取命中資格,所有內送查詢都必須有相同的邏輯表格集作為快取項目。此規則可避免假快取命中。例如 SELECT * FROM productSELECT * FROM product, sales 不相符。

階段作業變數值必須相符,包括安全階段作業變數

如果邏輯 SQL 或實體 SQL 敘述句參照任何階段作業變數,則階段作業變數值必須相符。否則就不會命中快取。

此外,階段作業變數若具安全機密性,其值就必須與語意模型中所定義的安全階段作業變數值相符,即使邏輯 SQL 敘述句本身並未參照階段作業變數。請參閱使用資料列層級資料庫安全性時確保快取結果正確

相等結合條件

新查詢要求的結果結合邏輯表格必須與快取的結果相同 (或為其子集),才符合快取命中資格。

DISTINCT 屬性必須相同

如果快取的查詢藉由 DISTINCT 處理 (例如 SELECT DISTINCT...) 去除重複記錄,則對所快取資料欄的要求必須也包含 DISTINCT 處理;對相同資料欄的要求若未包含 DISTINCT 處理,即為快取未命中。

查詢必須包含相容的聚總層級

查詢若是要求聚總層級的資訊,便可使用較低聚總層級的快取結果。例如,下列查詢要求的是供應商、區域及縣/市層級的銷售數量:

SELECT supplier, region, city, qtysold
FROM suppliercity

下列查詢要求的是縣/市層級的銷售數量:

SELECT city, qtysold
FROM suppliercity

第二個查詢會命中第一個查詢的快取。

有限的額外聚總

例如,如果快取的是含 qtysold 資料欄的查詢,則對 RANK(qtysold) 的要求會導致快取未命中。此外,查詢若是要求國家/地區層級的 qtysold,便可從要求國家/地區、區域層級 qtysold 的查詢取得快取命中。

ORDER BY 子句必須由 select 清單中的資料欄組成

查詢的排序依據資料欄若未包含在 select 清單中,就會導致快取未命中。

診斷快取命中行為

為了能夠更好地評定快取命中行為,請將 ENABLE_CACHE_DIAGNOSTICS 階段作業變數設為 4,如下列範例所示:

ENABLE_CACHE_DIAGNOSTICS=4

使用資料列層級資料庫安全性時確保快取結果正確

使用資料列層級資料庫安全策略 (例如虛擬專用資料庫 (VPD)) 時,傳回的資料結果取決於使用者的授權證明資料。

因此,Oracle Analytics Cloud 必須知道資料來源是否使用資料列層級資料庫安全,以及哪些變數與安全相關。

為了確保快取命中只發生在包含且符合所有安全機密變數的快取項目上,您必須在模型管理工具中正確地設定資料庫物件和階段作業變數物件,如下所列:

  • 資料庫物件。在實體層之「資料庫」對話方塊的「一般」頁籤中,選取虛擬專用資料庫,以指定資料來源使用資料列層級資料庫安全。

    如果您使用資料列層級資料庫安全搭配共用快取,就必須選取此選項,以防止共用安全機密變數不相符的快取項目。

  • 階段作業變數物件。針對安全相關變數,請在「階段作業變數」對話方塊中,選取安全機密,以在使用資料列層級資料庫安全策略時,將它們識別為安全機密變數。此選項可確保以安全機密變數標示快取項目,從而在所有內送查詢上啟用安全機密變數比對。

執行一套查詢來填入快取

為了讓可能的快取命中最大化,其中一個策略就是執行一套查詢來填入快取。

下列是建立一套查詢來原始內建快取時,所要使用之查詢類型的一些建議。

  • 一般的預先建立查詢。一般執行的查詢 (特別是在處理上很耗費資源的查詢) 是絕佳的快取原始內建查詢。結果內嵌在儀表板中的查詢即是一般查詢的好例子。

  • 不含表示式的 SELECT 清單。去除 SELECT 清單資料欄的表示式可提升快取命中率。含表示式的已快取資料欄只能回答含相同表示式的新查詢;不含表示式的已快取資料欄則可回答針對該資料欄且含任何表示式的要求。例如,如下方的已快取要求:

    SELECT QUANTITY, REVENUE...
    

    可以回答如下方的新查詢:

    SELECT QUANTITY/REVENUE... 
    

    但無法反向操作。

  • 無 WHERE 子句。快取的結果中如果沒有 WHERE 子句,只要針對具有包含輸出清單中資料欄之任何 WHERE 子句的 SELECT 清單,查詢能夠滿足其快取命中規則,該快取的結果便可用來回答這些查詢。

通常,用以原始內建快取的最佳查詢,是大量耗用資料庫處理資源且可能需要重新發出的查詢。請小心,不要使用會傳回很多資料列的簡單查詢來原始內建快取。這些查詢 (例如 SELECT * FROM PRODUCTS,其中 PRODUCTS 會直接對應至單一資料庫表格) 所需的資料庫處理非常少。其增加的是網路與磁碟負荷,這些不是快取所能改善的因素。

當 Oracle Analytics Cloud 重新整理語意模型變數時,它會檢查業務模型以判斷它們是否參照這些語意模型變數。如果有參照,Oracle Analytics Cloud 就會將這些業務模型的所有快取永久清除。請參閱語意模型變更對查詢快取有何影響

使用代理程式來原始內建查詢快取

您可以設定代理程式來原始內建 Oracle Analytics Cloud 查詢快取。

原始內建快取可以在使用者執行分析或檢視其儀表板上內嵌的分析時,改善對使用者的回應時間。您可以透過排定讓代理程式執行重新整理此資料的要求,來達到此目的。

  1. 在 Oracle Analytics Cloud 中,開啟傳統首頁,然後選取代理程式 (建立區段)。
  2. 一般頁籤上,針對執行身分選項,選取收件者。個人化快取原始內建會使用每個收件者的資料可見性,來自訂每個收件者的代理程式傳遞內容。
  3. 排程頁籤上,指定要原始內建快取的時間。
  4. 選擇性的: 選取條件,然後建立或選取條件要求。例如,您可能有一個判斷 ETL 處理何時完成的業務模型。您可以使用以此業務模型為基礎的報表作為開始快取原始內建的條件觸發程式。
  5. 傳遞內容頁籤上,選取您要原始內建快取的個別要求或整個儀表板頁面。選取儀表板頁面可以節省時間。
  6. 收件者頁籤上,選取要成為收件者的個別使用者或群組。
  7. 目的地頁籤上,清除所有使用者目的地,然後選取 Oracle Analytics Server Cache
  8. 選取右上角的儲存按鈕來儲存代理程式。

快取原始內建代理程式與其他代理程式之間的唯一差異在於,它們會自動清除先前的快取,而不會在儀表板上顯示為警示。

註:

快取原始內建代理程式只會將完全相符的查詢永久清除,因此過時資料可能仍會存在。請確定快取策略一律包含快取永久清除,因為代理程式查詢並不會處理特別查詢或展開。

使用模型管理工具自動將特定表格快取永久清除

將快取永久清除會刪除查詢快取中的項目,讓您的內容保持在最新狀態。您可以在模型管理工具中設定每個表格的快取保存時間欄位,以自動將特定表格的快取項目永久清除。

註:

如果您使用語意模型產生器,請參閱何謂實體表格的一般特性?

這對經常更新的資料來源相當有用。例如,如果您有一個儲存每分鐘更新之股票行情圖資料的表格,便可以使用快取保留時間設定,每隔 59 秒將該表格的項目永久清除一次。請參閱所指定實體表格的快取與快取保留時機