成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Oracle 11g新特性:SQL Performance Analyzer

數據庫 Oracle
本文詳細介紹了Oracle數據庫11g新特性:SQL Performance Analyzer,并學習如何準確預測針對數據庫發出的實際 SQL 語句的變化。

數據庫重放是一款很棒的工具,可用于捕獲數據庫中的實際負載并隨意重放。它是 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 頁面的屏幕截圖:

 

#p#

5、現在,從 Performance 頁面中單擊 SQL Performance Analyzer.出現如下所示的 SPA 主頁面。

 

6、如您所見,還沒有定義任何 SPA 任務。現在定義一個 SPA 任務。在本例中,您將對參數 optimizer_index_cost_adj 的更改所帶來的影響進行評估,因此請單擊 Parameter Change.出現如下所示的 SPA Task Definition 頁面。

 

7、在此頁面中,您需要輸入 SPA 任務的必要信息。為任務命名:例如 STS1.

8、接下來,您需要輸入 SQL 調整工具集的名稱。單擊旁邊的手電筒圖標,然后選擇名為 CONTROL1 的 SIS.

9、在 Parameter Change 部分中,輸入要更改的參數。單擊手電筒圖標,然后選擇參數 optimizer_index_cost_adj.當前值已經填入,在 Changed Value 框中輸入目標值。

10、接下來,決定這些更改的比較方式:按所用時間、按 CPU 時間等等。為了舉例說明,選擇 Buffer Gets.

11、最后,安排該 SPA 任務的執行時間。選擇單選按鈕 Immediate,表明您要立即運行這個任務。

12、所有詳細信息都填好后,單擊 Submit.這樣就創建了一個您能夠獨立監控的作業,但您也可以停留在這個頁面中并監控該 SPA 任務的狀態,如下所示。

 

13、單擊 Refresh 查看該任務當前的狀態。注意 Last Run Status 欄下的圖標。下面是對這些圖標的說明:

 

14、圖中的圖標表示該任務現在正在運行。不斷單擊 Refresh.當圖標變為 Completed,顯示為一個核對符號時,該 SPA 任務就完成了。

15、單擊該 SPA 任務的名稱 (STS1),查看比較標準。出現如下所示的屏幕。

 

16、注意 Comparison Report 欄下的眼鏡圖標。在這里,您可以比較參數更改前后執行 SQL 的結果。單擊該圖標。

17、這是最令人興奮的部分。出現如下所示的屏幕:

 

這就是您一直等待的結果。在左上角,您會看到更改前后兩次運行 SQL 集的結果比較。總體而言,性能提升了 60%!這個結果就顯示在這,非常明確。在屏幕的右手邊,您會看到有多少 SQL 語句改變了執行計劃。似乎大部分都改變了計劃,只有少數沒有。

屏幕底端顯示了該任務分析的 SQL 語句的 SQL ID.SQL ID 前面的小箭頭顯示了這些 SQL 語句是改進了還是退化了,SQL ID 后面的數字顯示了改進或退化的百分比。這些數據告訴您更改對每條 SQL 語句的確切影響。如果您愿意,可以通過單擊 SQL ID 查看相應的 SQL.注意第一條 SQL,它受到的影響最大,如果單擊該 SQL,您會看到與下面類似的屏幕:

 

#p#

這個屏幕顯示了有關執行該 SQL 的大量統計信息。 屏幕底部顯示了執行計劃的比較:

 

現在您可以看到,使用索引是如何強制減少緩沖區的。但是,情況總是那么樂觀嗎?看看另一條 SQL:

 

與上一例的 31.95% 相比,此例改進甚微,只有 0.48%.原因是什么?為了找到答案,單擊 SQL ID,出現如下屏幕:

 

在這里,您可以看到究竟是什么改變了。所用時間實際上從 0.504 秒延長為 1.022 秒,而且都是因為 CPU 時間。為什么?如果您檢查一下數據分布模式,您就會看到 promo_id 是這樣分布的:

SQL> select promo_id, count(1) cnt from sales group by promo_id;
   PROMO_ID        CNT
---------- ----------
       534          1
       999     887837
       350      18022
        33       2074
       351      10910
           ----------
sum            918844

promo_id 999 在表中出現了 887,837 次,將近 97%.當將計劃改為包含索引掃描時,這個查詢就比較困難了。如果對全表進行掃描,情況應該會好一些。因此,即使整體影響是積極的,也會有個別組件拖后腿。當您決定是否要更改參數時,您應該考慮到這些 SQL 語句的重要性,這些語句既可能改進也可能退化。

正如您所見,您希望評估對數據庫參數進行重要更改而帶來的影響。使用 SPA,您不必估計潛在的性能影響,連“猜測估計”也不必。您可以使用應用程序針對數據庫執行的 SQL 語句客觀地衡量。

