資料庫重放是一款很棒的工具,可用於捕獲資料庫中的實際負載並隨意重放。它是 Oracle 真正應用測試選件的一部分,它的重點是“實際”一詞,即重放的負載就是資料庫中實際發生的負載。
在資料庫重放中,捕獲的全部負載都針對資料庫進行重放。但是,如果您不想那樣做那該怎麼辦?例如,您可能很想瞭解 SQL 執行計畫以及 SQL 效能是如何受更改影響的,因為它們會嚴重影響應用程式的效能和可用性。此外,資料庫重放只重放捕獲的負載。在生產版本中執行之前,您可能很想知道參數更改對某些 SQL 的影響。
這一領域正是真正應用測試系列的另一個重要組件 SQL Performance Analyzer SPA) 的用武之地。通過 SPA,您可以根據各種更改類型如初始化參數更改、最佳化程式統計重新整理和資料庫升級)播放特定的 SQL 或整個的 SQL 負載,然後產生比較報告,協助您評估它們的影響。在本文中,您將學習如何使用 SQL Performance Analyzer 工具解決這個重要的問題。
樣本問題
我們來進行一個測試。首先,我們定義要解決的問題。
這是一個典型的問題:Oracle 不使用索引,而您想瞭解其中的原因。為了回答這個問題,我拜讀了 Oracle 精英 Tim Gorman 的經典論文“Searching for Intelligent Life in Oracle's CBO”。在 Web 上隨處都能找到這篇論文多種形式的各個版本。)
Tim 的一個建議是,將 optimizer_index_cost_adj 參數的值由預設的 100 更改為一個較小的值。這篇論文還給出了計算這個值的公式。根據公式,在我的案例中,我計算得出這個值為 10.但是,這帶來一個比較棘手的問題:這樣的更改會對每條 SQL 陳述式都有裨益嗎?
在 Oracle 資料庫 11g 之前的版本中,我需要捕獲所有 SQL 陳述式,通過跟蹤運行這些語句,然後得到執行計畫 — 這是一項極其耗時又極易出錯的任務。有了新版本之後,我不需要再那樣做了,我改用非常簡單而有效 SQL Performance Analyzer.
首先,為了舉例說明,我們在資料庫中運行以下查詢:
select /* CONTROL_QUERY11 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 33;select /* CONTROL_QUERY12 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 350;select /* CONTROL_QUERY13 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 351;select /* CONTROL_QUERY14 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 534;select /* CONTROL_QUERY15 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 999;select /* CONTROL_QUERY21 */ sum(QUANTITY_SOLD) from sales where channel_id = 2;select /* CONTROL_QUERY22 */ sum(QUANTITY_SOLD) from sales where channel_id = 3;select /* CONTROL_QUERY23 */ sum(QUANTITY_SOLD) from sales where channel_id = 4;select /* CONTROL_QUERY24 */ sum(QUANTITY_SOLD) from sales where channel_id = 5;select /* CONTROL_QUERY25 */ sum(QUANTITY_SOLD) from sales where channel_id = 9; |
假設這些查詢由您的應用程式發出。通過調整 SQL 中的注釋,您可以在以後對它們進行搜尋。語句執行完成後,您可以對其使用SPA.
用法
通常,最好通過 Oracle 企業管理器使用 SPA 功能。當然,您也可以通過系統提供的程式包 dbms_sqlpa 使用命令列選項,但是不能超過企業管理器添加的可管理性值。)
執行以下步驟:
1、開啟 Enterprise Manager Database Control 並單擊 Performance 選項卡。然後滾動到頁面底部,您將看到如下超連結。
2、單擊 Search Sessions,出現如下螢幕:
3、從遊標緩衝中搜尋已經執行的 SQL 中的模式。注意,這些 SQL 都有一個注釋 CONTROL_QUERYn,其中 n 為 11、12 等等。輸入該字串作為搜尋函數。將給出先前執行過的所有 SQL.在上面顯示的螢幕中,您將看到標題為 Save to a new SQL Tuning Set 的選項按鈕。選擇該按鈕,然後輸入一個名為 CONTROL1 的 SQL 調整工具集。註:為了舉例說明,您要選擇一些語句。)無需在 SQL 中加入任何注釋,您只要建立一個“SQL 調整工具集”並填入所有相關語句即可。
4、單擊 SQL Tuning Sets,將出現 SQL Tuning Sets 頁面。現在選擇名為 CONTROL1 的 STS.在此頁面中,您可以檢查該 STS 並為其添加和刪除 SQL.下面是該 STS 頁面的螢幕: