1. 程式人生 > >Oracle DB SQL 效能分析器

Oracle DB SQL 效能分析器

• 確定使用SQL 效能分析器的優點 • 描述SQL 效能分析器工作流階段 • 使用SQL 效能分析器確定資料庫更改所帶來的效能改進
  • SQL 效能分析器:概覽
• 11g 的新增功能 • 目標使用者:DBA、QA、應用程式開發人員 • 幫助預測系統更改對SQL 工作量響應時間的影響 • 建立不同版本的SQL 工作量效能(即SQL 執行計劃和執行統計資訊) • 以序列方式執行SQL(不考慮併發性) • 分析效能差異 • 提供對單個SQL 的細粒度效能分析 • 與SQL 優化指導整合在一起以優化迴歸 SQL 效能分析器:概覽 Oracle Database 11 g 引入了SQL 效能分析器;使用該工具可以準確地評估更改對組成工作量的SQL 語句的影響。SQL 效能分析器可幫助預測潛在的更改對SQL 查詢工作量的效能
影響。這種功能可向DBA 提供有關SQL 語句效能的詳細資訊,例如,執行前後的統計信息,提高或降低效能的語句。這樣一來,您就可以執行諸如以下操作的操作:在測試環境中進行更改,以確定資料庫升級是否會改進工作量效能。
  • SQL 效能分析器:使用情形
在以下情形中使用SQL 效能分析器很有益: • 資料庫升級 • 實施優化建議 • 更改方案 • 收集統計資訊 • 更改資料庫引數 • 更改作業系統和硬體 SQL 效能分析器:使用情形 SQL 效能分析器可用於預測和防止會影響SQL 執行計劃結構的任何資料庫環境更改所帶來的潛在效能問題。這些更改可以包括(但不限於)以下任何一種更改: • 資料庫升級 • 實施優化建議 • 更改方案 • 收集統計資訊 • 更改資料庫引數 • 更改作業系統和硬體 DBA 甚至可以使用SQL 效能分析器為最複雜的環境預測先期更改導致的SQL 效能更改。例如,隨著應用程式在開發週期中的變化,資料庫應用程式開發人員可以測試對方
案、資料庫物件和重寫應用程式的更改,以減輕任何潛在的效能影響。 使用SQL 效能分析器還可以比較SQL 效能統計資訊。
  • 使用模型:捕獲 SQL 工作量
• SQL 優化集 (STS)  用於儲存SQL 工作量。包括: – SQL 文字 – 繫結變數 – 執行計劃 – 執行統計資訊 • 增量捕獲用於填充某個時間段內來自遊標快取記憶體的 STS 。 • STS 的過濾和排名功能可過濾掉不需要的SQL。 使用模型:捕獲SQL 工作量 使用SQL 效能分析器的第一步是捕獲呈現工作量的SQL 語句。這是使用SQL 優化集技術完成的。
  • 使用模型:傳輸到測試系統
• 將SQL 優化集複製到登臺表(“打包”)。 • 將登臺表傳送到測試系統(資料泵、DB 連結等)。 • 從登臺表中複製 SQL 優化集(“解包”)。 使用模型:傳輸到測試系統 第二步是將這些SQL 語句傳送到要測試的類似系統。在此步驟中,可將STS  從生產系統中匯出,然後將其匯入到測試系統。
  • 使用模型:在更改效能前建立
 在更改之前,SQL 效能版本是SQL 工作量效能基線。 • SQL 效能=  執行計劃+  執行統計資訊 • 測試/執行STS 中的SQL: – 生成執行計劃和統計資訊。 – 以序列方式執行SQL(無並行操作)。 – 每個SQL 只執行一次。 – 跳過DDL/DML  結果。 • 解釋STS 中的計劃SQL 以便僅生成 使用模型:在更改效能前建立 第三步是捕獲由執行計劃和執行統計資訊組成的測試系統性能的基線。
  • 使用模型:在更改效能後建立
