自動(dòng)工作負(fù)載信息庫(kù)
學(xué)習(xí)使用新的特性,這些特性采集數(shù)據(jù)庫(kù)性能統(tǒng)計(jì)數(shù)據(jù)和量度,,以供分析和調(diào)整,,并顯示在數(shù)據(jù)庫(kù)中花費(fèi)的準(zhǔn)確時(shí)間,甚至保存會(huì)話信息 當(dāng)您有數(shù)據(jù)庫(kù)性能問(wèn)題時(shí),,要解決它您首先要作的是什么,?一種常見的方法是看是否存在一種模式:回答諸如 “ 相同的問(wèn)題 是否重復(fù)出現(xiàn)? ” ,, “ 它是否在某個(gè)特定的時(shí)間段出現(xiàn),? ” 和 “ 兩個(gè)問(wèn)題之間是否有聯(lián)系? ” 之類的問(wèn)題,,將幾乎總會(huì)帶來(lái)更好的診斷結(jié)果,。 作為一個(gè)數(shù)據(jù)庫(kù)管理員,您可能已經(jīng)投資購(gòu)買了第三方工具或使用自己開發(fā)的工具來(lái)在數(shù)據(jù)庫(kù)運(yùn)行期間采集詳細(xì)的統(tǒng)計(jì)數(shù)據(jù),,并從這些統(tǒng)計(jì)數(shù)據(jù)中導(dǎo)出獲得性能量度,。在緊急的情況下,,您可以訪問(wèn)這些量度來(lái)與當(dāng)前的情況作比較。再度查看這些過(guò)去的事件可以給當(dāng)前的問(wèn)題帶來(lái)一些啟發(fā),,因此不斷采集相關(guān)的統(tǒng)計(jì)數(shù)據(jù)對(duì)于性能分析變得很重要,。 一段時(shí)間以來(lái), Oracle 在這個(gè)領(lǐng)域中的解決方案是它內(nèi)置的工具 Statspack ,。雖然某些情況下證明它是非常有價(jià)值的,,但常常缺少性能故障診斷實(shí)踐所需的強(qiáng)健性。 Oracle Database 10 g 提供了一個(gè)顯著改進(jìn)的工具:自動(dòng)工作負(fù)載信息庫(kù) (AWR) ,。 AWR 和數(shù)據(jù)庫(kù)一起安裝,,不但采集統(tǒng)計(jì)數(shù)據(jù),還采集導(dǎo)出的量度,。 快速測(cè)試驅(qū)動(dòng)程序 通過(guò)運(yùn)行 $ORACLE_HOME/rdbms/admin 目錄中的 awrrpt.sql 腳本,, AWR 的功能可以立即通過(guò)它從采集的統(tǒng)計(jì)數(shù)據(jù)和量度中生成的報(bào)表得到最好的說(shuō)明。這個(gè)腳本從外觀和感覺上類似于 Statspack ,,它顯示所有的現(xiàn)有 AWR 快照并請(qǐng)求兩個(gè)特定的快照作為時(shí)間間隔邊界,。它產(chǎn)生兩種類型的輸出:文本格式(類似于 Statspack 報(bào)表的文本格式但來(lái)自于 AWR 信息庫(kù))和默認(rèn)的 HTML 格式(擁有到部分和子部分的所有超鏈接),從而提供了非常用戶友好的報(bào)表?,F(xiàn)在運(yùn)行該腳本以查看報(bào)表,,從而對(duì) AWR 的功能有一個(gè)了解。 實(shí)施 現(xiàn)在,,讓我們來(lái)看看 AWR 是如何設(shè)計(jì)和構(gòu)建的,。 AWR 實(shí)質(zhì)上是一個(gè) Oracle 的內(nèi)置工具,它采集與性能相關(guān)的統(tǒng)計(jì)數(shù)據(jù),,并從那些統(tǒng)計(jì)數(shù)據(jù)中導(dǎo)出性能量度,,以跟蹤潛在的問(wèn)題。與 Statspack 不同,,快照由一個(gè)稱為 MMON 的新的后臺(tái)進(jìn)程及其從進(jìn)程自動(dòng)地每小時(shí)采集一次,。為了節(jié)省空間,采集的數(shù)據(jù)在 7 天后自動(dòng)清除,??煺疹l率和保留時(shí)間都可以由用戶修改。要查看當(dāng)前的設(shè)置,,您可以使用下面的語(yǔ)句: select snap_interval, retention from dba_hist_wr_control;
SNAP_INTERVAL RETENTION ------------------- ------------------- +00000 01:00:00.0 +00007 00:00:00.0 這些 SQL 語(yǔ)句顯示快照每小時(shí)采集一次,,采集的數(shù)據(jù)保留 7 天。要修改設(shè)置 — 例如,,快照時(shí)間間隔為 20 分鐘,,保留時(shí)間為兩天 — 您可以發(fā)出以下命令。參數(shù)以分鐘為單位,。 begin dbms_workload_repository.modify_snapshot_settings ( interval => 20, retention => 2*24*60 ); end; AWR 使用幾個(gè)表來(lái)存儲(chǔ)采集的統(tǒng)計(jì)數(shù)據(jù),,所有的表都存儲(chǔ)在新的名稱為 SYSAUX 的特定表空間中的 SYS 模式下,,并且以 WRM$_* 和 WRH$_* 的格式命名。前一種類型存儲(chǔ)元數(shù)據(jù)信息(如檢查的數(shù)據(jù)庫(kù)和采集的快照),,后一種類型保存實(shí)際采集的統(tǒng)計(jì)數(shù)據(jù),。(您可能已經(jīng)猜到, H 代表 “ 歷史數(shù)據(jù) (historical)” 而 M 代表 “ 元數(shù)據(jù) (metadata)” ,。)在這些表上構(gòu)建了幾種帶前綴 DBA_HIST_ 的視圖,這些視圖可以用來(lái)編寫您自己的性能診斷工具,。視圖的名稱直接與表相關(guān),;例如,視圖 DBA_HIST_SYSMETRIC_SUMMARY 是在 WRH$_SYSMETRIC_SUMMARY 表上構(gòu)建的,。 AWR 歷史表采集的信息比 Statspack 多許多,,這些信息包括表空間使用率、文件系統(tǒng)使用率,、甚至操作系統(tǒng)統(tǒng)計(jì)數(shù)據(jù),。這些表的完整的列表可以通過(guò)以下命令從數(shù)據(jù)字典中看到: select view_name from user_views where view_name like 'DBA\_HIST\_%' escape '\'; 視圖 DBA_HIST_METRIC_NAME 定義 AWR 采集到的重要的量度、它們所屬的組和采集它們的單位,。例如,,下面是一個(gè)記錄(豎直格式): 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 它顯示一個(gè)量度 “ 每秒 CPU 使用率 ” 以 “ 每秒的厘秒數(shù) ” 為單位進(jìn)行測(cè)量,并且該量度屬于一個(gè)量度組 “System Metrics Long Duration” ,。這條記錄可以和其它的表(如 DBA_HIST_SYSMETRIC_SUMMARY )結(jié)合,,以獲得數(shù)據(jù)庫(kù)的活動(dòng)信息,形式如下: 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 時(shí)間是如何消耗的(以厘秒為單位),。標(biāo)準(zhǔn)差加入到了我們的分析中,,它有助于確定平均數(shù)字是否反映了實(shí)際的工作負(fù)載。在第一條記錄中,,平均值是每秒消耗 CPU 時(shí)間 3 厘秒,,但標(biāo)準(zhǔn)差是 9.81 ,這意味著平均值 3 不能反映工作負(fù)載,。在第二個(gè)例子中,,平均值為 28 ,標(biāo)準(zhǔn)差為 5.9 ,,這更具有代表性,。這種類型的信息趨勢(shì)有助于了解幾個(gè)環(huán)境參數(shù)對(duì)性能量度的影響。 使用統(tǒng)計(jì)數(shù)據(jù) 迄今為止,,我們看到了 AWR 所采集的內(nèi)容,,現(xiàn)在讓我們看看它將如何處理數(shù)據(jù)。 大多數(shù)性能問(wèn)題并不是孤立存在的,,而留有指示性的跡象,這些跡象將通向問(wèn)題最終的根源,。讓我們使用一個(gè)典型的調(diào)整實(shí)踐來(lái)說(shuō)明這一點(diǎn):您注意到系統(tǒng)很慢,于是決定查看等待的原因,。您檢查發(fā)現(xiàn) “ 緩沖區(qū)忙等待 ” 非常高,。問(wèn)題可能出在哪里呢?有幾種可能:可能有一個(gè)單調(diào)增加的索引,,可能一個(gè)表太滿了,,以至于要求將單個(gè)數(shù)據(jù)塊非常快速地加載到內(nèi)存中,,或其它一些因素,。無(wú)論在哪種情況下,您都首先要確定存在問(wèn)題的段,。如果它是一個(gè)索引段,,那么您可以決定重新構(gòu)建它,把它修改為一個(gè)反向鍵索引,,或把它轉(zhuǎn)換成一個(gè)在 Oracle Database 10 g 中引進(jìn)的散列分區(qū)索引,。如果它是一個(gè)表,您可以考慮修改存儲(chǔ)參數(shù)來(lái)使它不那么密集,,或者利用自動(dòng)段空間管理把它轉(zhuǎn)移到一個(gè)表空間中,。 您的處理計(jì)劃一般是有規(guī)律的,并且通?;谀鷮?duì)各種事件的了解和您處理它們的經(jīng)驗(yàn)?,F(xiàn)在設(shè)想相同的事情由一個(gè)引擎來(lái)完成,這個(gè)引擎采集量度并根據(jù)預(yù)先確定的邏輯來(lái)推出可能的計(jì)劃,。您的工作不就變得更輕松了嗎,? 現(xiàn)在在 Oracle Database 10 g 中推出的這個(gè)引擎稱為自動(dòng)數(shù)據(jù)庫(kù)診斷監(jiān)控程序 (ADDM) 。為了作出決策,, ADDM 使用了由 AWR 采集的數(shù)據(jù),。在上面的討論中, ADDM 可以看到發(fā)生了緩沖區(qū)忙等待,,然后取出相應(yīng)的數(shù)據(jù)來(lái)查看發(fā)生緩沖區(qū)忙等待的段,,評(píng)估其特性和成分,最后為數(shù)據(jù)庫(kù)管理員提供解決方案,。在 AWR 進(jìn)行的每一次快照采集之后,,調(diào)用 ADDM 來(lái)檢查量度并生成建議。因此,,實(shí)際上您擁有了一個(gè)一天二十四小時(shí)工作的自動(dòng)數(shù)據(jù)庫(kù)管理員,,它主動(dòng)地分析數(shù)據(jù)并生成建議,從而把您解放出來(lái),,使您能夠關(guān)注更具有戰(zhàn)略意義的問(wèn)題,。 要查看 ADDM 建議和 AWR 信息庫(kù)數(shù)據(jù),,請(qǐng)使用在名稱為 DB Home 的頁(yè)面上的新的 Enterprise Manager 10 g 控制臺(tái)。要查看 AWR 報(bào)表,,您可以從管理轉(zhuǎn)至工作負(fù)載信息庫(kù),,然后轉(zhuǎn)至 Snapshots 來(lái)查看它們。在以后的部分中,,我們將更詳細(xì)地討論 ADDM ,。 您還可以指定根據(jù)特定的情況來(lái)生成警報(bào)。這些警報(bào)稱為服務(wù)器生成警報(bào),,它們被推送到高級(jí)隊(duì)列中,,在其中它們可以被任意監(jiān)聽它的客戶端使用。一個(gè)這樣的客戶端是 Enterprise Manager 10 g ,,在其中警報(bào)被突出顯示。 時(shí)間模型 當(dāng)您有性能問(wèn)題時(shí),,要縮短響應(yīng)時(shí)間您最先想到的是什么,?很明顯,您希望消除(或減少)增加時(shí)間的因素的根源,。您如何知道時(shí)間花費(fèi)在哪里 — 不是等待,,而是真正在進(jìn)行工作? Oracle Database 10 g 引進(jìn)了時(shí)間模型,,以確定在各個(gè)地方花費(fèi)的時(shí)間,。花費(fèi)的總的系統(tǒng)時(shí)間記錄在視圖 V$SYS_TIME_MODEL 中,。下面是查詢和輸出結(jié)果,。 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 的統(tǒng)計(jì)量,它代表自從例程啟動(dòng)起在數(shù)據(jù)庫(kù)中花費(fèi)的時(shí)間,。運(yùn)行示例工作負(fù)載,,并再次從視圖中選中統(tǒng)計(jì)值。統(tǒng)計(jì)值的差異將代表該工作負(fù)載在數(shù)據(jù)庫(kù)中花費(fèi)的時(shí)間,。在又一個(gè)調(diào)整回合之后,,執(zhí)行相同的分析,統(tǒng)計(jì)值的差異將顯示在調(diào)整之后 DB Time 的變化,,這可以與第一次修改進(jìn)行比較,,以查看調(diào)整動(dòng)作對(duì)數(shù)據(jù)庫(kù)時(shí)間的影響。 除數(shù)據(jù)庫(kù)時(shí)間之外,, V$SYS_TIME_MODEL 視圖顯示了很多其它的統(tǒng)計(jì)量,,如在不同類型的分析,甚至在 PL/SQL 編譯中花費(fèi)的時(shí)間,。 這個(gè)視圖還顯示了總的系統(tǒng)時(shí)間,,不過(guò)您可能對(duì)一個(gè)更加詳細(xì)的視圖感興趣:會(huì)話級(jí)時(shí)間,。時(shí)間統(tǒng)計(jì)數(shù)據(jù)還在會(huì)話級(jí)進(jìn)行采集,如視圖 V$SESS_TIME_MODEL 中所示,,在其中可以看到當(dāng)前連接的會(huì)話(活動(dòng)和不活動(dòng)的)的所有統(tǒng)計(jì)數(shù)據(jù),。額外的列 SID 指示顯示的統(tǒng)計(jì)數(shù)據(jù)的會(huì)話的 SID 。 在早期的版本中,,這種分析是不可能得到的,,用戶被迫進(jìn)行猜測(cè)或從各種來(lái)源進(jìn)行分析。在 Oracle Database 10 g 中,,獲得這種信息輕而易舉,。 活動(dòng)會(huì)話歷史 Oracle Database 10 g 中的視圖 V$SESSION 得到了改善;所有這些改善中最有價(jià)值的是包含了等待事件和它們的持續(xù)時(shí)間,,從而不再需要查看視圖 V$SESSION_WAIT ,。不過(guò),因?yàn)檫@個(gè)視圖只反映實(shí)時(shí)的值,,所以當(dāng)稍后查看它時(shí),,一些重要的信息丟失了。例如,,如果您選擇從這個(gè)視圖中檢查是否有任何會(huì)話在等待任何非空閑的事件,,如果有的話,調(diào)查這個(gè)事件,,您可能發(fā)現(xiàn)不了任何東西,,因?yàn)榈侥x中它的時(shí)候等待一定已經(jīng)結(jié)束了。 進(jìn)入新的特性活動(dòng)會(huì)話歷史 (ASH) ,,它類似于 AWR ,,在一個(gè)緩沖區(qū)中存儲(chǔ)會(huì)話性能統(tǒng)計(jì)數(shù)據(jù),以便稍后進(jìn)行分析,。不過(guò),,與 AWR 不同,存儲(chǔ)不是永久性地在一個(gè)表中進(jìn)行,,而是在內(nèi)存中進(jìn)行,,并在視圖 V$ACTIVE_SESSION_HISTORY 中顯示。數(shù)據(jù)每秒輪詢一次,,并且只有輪詢活動(dòng)會(huì)話,。隨著時(shí)間進(jìn)行,舊的項(xiàng)目在一個(gè)循環(huán)緩沖區(qū)中被刪除,,以容納新的項(xiàng)目,,并且這些舊的項(xiàng)目將在視圖中顯示。要找出有多少個(gè)會(huì)話在等待某些事件,您可以使用下面的命令 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# 這條命令告訴您事件的名稱和等待花費(fèi)了多少時(shí)間,。如果您想要深入調(diào)查某個(gè)特定的等待事件,, ASH 的額外的列也將幫助您實(shí)現(xiàn)這一目的。例如,,如果會(huì)話等待的事件之一是緩沖區(qū)忙等待,,那么正確的診斷必須指出發(fā)生等待事件的段。您可以從 ASH 視圖列 CURRENT_OBJ# 中獲得這一信息,,然后該列可以和 DBA_OBJECTS 結(jié)合,,以獲得存在問(wèn)題的段。 ASH 還記錄并行查詢服務(wù)器會(huì)話,,這對(duì)診斷并行查詢等待事件非常有用,。如果記錄是針對(duì)一個(gè)并行查詢從屬進(jìn)程,那么協(xié)調(diào)服務(wù)器會(huì)話的 SID 由 QC_SESSION_ID 列指定,。列 SQL_ID 記錄產(chǎn)生等待事件的 SQL 語(yǔ)句的 ID ,,該列可以和 V$SQL 視圖結(jié)合,以獲取存在問(wèn)題的 SQL 語(yǔ)句,。為了方便一個(gè)共享用戶環(huán)境(如 web 應(yīng)用程序)中的客戶端的識(shí)別,,也顯示了 CLIENT_ID 列,這可以由 DBMS_SESSION.SET_IDENTIFIER 來(lái)設(shè)置,。 既然 ASH 信息這么有價(jià)值,那么如果以一種類似于 AWR 的永久方式來(lái)保存這種信息不是很好嗎,?幸運(yùn)的是,,它是以這種方式來(lái)進(jìn)行保存的;由 MMON 從進(jìn)程將信息刷新到 AWR 表中,,從而保存在磁盤上,,并且信息可以通過(guò)視圖 DBA_HIST_ACTIVE_SESS_HISTORY 來(lái)查看。 人工采集 快照默認(rèn)是自動(dòng)采集的,,但您也可以按需要采集它們,。所有的 AWR 功能都在程序包 DBMS_WORKLOAD_REPOSITORY 中實(shí)施。要采集一次快照,,只需發(fā)出下面的命令: execute dbms_workload_repository.create_snapshot 它立即采集一次快照,,快照被記錄在表 WRM$_SNAPSHOT 中。采集的量度是針對(duì) TYPICAL 級(jí)別的,。如果您想采集更詳細(xì)的統(tǒng)計(jì)數(shù)據(jù),,您可以在上面的過(guò)程中將參數(shù) FLUSH_LEVEL 設(shè)置為 ALL 。統(tǒng)計(jì)數(shù)據(jù)自動(dòng)刪除,,但也可以通過(guò)調(diào)用過(guò)程 drop_snapshot_range() 來(lái)手動(dòng)刪除,。 基準(zhǔn)線 一次典型的性能調(diào)整實(shí)踐從采集量度的基準(zhǔn)線集合、作出改動(dòng),、然后采集另一個(gè)基準(zhǔn)線集合開始,??梢员容^這兩個(gè)集合來(lái)檢查所作的改動(dòng)的效果。在 AWR 中,,對(duì)現(xiàn)有的已采集的快照可以執(zhí)行相同類型的比較,。假定一個(gè)名稱為 apply_interest 的高度資源密集的進(jìn)程在下午 1:00 到 3:00 之間運(yùn)行,對(duì)應(yīng)快照 ID 56 到 59 ,。我們可以為這些快照定義一個(gè)名稱為 apply_interest_1 的基準(zhǔn)線: exec dbms_workload_repository.create_baseline (56,59,'apply_interest_1') 這一操作將快照從 56 到 59 編號(hào),,作為上面指定的基準(zhǔn)線的一部分。查看現(xiàn)有的基準(zhǔn)線: select * from dba_hist_baseline;
DBID BASELINE_ID BASELINE_NAME START_SNAP_ID END_SNAP_ID ---------- ----------- -------------------- ------------- ----------- 4133493568 1 apply_interest_1 56 59 在一些調(diào)整步驟之后,,我們可以創(chuàng)建另一個(gè)基準(zhǔn)線 — 假設(shè)名稱為 apply_interest_2 ,,然后只為那些與這兩條基準(zhǔn)線相關(guān)的快照比較量度。像這樣把快照分隔在僅僅幾個(gè)集合中有助于研究調(diào)整對(duì)于性能量度的影響,。您可以在分析之后使用 drop_baseline() 來(lái)刪除基準(zhǔn)線,;快照將保留。此外,,當(dāng)清除例程開始刪除舊的快照時(shí),,與基準(zhǔn)線相關(guān)的快照不會(huì)被清除,從而允許進(jìn)行進(jìn)一步的分析,。 結(jié)論 這一部分的目的只是介紹 AWR 非?;镜姆矫妗jP(guān)于更完整的內(nèi)容,,請(qǐng)參見 Oracle Database 10 g 文檔 ,。此外,關(guān)于 AWR 和 ADDM 的一個(gè)極好的論述可以在技術(shù)白皮書 自我管理的數(shù)據(jù)庫(kù):自動(dòng)性能診斷 中找到,。在第 15 周,,您將了解到關(guān)于 ADDM 及使用它來(lái)解決實(shí)際問(wèn)題的更多內(nèi)容,,。 |
|
來(lái)自: 168一路發(fā) > 《oracle10特性》