<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    [Oracle10G新特性]_06.自動工作負載信息庫
    ?
    ??? 這個又是一個Oracle出來的功能更加強大的替代品,代替了以前的Statspack,信息更多,而且提供了很多的試圖供查詢,基本上使用Oracle的人應該都更加容易接受這種模式的信息吧。所以說這個確實不錯。而且另外關鍵的一點:這個功能在10g中是隨安裝之間啟動的,自動進行收集統計,應該是比較成熟的應用了吧。
    ?
    ??? 另外,在OEM中也非常多得應用了這個特性,可以直接簡單得做一些性能分析,更加便利。不過這個東西還是比較深奧,具體怎么分析性能,要很多的經驗才行,目前經驗培養中……
    ?
    ---------------------------------------------------------------------

    自動工作負載信息庫
    ?
    學習使用新的特性,這些特性采集數據庫性能統計數據和量度,以供分析和調整,并顯示在數據庫中花費的準確時間,甚至保存會話信息
    ?
    ??? 當您有數據庫性能問題時,要解決它您首先要作的是什么?一種常見的方法是看是否存在一種模式:回答諸如“相同的問題是否重復出現?”,“它是否在某個特定的時間段出現?”和“兩個問題之間是否有聯系?”之類的問題,將幾乎總會帶來更好的診斷結果。
    ?
    ??? 作為一個數據庫管理員,您可能已經投資購買了第三方工具或使用自己開發的工具來在數據庫運行期間采集詳細的統計數據,并從這些統計數據中導出獲得性能量度。在緊急的情況下,您可以訪問這些量度來與當前的情況作比較。再度查看這些過去的事件可以給當前的問題帶來一些啟發,因此不斷采集相關的統計數據對于性能分析變得很重要。
    ?
    ??? 一段時間以來,Oracle 在這個領域中的解決方案是它內置的工具 Statspack。雖然某些情況下證明它是非常有價值的,但常常缺少性能故障診斷實踐所需的強健性。Oracle Database 10g 提供了一個顯著改進的工具:自動工作負載信息庫 (AWR)。AWR 和數據庫一起安裝,不但采集統計數據,還采集導出的量度。
    ?

    快速測試驅動程序
    ?
    ??? 通過運行 $ORACLE_HOME/rdbms/admin 目錄中的 awrrpt.sql 腳本,AWR 的功能可以立即通過它從采集的統計數據和量度中生成的報表得到最好的說明。這個腳本從外觀和感覺上類似于 Statspack,它顯示所有的現有 AWR 快照并請求兩個特定的快照作為時間間隔邊界。它產生兩種類型的輸出:文本格式(類似于 Statspack 報表的文本格式但來自于 AWR 信息庫)和默認的 HTML 格式(擁有到部分和子部分的所有超鏈接),從而提供了非常用戶友好的報表。現在運行該腳本以查看報表,從而對 AWR 的功能有一個了解。
    ?
    ?
    實施
    ?
    ??? 現在,讓我們來看看 AWR 是如何設計和構建的。AWR 實質上是一個 Oracle 的內置工具,它采集與性能相關的統計數據,并從那些統計數據中導出性能量度,以跟蹤潛在的問題。與 Statspack 不同,快照由一個稱為 MMON 的新的后臺進程及其從進程自動地每小時采集一次。為了節省空間,采集的數據在 7 天后自動清除。快照頻率和保留時間都可以由用戶修改。要查看當前的設置,您可以使用下面的語句:

    select snap_interval, retention
    from dba_hist_wr_control;
    ?
    SNAP_INTERVAL?????? RETENTION
    ------------------- -------------------
    +00000 01:00:00.0?? +00007 00:00:00.0

    ??? 這些 SQL 語句顯示快照每小時采集一次,采集的數據保留 7 天。要修改設置 — 例如,快照時間間隔為 20 分鐘,保留時間為兩天 — 您可以發出以下命令。參數以分鐘為單位。

    begin
    ?? dbms_workload_repository.modify_snapshot_settings (
    ????? interval => 20,
    ????? retention => 2*24*60
    ?? );
    end;

    ??? AWR 使用幾個表來存儲采集的統計數據,所有的表都存儲在新的名稱為 SYSAUX 的特定表空間中的 SYS 模式下,并且以 WRM$_* 和 WRH$_* 的格式命名。前一種類型存儲元數據信息(如檢查的數據庫和采集的快照),后一種類型保存實際采集的統計數據。(您可能已經猜到,H 代表“歷史數據 (historical)”而 M 代表“元數據 (metadata)”。)在這些表上構建了幾種帶前綴 DBA_HIST_ 的視圖,這些視圖可以用來編寫您自己的性能診斷工具。視圖的名稱直接與表相關;例如,視圖 DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上構建的。
    ?
    ??? AWR 歷史表采集的信息比 Statspack 多許多,這些信息包括表空間使用率、文件系統使用率、甚至操作系統統計數據。這些表的完整的列表可以通過以下命令從數據字典中看到:

    select view_name from user_views where view_name like 'DBA\_HIST\_%' escape '\';

    ??? 視圖 DBA_HIST_METRIC_NAME 定義 AWR 采集到的重要的量度、它們所屬的組和采集它們的單位。例如,下面是一個記錄(豎直格式):

    DBID????????????????? : 4133493568
    GROUP_ID????????????? : 2
    GROUP_NAME??????????? : System Metrics Long Duration
    METRIC_ID???????????? : 2075
    METRIC_NAME?????????? : CPU Usage Per Sec
    METRIC_UNIT?????????? : CentiSeconds Per Second

    ??? 它顯示一個量度“每秒 CPU 使用率”以“每秒的厘秒數”為單位進行測量,并且該量度屬于一個量度組 “System Metrics Long Duration”。這條記錄可以和其它的表(如 DBA_HIST_SYSMETRIC_SUMMARY)結合,以獲得數據庫的活動信息,形式如下:

    select begin_time, intsize, num_interval, minval, maxval, average, standard_deviation sd
    from dba_hist_sysmetric_summary where metric_id = 2075;
    ?
    BEGIN??? INTSIZE NUM_INTERVAL?? MINVAL? MAXVAL? AVERAGE?????????? SD
    ----- ---------- ------------?? ------- ------- --------? ----------
    11:39???? 179916?????????? 30???????? 0????? 33??????? 3? 9.81553548
    11:09???? 180023?????????? 30??????? 21????? 35?????? 28? 5.91543912
    ?
    ... and so on ...
    ?
    ??? 下面我們看看 CPU 時間是如何消耗的(以厘秒為單位)。標準差加入到了我們的分析中,它有助于確定平均數字是否反映了實際的工作負載。在第一條記錄中,平均值是每秒消耗 CPU 時間 3 厘秒,但標準差是 9.81,這意味著平均值 3 不能反映工作負載。在第二個例子中,平均值為 28,標準差為 5.9,這更具有代表性。這種類型的信息趨勢有助于了解幾個環境參數對性能量度的影響。
    ?
    ?
    使用統計數據
    ?
    ??? 迄今為止,我們看到了 AWR 所采集的內容,現在讓我們看看它將如何處理數據。
    ?
    ??? 大多數性能問題并不是孤立存在的,而留有指示性的跡象,這些跡象將通向問題最終的根源。讓我們使用一個典型的調整實踐來說明這一點:您注意到系統很慢,于是決定查看等待的原因。您檢查發現“緩沖區忙等待”非常高。問題可能出在哪里呢?有幾種可能:可能有一個單調增加的索引,可能一個表太滿了,以至于要求將單個數據塊非常快速地加載到內存中,或其它一些因素。無論在哪種情況下,您都首先要確定存在問題的段。如果它是一個索引段,那么您可以決定重新構建它,把它修改為一個反向鍵索引,或把它轉換成一個在 Oracle Database 10g 中引進的散列分區索引。如果它是一個表,您可以考慮修改存儲參數來使它不那么密集,或者利用自動段空間管理把它轉移到一個表空間中。
    ?
    ??? 您的處理計劃一般是有規律的,并且通常基于您對各種事件的了解和您處理它們的經驗。現在設想相同的事情由一個引擎來完成,這個引擎采集量度并根據預先確定的邏輯來推出可能的計劃。您的工作不就變得更輕松了嗎?
    ?
    ??? 現在在 Oracle Database 10g 中推出的這個引擎稱為自動數據庫診斷監控程序 (ADDM)。為了作出決策,ADDM 使用了由 AWR 采集的數據。在上面的討論中,ADDM 可以看到發生了緩沖區忙等待,然后取出相應的數據來查看發生緩沖區忙等待的段,評估其特性和成分,最后為數據庫管理員提供解決方案。在 AWR 進行的每一次快照采集之后,調用 ADDM 來檢查量度并生成建議。因此,實際上您擁有了一個一天二十四小時工作的自動數據庫管理員,它主動地分析數據并生成建議,從而把您解放出來,使您能夠關注更具有戰略意義的問題。
    ?
    ??? 要查看 ADDM 建議和 AWR 信息庫數據,請使用在名稱為 DB Home 的頁面上的新的 Enterprise Manager 10g 控制臺。要查看 AWR 報表,您可以從管理轉至工作負載信息庫,然后轉至 Snapshots 來查看它們。在以后的部分中,我們將更詳細地討論 ADDM。
    ?
    ??? 您還可以指定根據特定的情況來生成警報。這些警報稱為服務器生成警報,它們被推送到高級隊列中,在其中它們可以被任意監聽它的客戶端使用。一個這樣的客戶端是 Enterprise Manager 10g,在其中警報被突出顯示。
    ?
    ?
    時間模型
    ?
    ??? 當您有性能問題時,要縮短響應時間您最先想到的是什么?很明顯,您希望消除(或減少)增加時間的因素的根源。您如何知道時間花費在哪里 — 不是等待,而是真正在進行工作?
    ?
    ??? Oracle Database 10g 引進了時間模型,以確定在各個地方花費的時間。花費的總的系統時間記錄在視圖 V$SYS_TIME_MODEL 中。下面是查詢和輸出結果。
    ?
    STAT_NAME???????????????????????????????????? VALUE
    -------------------------------------???????? --------------
    DB time?????????????????????????????????????? 58211645
    DB CPU??????????????????????????????????????? 54500000
    background cpu time?????????????????????????? 254490000
    sequence load elapsed time??????????????????? 0
    parse time elapsed??????????????????????????? 1867816
    hard parse elapsed time?????????????????????? 1758922
    sql execute elapsed time????????????????????? 57632352
    connection management call elapsed time?????? 288819
    failed parse elapsed time???????????????????? 50794
    hard parse (sharing criteria) elapsed time??? 220345
    hard parse (bind mismatch) elapsed time?????? 5040
    PL/SQL execution elapsed time???????????????? 197792
    inbound PL/SQL rpc elapsed time?????????????? 0
    PL/SQL compilation elapsed time?????????????? 593992
    Java execution elapsed time?????????????????? 0
    bind/define call elapsed time???????????????? 0

    ??? 注意名稱為 DB Time 的統計量,它代表自從例程啟動起在數據庫中花費的時間。運行示例工作負載,并再次從視圖中選中統計值。統計值的差異將代表該工作負載在數據庫中花費的時間。在又一個調整回合之后,執行相同的分析,統計值的差異將顯示在調整之后 DB Time 的變化,這可以與第一次修改進行比較,以查看調整動作對數據庫時間的影響。
    ?
    ??? 除數據庫時間之外,V$SYS_TIME_MODEL 視圖顯示了很多其它的統計量,如在不同類型的分析,甚至在 PL/SQL 編譯中花費的時間。
    ?
    ??? 這個視圖還顯示了總的系統時間,不過您可能對一個更加詳細的視圖感興趣:會話級時間。時間統計數據還在會話級進行采集,如視圖 V$SESS_TIME_MODEL 中所示,在其中可以看到當前連接的會話(活動和不活動的)的所有統計數據。額外的列 SID 指示顯示的統計數據的會話的 SID。
    ?
    ??? 在早期的版本中,這種分析是不可能得到的,用戶被迫進行猜測或從各種來源進行分析。在 Oracle Database 10g 中,獲得這種信息輕而易舉。
    ?
    ?
    活動會話歷史
    ?
    ??? Oracle Database 10g 中的視圖 V$SESSION 得到了改善;所有這些改善中最有價值的是包含了等待事件和它們的持續時間,從而不再需要查看視圖 V$SESSION_WAIT。不過,因為這個視圖只反映實時的值,所以當稍后查看它時,一些重要的信息丟失了。例如,如果您選擇從這個視圖中檢查是否有任何會話在等待任何非空閑的事件,如果有的話,調查這個事件,您可能發現不了任何東西,因為到您選中它的時候等待一定已經結束了。
    ?
    ??? 進入新的特性活動會話歷史 (ASH),它類似于 AWR,在一個緩沖區中存儲會話性能統計數據,以便稍后進行分析。不過,與 AWR 不同,存儲不是永久性地在一個表中進行,而是在內存中進行,并在視圖 V$ACTIVE_SESSION_HISTORY 中顯示。數據每秒輪詢一次,并且只有輪詢活動會話。隨著時間進行,舊的項目在一個循環緩沖區中被刪除,以容納新的項目,并且這些舊的項目將在視圖中顯示。要找出有多少個會話在等待某些事件,您可以使用下面的命令
    ?
    select session_id||','||session_serial# SID, n.name, wait_time, time_waited
    from v$active_session_history a, v$event_name n
    where n.event# = a.event#
    ?
    ??? 這條命令告訴您事件的名稱和等待花費了多少時間。如果您想要深入調查某個特定的等待事件,ASH 的額外的列也將幫助您實現這一目的。例如,如果會話等待的事件之一是緩沖區忙等待,那么正確的診斷必須指出發生等待事件的段。您可以從 ASH 視圖列 CURRENT_OBJ# 中獲得這一信息,然后該列可以和 DBA_OBJECTS 結合,以獲得存在問題的段。
    ?
    ??? ASH 還記錄并行查詢服務器會話,這對診斷并行查詢等待事件非常有用。如果記錄是針對一個并行查詢從屬進程,那么協調服務器會話的 SID 由 QC_SESSION_ID 列指定。列 SQL_ID 記錄產生等待事件的 SQL 語句的 ID,該列可以和 V$SQL 視圖結合,以獲取存在問題的 SQL 語句。為了方便一個共享用戶環境(如 web 應用程序)中的客戶端的識別,也顯示了 CLIENT_ID 列,這可以由 DBMS_SESSION.SET_IDENTIFIER 來設置。
    ?
    ??? 既然 ASH 信息這么有價值,那么如果以一種類似于 AWR 的永久方式來保存這種信息不是很好嗎?幸運的是,它是以這種方式來進行保存的;由 MMON 從進程將信息刷新到 AWR 表中,從而保存在磁盤上,并且信息可以通過視圖 DBA_HIST_ACTIVE_SESS_HISTORY 來查看。
    ?
    ?
    人工采集
    ?
    ??? 快照默認是自動采集的,但您也可以按需要采集它們。所有的 AWR 功能都在程序包 DBMS_WORKLOAD_REPOSITORY 中實施。要采集一次快照,只需發出下面的命令:
    ?
    execute dbms_workload_repository.create_snapshot

    ??? 它立即采集一次快照,快照被記錄在表 WRM$_SNAPSHOT 中。采集的量度是針對 TYPICAL 級別的。如果您想采集更詳細的統計數據,您可以在上面的過程中將參數 FLUSH_LEVEL 設置為 ALL。統計數據自動刪除,但也可以通過調用過程 drop_snapshot_range() 來手動刪除。
    ?
    ?
    基準線
    ?
    ??? 一次典型的性能調整實踐從采集量度的基準線集合、作出改動、然后采集另一個基準線集合開始。可以比較這兩個集合來檢查所作的改動的效果。在 AWR 中,對現有的已采集的快照可以執行相同類型的比較。假定一個名稱為 apply_interest 的高度資源密集的進程在下午 1:00 到 3:00 之間運行,對應快照 ID 56 到 59。我們可以為這些快照定義一個名稱為 apply_interest_1 的基準線:
    ?
    exec dbms_workload_repository.create_baseline (56,59,'apply_interest_1')
    ?
    ??? 這一操作將快照從 56 到 59 編號,作為上面指定的基準線的一部分。查看現有的基準線:
    ?
    select * from dba_hist_baseline;
    ?
    ????? DBID BASELINE_ID BASELINE_NAME??????? START_SNAP_ID END_SNAP_ID
    ---------- ----------- -------------------- ------------- -----------
    4133493568?????????? 1 apply_interest_1??????????????? 56????????? 59
    ?
    ??? 在一些調整步驟之后,我們可以創建另一個基準線 — 假設名稱為 apply_interest_2,然后只為那些與這兩條基準線相關的快照比較量度。像這樣把快照分隔在僅僅幾個集合中有助于研究調整對于性能量度的影響。您可以在分析之后使用 drop_baseline() 來刪除基準線;快照將保留。此外,當清除例程開始刪除舊的快照時,與基準線相關的快照不會被清除,從而允許進行進一步的分析。
    ?
    ?
    結論
    ?
    ??? 這一部分的目的只是介紹 AWR 非常基本的方面。關于更完整的內容,請參見 Oracle Database 10g 文檔。此外,關于 AWR 和 ADDM 的一個極好的論述可以在技術白皮書自我管理的數據庫:自動性能診斷中找到。在第 15 周,您將了解到關于 ADDM 及使用它來解決實際問題的更多內容。
    ?
    ?
    ?
    ?
    posted on 2009-08-07 23:12 decode360 閱讀(230) 評論(0)  編輯  收藏 所屬分類: 08.DBA
    主站蜘蛛池模板: 污污免费在线观看| 亚洲精品国产免费| 久久久久亚洲av无码专区蜜芽| 四虎在线免费视频| 在线观看亚洲精品专区| 久久久久亚洲Av片无码v| 男女超爽刺激视频免费播放 | 在线观看亚洲天天一三视| 99精品视频免费在线观看| 亚洲av日韩精品久久久久久a| 亚洲成AV人片在线观看| 四虎成人免费影院网址| 日本一区午夜艳熟免费| 亚洲精品无码成人片久久不卡 | 最新亚洲人成无码网www电影| 久久国产亚洲观看| 免费一级毛片免费播放| 真人做人试看60分钟免费视频| 一级特黄特色的免费大片视频| 亚洲1234区乱码| 亚洲成av人影院| 国产精品亚洲二区在线观看 | 毛片无码免费无码播放| 日韩在线观看免费| 国产亚洲精品bv在线观看| 久久国产精品亚洲一区二区| heyzo亚洲精品日韩| 成人毛片视频免费网站观看| 99xxoo视频在线永久免费观看| 无码人妻一区二区三区免费视频 | 99精品视频免费在线观看| XXX2高清在线观看免费视频| 亚洲乱妇熟女爽到高潮的片| 亚洲欧洲日本天天堂在线观看| 国产成A人亚洲精V品无码| 午夜亚洲福利在线老司机| 成年美女黄网站18禁免费| 51在线视频免费观看视频| 黄页免费在线观看 | 99在线免费视频| 特a级免费高清黄色片|