• 手動實施計劃的更改: – 資料庫升級 – 實施優化建議 – 更改方案 – 收集統計資訊 – 更改資料庫引數 – 更改作業系統和硬體 • 在更改後重新執行 SQL: – 測試/執行STS 中的SQL 以生成SQL 執行計劃和執行統計資訊。 – 解釋STS 中的計劃SQL 以便生成SQL 計劃。 使用模型:在更改效能後建立 第四步是更改測試系統,然後重新執行SQL 語句來評估更改對SQL 效能的影響。
  • 使用模型:比較和分析效能
• 依據使用者指定的度量比較 SQL 效能: – elapsed_time, buffer_gets ,disk_reads, ... • 計算更改對單個 SQL 和SQL 工作量的影響: – 對工作量的整體影響 – 對工作量的純SQL 影響 • 使用SQL 執行頻率定義重要性權重。 • 檢測改進、迴歸和未發生更改的效能。 • 檢測執行計劃中的更改。 • 建議執行SQL 優化指導來優化迴歸SQL。 • 分析結果可用於植入 SQL 計劃管理基線。  使用模型:比較和分析效能 Enterprise Manager 提供了一些工具,可用於對效能資料進行完全比較,其中包括所用時間、CPU 時間和緩衝區獲取次數之類的執行統計資訊。如果SQL 效能在有些情況下出現迴歸,則DBA 必須立即或按預定時間執行SQL 優化指導來優化SQL 語句。對於任何優化策略,建議一次僅實施一項更改,並在進一步更改之前重新進行測試。
  • SQL 效能分析器:概要
1. 捕獲SQL 生產工作量。 2. 將SQL 工作量傳送至測試系統。 3. 建立“更改前”效能資料。 4. 進行更改。 5. 建立“更改後”效能資料。 6. 比較步驟3  和步驟5  的結果。 7. 優化迴歸的SQL。 SQL 效能分析器:概要 1. 收集SQL:在這個階段中,將收集用於表示生產系統中的 SQL 工作量的SQL 語句集。可以使用SQL 優化集或自動工作量資料檔案庫(AWR) 來捕獲要傳送的資訊。因為AWR 本質上是捕獲高負載的SQL ,所以應考慮修改預設的AWR 快照設定和捕獲的頂級SQL ,以確保AWR 捕獲最大數量的SQL 語句。這可以確保捕獲更加完整的SQL 工作量。 2. 傳送:在這個階段中,應將得到的工作量結果傳送到測試系統。從生產系統匯出STS ,然後將STS  匯入到測試系統。 3. 計算“之前版本”效能:在進行任何更改之前,執行 SQL 語句,收集評估將來的更改對工作量效能的可能影響所需的基線資訊。在此階段收集的資訊給出了系統工作量當前狀態的一個快照。效能資料包括: - 執行計劃(如由解釋計劃生成的計劃) - 執行統計資訊(如由佔用時間、緩衝獲取次數、磁碟讀取次數和已處理的行陣列成的資訊) 4. 進行更改:獲得了之前版本資料後,可以實施計劃的更改,然後開始檢視對效能的影響。 5. 計算“之後版本”效能:在資料庫環境中進行了更改之後才執行此步驟。SQL 工作量的每個語句都在虛擬執行(僅收集統計資訊)模式下執行,收集與步驟3  所捕獲的信息相同的資訊。 6. 比較和分析SQL 效能:在獲得了兩個版本的 SQL 工作量效能資料後,可以通過比較之後版本與之前版本的資料來進行效能分析。比較的根據是執行統計資訊,如所用時間、CPU 時間和緩衝區獲取次數等。 7. 優化迴歸的SQL:在此階段中,已經準確地確認了哪些 SQL 語句在進行資料庫更改時可能導致效能問題。在此階段中可以使用任何一種資料庫工具來優化系統。例如,可以對確認的語句使用SQL 優化指導或訪問指導,然後實施相應的建議。也可以使用在步驟3  中捕獲的計劃植入SQL 計劃管理(SPM)  以確保計劃保持不變。在實施了任何優化操作後,應重複該過程來建立新的之後版本,然後分析效能差異以確保新的效能是可接受的。
  • 捕獲SQL 工作量