現在看另一個案例:更改參數后,性能退化了,而不是改進了。下面是一個屏幕截圖:

 

這里,SQL 語句的運行情況都比更改之前要差。您可以利用(本文中討論的)SQL 計劃管理解決這個問題。SPM 允許您選擇優良的執行計劃作為您的基準,從而保證執行計劃的穩定性。隨后,優化程序會將這個基準用于相應 SQL 的所有執行過程。這個基準計劃會一直使用,直到被禁用或者您創建了新的基準計劃。另一個解決 SQL 退化問題的方法是使用 SQL Tuning Advisor,它能提出 SQL 調整建議或建議進行外部修改,如通過創建索引提高性能。

應用案例

SPA 在很多情形中都是極有用的,包括數據庫版本升級、部署數據庫補丁集、數據庫參數更改和優化程序參數更改等等。

例如,當您決定是否要提高優化程序參數時,比如從 10.2 更改為 11.1,您肯定想了解這個更改會對您的 SQL 語句產生怎樣的影響。執行該任務最好的工具就是 SPA.唯一不同的是,在上面的步驟 5 中,不是選擇 Database Parameter Changes,而是選擇 Optimizer Changes,將出現如下所示屏幕。

 

在此屏幕中,選擇合適的源優化程序版本和目標優化程序版本,然后完成剩余的步驟。

結論

使用這個新工具的最佳時間是什么時候?簡單的回答就是:在您進行任何更改的時候。與數據庫重放不同,在數據庫重放中您看不到實際的 SQL,而使用 SPA,您能夠得到特定 SQL 或整個應用程序 SQL 負載的結果。您可以評估正反兩方面的影響,并達到最佳的可能更改狀態而并不危害您的應用程序的性能。沒有哪種選擇是永遠絕對正確或錯誤的,是對與錯的程度使人們難于進行決策。SPA 將對錯程度推向某一個極端,從而使您更容易作出決策。

【編輯推薦】

  1. 詳解Oracle 11g R1中數據泵增強
  2. 解析Oracle 11g閃回數據歸檔新功能
  3. Oracle 11g R1中的自動數據庫維護任務管理
責任編輯:楊鵬飛 來源: oracle.com
相關推薦

2012-05-07 13:45:45

Oraclen 11g虛擬列數據庫

2009-01-11 08:16:00

自適應游標共享新特性Oracle 11g

2010-04-16 09:50:26

Oracle 11g

2009-11-20 12:55:08

Oracle 11g功

2009-09-02 15:35:57

Oracle 11g

2009-04-15 09:49:20

2010-01-11 10:08:14

Oracle 11g

2009-03-05 11:02:12

NTP列式壓縮云計算

2010-01-19 10:17:41

Oracle 11g

2010-01-13 16:08:09

Oracle 11g 數據衛士

2009-09-15 09:52:25

Oracle 11g分

2011-08-23 15:56:19

SQL Server Oracle 11g

2010-04-30 13:35:28

Oracle 11g

2011-04-15 09:11:21

2010-04-13 15:56:03

Oracle 11g

2010-05-10 14:46:54

Oracle 11g

2009-07-08 00:24:00

數據壓縮Oracle 11g

2022-11-29 17:03:00

數據庫Oracle

2010-04-07 17:27:38

Oracle 11g

2010-04-01 15:19:56

Oracle 11g壓
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频久久久 | 四虎永久免费黄色影片 | 久久高清 | 成人一级视频在线观看 | 9191av| 夜夜骑天天干 | 日韩在线视频免费观看 | 久久国产成人午夜av影院武则天 | 毛片a级毛片免费播放100 | www.夜夜骑.com| 亭亭五月激情 | 五月香婷婷| 国产免费一区二区三区 | 一二三四在线视频观看社区 | 一区二区三区视频在线观看 | 欧美一区二区大片 | 欧美日韩视频在线第一区 | 精品1区2区3区 | 国产精品视频在线观看 | 精品国产乱码一区二区三区 | 色精品| 亚洲综合久久久 | 国产欧美日韩在线播放 | 精品网 | 国产精品久久久久久 | 日韩精品av一区二区三区 | aⅴ色国产 欧美 | 91麻豆精品国产91久久久久久 | 亚洲网在线 | 久久久久久久久久久久久久国产 | 亚洲精品一区二区另类图片 | 日韩一级不卡 | 亚洲高清av在线 | av网站免费观看 | 国产精品国产三级国产aⅴ无密码 | 一区二区三区在线 | 一区二区三区视频在线观看 | 日本小电影网站 | 国产精品一区二区在线 | 欧美久久一级特黄毛片 | 亚洲精品第一页 |