1. 在原始系統上建立SQL 優化集(STS) 。 2. 建立登臺表,並在登臺表中上載STS 。 3. 將登臺表匯出到測試系統。 4. 將登臺表解包到測試系統上的STS 。 捕獲SQL 工作量 捕獲SQL 工作量是使用SQL 優化集(STS)  完成的。這個概念並不是Oracle Database 11 g中新引進的,它與以前版本的資料庫遵循完全相同的工作流。圖中對此概念進行了簡短的說明。可以使用Enterprise Manager 嚮導或DBMS_SQLTUNE PL/SQL 程式包。 使用Oracle Database 11 g 時,可以通過Database Control 中的“Performance(效能)”選項卡訪問“SQL Tuning Sets (SQL 優化集)”頁。 捕獲的工作量應反映一個有代表性的時段(在捕獲的SQL 語句中),您希望在一些發生變化的條件下對其進行測試。此過程中將捕獲以下資訊: •SQL 文字 • 執行上下文(包括繫結值、語法分析方案和編譯環境),其中包含一組執行語句時所用的初始化引數。 • 執行頻率,即在工作量的時間間隔期間SQL 語句執行的次數。 正常情況下,將捕獲生產系統中的SQL ,從而捕獲其中執行的工作量。稍後,計算SQL 效能的程序會在測試系統中計算效能資料。SQL 效能分析器將在資料庫更改前後跟蹤同一STS  的SQL 效能。
  • 建立SQL 效能分析器任務
建立SQL 效能分析器任務 EM  可幫助管理SQL 效能分析器程序中的每個元件,並報告分析結果。工作流和使用者界 面適用於EM Database Control  和EM Grid Control 。 可以通過Database Control 的“Software and Support (軟體和支援)”選項卡訪問SQL 性能分析器。或者選擇“Database Instance(資料庫例項)> Advisor Central(指導中心)> Advisors(指導)> SQL Performa nce Analyzer(SQL 效能分析器)”。 SQL 效能分析器提供了三種工作流,可用於測試不同情況: • 優化程序升級模擬:測試指定優化程式版本的更改對 SQL 優化集效能產生的影響。將建立SQL 效能分析器任務,並使用設定為初始值的 optimizer_features_enable引數執行初次試執行。使用設定為目標版本的optimizer_features_enable引數執行第二次試執行。然後,執行這兩次試運行的重放試驗比較報告。 • 引數更改:測試並比較初始化引數的更改對SQL 優化集效能的影響。將建立SQL 性能分析器任務,並使用設定為基礎值的引數執行初次試執行。使用設定為更改值的參數執行第二次試執行。然後,執行這兩次試執行的重放試驗比較報告。 • 指導式工作流:將建立一個 SQL 效能分析器任務,並通過使用手動建立的重放試驗執行自定義試驗。
  • 優化程序升級模擬
優化程序升級模擬 使用此頁可建立一個任務,以度量資料庫從一個版本升級到另一個版本時對SQL 優化集的效能影響。在示例中,執行了一次從10.2.0.1 到11.1.6  的模擬升級(可以降級到8.0.0)。 要建立分析任務,必須指定以下詳細資訊: • 輸入任務名稱和可選的說明。 • 指定要用於此次分析的STS 。STS  必須已建立。 • 從列表中選擇“Per-SQL Time Limit(每個SQL 的時間限制)”,指定執行每個SQL 語句的時間限制: - UNLIMITED :對於每個 SQL 語句的執行無時間限制。 - EXPLAIN ONLY:生成但不執行測試計劃。 - CUSTOMIZE:可以定製執行時間限制。 • 選擇“Optimizer Versions (優化程式版本)”指明資料庫的原始版本,以及資料庫要升級到的新版本。將建立兩個重放試驗。第一個重放試驗使用原始優化程式版本捕獲STS  效能,第二個重放試驗使用目標版本。 • 選擇用於評估資料庫升級帶來的效能影響的“Comparison Metric (比較度量)”。 • 指定任務的“Schedule (排程)”。 • 單擊“Submit (提交)”繼續分析。
  • SQL 效能分析器:任務
SQL 效能分析器:任務 建立了SQL 效能分析器任務後,可能需要長時間執行該任務,具體取決於SQL 優化集中包含的語句數量。在執行任務時,可以單擊“SQL Performance Analyzer(SQL 效能分析器)”頁上的“Refresh(重新整理)”按鈕,直到在“SQL Performance Analyzer Tasks(SQL 效能分析器任務)”表中任務的“Last Run Status(上次執行狀態)”列中看到一個綠色的對勾。 執行之後,可以單擊“SQL Performance Analyzer Tasks (SQL 效能分析器任務)”表中與任務名稱對應的連結。這時會轉到相應的“SQL Performance Analyzer Task(SQL 效能分析器任務)”頁。
  • SQL 效能分析器任務頁
SQL 效能分析器任務頁 通過“SQL Performance Analyzer Task(SQL 效能分析器任務)”,可以在已更改的環境條件下執行特定的SQL 優化集。在執行了該任務後,可以評估這些更改對SQL 優化集性能的影響。在評估更改的環境條件對指定SQL 優化集效能的影響時,“Comparison Report (比較報表)”很有用。 在此頁上,還可以執行以下操作: • 建立重放試驗來測試特定環境下SQL 優化集的效能。單擊“Create Replay Trial(建立重放試驗)”。有關建立重放試驗的詳細資訊,請參閱“Guided Workflow(指導式工作流)”頁。 • 執行重放試驗比較來比較迄今為止所建立的重放試驗間的差異。系統將為每個重放試執行建立一個比較報表。 單擊“Run a Replay Trial Comparison (執行重放試驗比較)”。有關執行重放試驗比較的詳細資訊,請參閱“Guided Workflow(指導式工作流)”頁。 • 單擊“Comparison Report (比較報表)”列中的眼鏡圖示,檢視任務的重放試驗比較報表。
  • 比較報表
使用“SQL Performance Analyzer Task Result(SQL 效能分析器任務結果)”頁檢視重放試驗比較報表。該頁將顯示以下常規詳細資料: • 任務詳細資料,如任務的名稱、所有者和說明 •SQL 優化集的名稱和所有者 •SQL 語句的總數以及任何出現錯誤的SQL 語句。單擊“SQL Statements With Errors(出現錯誤的SQL 語句)”連結可訪問“Errors(錯誤)”表。 • 進行比較的重放試驗以及使用的比較度量。 除了以上詳細資料外,還可以檢視以下內容: • Projected Workload [Comparison Metric](計劃的工作量[比較度量]):此圖表根據比較度量顯示每個重放試驗的計劃工作量,以及改進、迴歸和整體影響。單擊各個影響的連結可以細化到每個類別的SQL 語句的完整列表。 • SQL Statement Count(SQL 語句計數):此圖表根據比較度量顯示改進、迴歸或未改變效能的SQL 語句的數量。柱形的顏色表明在兩次試執行之間計劃是否有更改。 單擊連結或資料儲存桶可訪問SQL 語句計數詳細資料頁(從中可以看到一個SQL 語句列表),然後單擊“SQL ID”便可訪問SQL 詳細資料。 • “Top 10 SQL Statements Based on Impact on Workload(根據對工作量的影響列出的前10 個SQL 語句)”表:在此表中單擊特定的“SQL ID”可細化至對應的“SQL Details (SQL 詳細資料)”頁。 在“SQL Details (SQL 詳細資料)”頁上,可以檢視SQL 語句以及針對每條統計資訊的每個重放試執行之間的逐行比較。還可以找到每個試驗的解釋計劃。
  • 優化迴歸語句
在“SQL Performance Analyzer Task Result (SQL 效能分析器任務結果)”頁中,可以通過呼叫SQL 優化指導直接優化所有迴歸語句。為此,請單擊“Run SQL Tuning Advisor(執行SQL 優化指導)”按鈕訪問“Schedule SQL Tuning Task(排程SQL 優化任務)”頁,從中可以指定優化任務名稱和一個排程。 完成後,單擊“Next (下一步)”。此時將建立一個新的優化任務,可分析SQL 效能分析器找到的所有迴歸語句。
  • 優化迴歸語句
建立了SQL 優化任務後,將返回到“SQL Performance Analyzer Task Result (SQL 效能分析器任務結果)”頁,在此頁中的“Recommendations(建議案)”部分可以清楚地看到,現在有了一個與效能分析關聯的優化任務。 單擊“SQL Tune Report(SQL 優化報表)”連結可訪問相應的“SQL Tuning Results(SQL 優化結果)”頁,從中可以看到“Recommendations(建議案)”表,其中列出了迴歸語句的所有建議案。 也可以從“SQL Performance Analyzer Task(SQL 效能分析器任務)”頁直接訪問“SQL Tuning Results(SQL 優化結果)”頁,方法是:針對您的試驗比較單擊“Replay Trial Comparisons(重放試驗比較)”部分“SQL Tune Report(SQL 優化報表)”列中的眼鏡 圖示。
  • 防止迴歸
可以不使用SQL 優化指導來優化迴歸語句,而是使用SQL 計劃基線來防止迴歸。為此,請在“SQL Performance Analyzer Task Result(SQL 效能分析器任務結果)”頁中單擊“Create SQL Plan Baselines (建立SQL 計劃基線)”按鈕。
  • 引數更改分析
使用“Parameter Change(引數更改)”頁可建立一個任務,可使用該任務來測試初始化引數值發生更改時對SQL 優化集效能的影響。此選項很有用,因為很難預測引數值的更改會帶來正面的影響還是負面的影響。 要建立任務,請執行以下操作: • 輸入任務名稱和說明。 • 單擊“Select(選擇)”圖示,然後從列表中選擇一個SQL 優化集。 • 從列表中選擇“Per-SQL Time Limit(每個SQL 的時間限制)”,指定執行每個SQL 語句的時間限制, • 單擊“Select(選擇)”圖示,從列表中選擇一個初始化引數。 • 選擇初始化引數的當前值(基礎值)和新值(更改值)。 • 選擇用於評估更改帶來的效能影響的比較度量。 • 指定任務的排程。 建立了任務後,使用設定為基礎值的初始化引數執行初次試執行。使用設定為更改值的初始化引數執行第二次試執行。最後,使用指定的比較度量生成兩次試驗的重放試驗比較報表。
  • 指導式工作流分析
可以使用“Guided Workflow(指導式工作流)”頁定義執行兩次試驗的SQL 效能分析器測試的步驟順序。這些步驟如下: • 根據SQL 優化集建立一個SQL 效能分析器任務。 • 在初始環境中重放SQL 優化集。在執行重放試驗之前,必須手動更改影響STS  的試驗環境。這些試驗可以包括更改初始化引數、收集優化程式統計資訊以及建立索引。 • 使用更改的環境建立重放試驗:現在,通過指定所有必需的資訊,可以使用更改的環境建立第二次重放試驗。兩次試驗之間的效能差異歸因於環境的差異。 • 使用前述各步驟中的試驗建立重放試驗比較:這允許您評估執行每個重放試驗時對STS  的效能影響。 • 檢視試驗比較報表:現在,可以生成重放試驗比較報表了。 注:在提交重放試驗之前,必須在相應的任務頁上選中“Trial environment established(試驗環境已建立)”選項。但是,必須手動進行必要的更改。
  • SQL 效能分析器:PL/SQL  示例
SQL 效能分析器:PL/SQL  示例 圖中的常規示例顯示瞭如何使用DBMS_SQLPA程式包呼叫SQL 效能分析器,以瞭解某些更改所帶來的SQL 效能影響。可以方便地改寫此示例來執行自己的分析。 1. 建立優化任務以執行SQL 效能分析器。 2. 執行一次任務以建立更改前效能資料,並生成更改前報表(報表的特殊設定為:set long 100000 、longchunksize 100000和linesize 90 )。通過此項呼叫,可以指定各種引數,其中包括: - 通過以下任一方式設定execution_type 引數:設定為EXPLAIN PLAN,為SQL 工作量中的所有SQL 語句生成解釋計劃。設定為TEST EXECUTE,執行SQL 工作量中的所有SQL 語句。該過程僅執行DML 語句中的查詢部分,以避免對資料庫或使用者資料產生副作用。如果指定了TEST EXECUTE,則該過程將生成執行計劃和執行統計資訊。 - 通過使用execution_params 引數指定需要指定為 dbms_advisor.arglist(name,value,…) 的執行引數。time_limit引數指定了在超時前處理SQL 優化集中所有SQL 語句的全域性時間限制。local_time_limit 引數指定了在超時前處理SQL 優化集中每個SQL 語句的時間限制。 3. 進行更改。 4. 更改後重新執行任務,並獲取更改後報表。 5. 比較兩次執行,並獲取分析報表。可以使用不同的執行引數執行以下命令: EXEC DBMS_SQLTUNE.EXECUTE_TUNING_TASK( task_name => :tname, -execution_type => 'compare performance', execution_params => dbms_advisor.arglist( 'execution_name1', 'before',  'execution_name2', 'after', 'comparison_metric', 'buffer_gets')); 
  • SQL 效能分析器:資料字典檢視
• Oracle Database 11g 中修改的檢視: – DBA{USER}_ADVISOR_TASKS:顯示有關分析任務的詳細資料 – DBA{USER}_ADVISOR_FINDINGS:顯示分析結果 • Oracle Database 11g 中的新檢視: – DBA{USER}_ADVISOR_EXECUTIONS:列出任務執行的元資料資訊 – DBA{USER}_ADVISOR_SQLPLANS:顯示 SQL 執行計劃列表 – DBA{USER}_ADVISOR_SQLSTATS:顯示 SQL 編譯和執行統計資訊的列表 SQL 效能分析器:資料字典檢視 • DBA{USER}_ADVISOR_SQLPLANS :顯示所有(或當前使用者擁有的)SQL 執行計劃列表。 • DBA{USER}_ADVISOR_SQLSTATS :顯示SQL 編譯或執行統計資訊列表,或當前用戶擁有的SQL 編譯或執行統計資訊列表。 • DBA{USER}_ADVISOR_TASKS :顯示有關特定指導任務的詳細資訊,這些任務是為分析系統環境更改所帶來的影響而建立的。 • DBA{USER}_ADVISOR_EXECUTIONS :列出任務執行的元資料資訊。SQL 效能分析器至少建立三次執行,分析更改對SQL 工作量的影響:一次執行用於收集工作量更改前版本的效能資料,第二次執行用於收集工作量更改後版本的資料,最後一次執行用於進行實際分析。 • DBA{USER}_ADVISOR_FINDINGS :顯示分析結果。指導將生成四種類型的查詢結果:效能迴歸、症狀、錯誤和參考性訊息。
  • 小結
• 確定使用SQL 效能分析器的優點 • 描述SQL 效能分析器工作流階段 • 使用SQL 效能分析器確定資料庫更改所帶來的效能改進