国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle 10g第2版新特性之性能特性

2024-08-29 13:35:54
字體:
供稿:網(wǎng)友
掛起但未癱瘓:附連內(nèi)存的 SGA 查詢

  假設(shè)您使用 Oracle 企業(yè)治理器診斷和解決性能問題。一天,出現(xiàn)了一個棘手的問題:一個設(shè)計糟糕的應(yīng)用程序引起了嚴重的庫高速緩存鎖定問題,并且數(shù)據(jù)庫呈現(xiàn)掛起狀態(tài)。您必須快速確定導(dǎo)致該問題發(fā)生的會話,并快速終止這些會話。

  您可以啟動 Oracle 企業(yè)治理器來診斷此問題。且慢!假如整個數(shù)據(jù)庫布滿了掛起的會話,那么 Oracle 企業(yè)治理器中的查詢是否也會掛起?

  假如使用 Oracle 數(shù)據(jù)庫 10g 第 2 版,則答案是否定的。正如我在第 2 部分中所介紹的,在該版本中,“在內(nèi)存訪問模式下進行監(jiān)控”選項使企業(yè)治理器可以直接從 SGA 內(nèi)存(而不是 V$session)中選擇會話。因為在該模式下繞過了 SQL 層,掛起的數(shù)據(jù)庫就不會阻礙此查詢的執(zhí)行。相反,將自動啟動查詢。

  讓我們看看該特性是如何工作的。在 EnterPRise Manager 屏幕上,選擇 Performance 選項卡并滾動到該頁面底部的“Additional Monitoring Links”部分,屏幕與下圖類似。

Oracle 10g第2版新特性之性能特性(圖一)
點擊查看大圖


  注重紅色橢圓框中“Hang Analysis”的超鏈接。單擊該鏈接,將顯示一個與下圖類似的屏幕。

Oracle 10g第2版新特性之性能特性(圖二)
點擊查看大圖


  該圖展示了各種“死”會話。在該示例中,您可以看到 SID 為 193 的會話(根會話)已經(jīng)阻止了其他兩個會話,即 192 和 214。該圖中的會話顏色表示會話受阻的時間。可以單擊 SID 訪問 Session Details 屏幕,以獲取更多信息。

  還記得 ORADEBUG 實用程序嗎?Oracle 企業(yè)治理器使用該實用程序獲得有關(guān)系統(tǒng)掛起的數(shù)據(jù)。啟用 SGA 直接連接時,Oracle 將對每個實例使用一個 SQL 收集器。該收集器隨企業(yè)治理器自動啟動。檢索到以下視圖中的數(shù)據(jù): V$SESSION V$SESSION_WAIT V$SYSTEM_EVENT V$SYSSTAT
  附連內(nèi)存的 SGA 查詢是一個非常強大的特性,以后肯定能幫您解決棘手問題。我們都對可“征服”數(shù)據(jù)庫的應(yīng)用程序有一種親切感,為什么呢?現(xiàn)在,您可以給出答案了。我認為此特性是第 2 版一個最適用于數(shù)據(jù)庫治理員的特性。

  可中斷的 SQL access Advisor

  您可能熟悉 Oracle 數(shù)據(jù)庫 10g 中的 SQL Access Advisor。它主要提供了一個自動化的方法,通過確定可提高 SQL 性能的索引和物化視圖來調(diào)整 SQL 工作負載。

  但請考慮下面這種情況:您碰到了一些性能問題,并希望對一組 SQL 語句運行 SQL Access Advisor。為獲得一個更準確的分析,您選擇了“綜合模式”選項。隨后,您將等待結(jié)果。

  假如 SQL 工作負載很大(包含上百條語句)并且 SQL 語句比較復(fù)雜,您可能等待較長的時間。但與些同時卻用戶迫切要求您提供答案。您該怎么辦?

  在 Oracle 數(shù)據(jù)庫 10g 第 2 版中,您可以輕松地中斷此顧問程序并查看到目前為止生成的建議或查找結(jié)果。第 1 版中的 SQL Tuning Advisor 中提供這些功能,現(xiàn)在已經(jīng)擴展到 SQL Access Advisor。

  讓我們看看該功能的工作方式。從 Advisor Central 屏幕中,單擊 SQL Access Advisor 鏈接。

Oracle 10g第2版新特性之性能特性(圖三)
點擊查看大圖


  從標題“Actions”旁邊的右側(cè)下拉列表中選擇“Interrupt”選項,然后按 Go 按鈕。該命令將中斷 SQL Access Advisor,您可以立即看到建議。當然,這些建議并不是完整的集合,但在大多數(shù)情況下可以滿足用戶的需要。

  假如您使用的是命令行版本的 SQL Access Advisor 而不是 Oracle 企業(yè)治理器,那么您是否仍可以查看工作進度?當然,您可以使用新的視圖 V$ADVISOR_PROGRESS。 SQL> desc v$advisor_progress Name Null?類型 ----------------------------------------- -------- ----------- SID NUMBER SERIAL# NUMBER USERNAME VARCHAR2(30) OPNAME VARCHAR2(64)
ADVISOR_NAME VARCHAR2(64) TASK_ID NUMBER TARGET_DESC VARCHAR2(32) SOFAR NUMBER TOTALWORK NUMBER UNITS VARCHAR2(32) BENEFIT_SOFAR NUMBER BENEFIT_MAX NUMBER FINDINGS NUMBER RECOMMENDATIONS NUMBER TIME_REMAINING NUMBER START_TIME DATE LAST_UPDATE_TIME DATE ELAPSED_SECONDS NUMBER ADVISOR_METRIC1 NUMBER METRIC1_DESC VARCHAR2(64)
  此處的列 TOTALWORK 和 SOFAR 顯示了已經(jīng)完成的工作量以及總工作量,這與您從 V$SESSION_LONGOPS 視圖中看到的內(nèi)容相似。 檢查是否啟用了跟蹤

  假如會話執(zhí)行的任務(wù)和預(yù)期不符,或者執(zhí)行速度比較慢,那么大多數(shù)數(shù)據(jù)庫治理員的第一步是檢查等待事件。要構(gòu)建配置文件,您可能還需要長期跟蹤會話,那么在 user_dump_dest 目錄中將生成一個跟蹤文件。

  現(xiàn)在,假設(shè)您在某段時間內(nèi)對多個會話使用了端到端跟蹤,但現(xiàn)在不知道哪些會話處于跟蹤狀態(tài)。如何找出這些對話呢?

  方法之一是對大量跟蹤文件進行篩選,以提取 SID 和 Serial# 列并在數(shù)據(jù)庫的 V$SESSION 視圖中進行匹配。毋庸質(zhì)疑,這個過程比較復(fù)雜、困難并且輕易出錯。Oracle 數(shù)據(jù)庫 10g 第 2 版中提供了一個更優(yōu)秀、更簡單的方法:您所要做的只是查看一個視圖,即 V$SESSION。

  新增了三個新列顯示跟蹤狀態(tài):
  • sql_trace - 假如在會話中啟用了 SQL 跟蹤,則顯示 TRUE/FALSE
  • sql_trace_waits - 假如啟用了會話跟蹤,則可以讓跟蹤程序?qū)⒌却畔懭敫櫸募@對于診斷性能問題很有用。
  • sql_trace_binds - 假如會話使用綁定變量,則可以讓跟蹤程序?qū)⒔壎ㄗ兞恐祵懭敫櫸募T摿酗@示 TRUE/FALSE。
  當未開啟會話跟蹤時,假如選擇這些列: select sid, serial#, sql_trace, sql_trace_waits, sql_trace_binds from v$session where username = 'HR'
  輸出結(jié)果如下: SID SERIAL# SQL_TRAC SQL_T SQL_T ---------- ---------- -------- ----- ----- 196 60946 DISABLED FALSE FALSE
  此處您可以看到,SID 為 196、Serial# 為 60946 的會話未啟用跟蹤。

  現(xiàn)在,您可以對等待事件(而不是綁定變量)啟用跟蹤。可以使用程序包 dbms_monitor 啟用跟蹤。 begin dbms_monitor.session_trace_enable ( session_id => 196, serial_num => 60960, waits => true, binds => false ); end; /
  現(xiàn)在,假如您要查看會話信息:   select sid, serial#, sql_trace, sql_trace_waits, sql_trace_binds from v$session where username = 'HR'
  輸出結(jié)果如下: SID SERIAL# SQL_TRAC SQL_T SQL_T ---------- ---------- -------- ----- ----- 196 60960 ENABLED TRUE FALSE
  注重,僅當使用程序包 dbms_monitor 中的過程 session_trace_enable 啟用跟蹤(而不是通過 alter session set sql_trace = true 或設(shè)置事件 10046)時,才會填充視圖 V$SESSION。在以后的某個時間點上,假如您要查明哪些會話已經(jīng)啟用了跟蹤,可以使用以上查詢執(zhí)行此操作。

  假如使用程序包 dbms_monitor 中的其他過程(如 SERV_MOD_ACT_TRACE_ENABLE 或 CLIENT_ID_TRACE_ENABLE)啟用了跟蹤,V$SESSION 視圖將不顯示該信息。相反,它們將記錄到另一個視圖 DBA_ENABLED_TRACES 中。可以將該視圖與其他相關(guān)信息存儲連接在一起以查看啟用了跟蹤的會話。例如,使用 SELECT *
FROM (SELECT SID, 'SESSION_TRACE' trace_type FROM v$session WHERE sql_trace = 'ENABLED') UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t WHERE t.trace_type = 'CLIENT_ID' AND s.client_identifier = t.primary_id) UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t, v$instance i WHERE t.trace_type = 'SERVICE' AND s.service_name = t.primary_id AND (t.instance_name IS NULL OR t.instance_name = i.instance_name)) UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t, v$instance i WHERE t.trace_type = 'SERVICE_MODULE' AND s.service_name = t.primary_id AND s.module = t.qualifier_id1 AND (t.instance_name IS NULL OR t.instance_name = i.instance_name)) UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t, v$instance i WHERE t.trace_type = 'SERVICE_MODULE_ACTION' AND s.service_name = t.primary_id AND s.module = t.qualifier_id1 AND s.action = t.qualifier_id2 AND (t.instance_name IS NULL OR t.instance_name = i.instance_name)) UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t, v$instance i WHERE t.trace_type = 'DATABASE' AND (t.instance_name IS NULL OR t.instance_name = i.instance_name))
  輸出結(jié)果如下: SID TRACE_TYPE ---------- --------------------- 136 SERVICE_MODULE 136 SERVICE_MODULE_ACTION
  您可以看到,您已經(jīng)對會話 136 的 Service Module 和 Service Module Action 啟用了跟蹤。但 DBA_ENABLED_TRACES 并未顯示綁定變量或等待事件。 活動會話歷史記錄

  現(xiàn)在您應(yīng)該很清楚自動工作負載信息庫 (AWR) 的重要性和有用性。(假如需要,請閱讀有關(guān) AWR 的內(nèi)容。 )簡單而言,AWR 以預(yù)定時間間隔在用戶和系統(tǒng)級別捕捉與工作負載相關(guān)的性能數(shù)據(jù),包括按不同的維度、量度捕捉的性能統(tǒng)計信息、操作系統(tǒng)統(tǒng)計信息以及 ASH 數(shù)據(jù)。

  活動會話歷史記錄 (ASH) 中記錄了最近所有活動會話的活動,它通過內(nèi)存中的循環(huán)緩沖區(qū)高效地捕捉這些活動并將它們高效地寫入 AWR ,可將開銷降低到最低程度。可以按不同的維度增加 ASH 數(shù)據(jù):TOP SQL、對象、文件、會話、模塊、操作等。

  然而,大多數(shù)數(shù)據(jù)庫治理員通常只要診斷臨時的性能問題。為診斷此類問題,Oracle 數(shù)據(jù)庫 10g 第 2 版引入了 ASH 報表。ASH 報表可用于整個數(shù)據(jù)庫或特定會話、SQL_ID、模塊、操作或這些維度的組合。

  訪問 ASH 報表的方法之一是從數(shù)據(jù)庫頁面進行訪問。選擇 Performance 選項卡,將出現(xiàn)一個類似下圖的屏幕。

Oracle 10g第2版新特性之性能特性(圖四)
點擊查看大圖


  注重“Run ASH Report”按鈕(位于紅色橢圓框內(nèi))。單擊該按鈕將顯示 Active Session History 報表:

Oracle 10g第2版新特性之性能特性(圖五)
點擊查看大圖


  您可以在該屏幕中輸入你期望的時段的起始時間和結(jié)束時間的日期和時間。根據(jù)需要輸入日期和時間,然后按右上角的“Generate Report”按鈕。默認的日期和時間將有一個 5 分鐘的間隔。

  單擊該按鈕后,您將在屏幕上看到該時段的 ASH 報表。假如仔細觀察,您將看到該報表類似于 STaspACK 報表;但由于它源自 AWR 數(shù)據(jù),因此其中的量度更為有用。下面顯示了該屏幕的一小部分:


Oracle 10g第2版新特性之性能特性(圖六)
點擊查看大圖

 
  可以按按鈕“Save to File”將該報表保存到文件,以便以后查看。

  注重“ASH Report”部分中的鏈接。在此處,您可以全覽不同類型的與性能相關(guān)的可用統(tǒng)計信息。例如,您只需單擊 Top Events 鏈接便會看到該時段中的最重要事件。假如該時段出現(xiàn)性能問題,該信息將為您提供很大的幫助。通過查看 ASH 報表中列出的各個維度的偏差,您通常可以確定導(dǎo)致瞬時尖峰的瓶頸。

  注重,該報表是根據(jù)相應(yīng)的從 AWR 收集的或從內(nèi)存中緩沖區(qū)提取的數(shù)據(jù)而得出的;因此,假如要診斷先前出現(xiàn)的性能問題,只需激活該時段的 ASH 報表便會看到任何可能已經(jīng)出現(xiàn)的問題。

  也可以通過命令行運行 ASH 報表,方法是運行位于 $OH/rdbms/admin/ashrpt.sql 中的由 Oracle 附帶的 SQL 腳本。 優(yōu)化程序統(tǒng)計信息治理

  Oracle 數(shù)據(jù)庫 10g 提供了多個非常有用的用于治理優(yōu)化程序統(tǒng)計信息的特性,如一個用于鎖定統(tǒng)計信息以防止后期覆蓋的特性。這些特性使收集和治理優(yōu)化程序統(tǒng)計信息這一任務(wù)變得輕而易舉。在 Oracle 數(shù)據(jù)庫 10g 第 2 版中,您可以使用 Oracle 企業(yè)治理器執(zhí)行該操作。

  從 Database 主頁中,單擊 Administration 選項卡。向下滾動到“Statistics Management”的部分,在該部分中您將看到如下所示的 Manage Optimizer Statistics 鏈接。

Oracle 10g第2版新特性之性能特性(圖七)
點擊查看大圖


  單擊該超鏈接將轉(zhuǎn)到下個屏幕:Manage Optimizer Statistics 頁面。

Oracle 10g第2版新特性之性能特性(圖八)
點擊查看大圖


  從該屏幕中,您可以使用右側(cè)的超鏈接執(zhí)行各種與統(tǒng)計信息相關(guān)的任務(wù)。例如,使用 Configure 按鈕,您可以通過選擇一個新窗口輕松地為作業(yè)配置一個不同的時段。

  一個尤其有用的特性是位于“Related Links”下的 Statistics Options 鏈接。單擊它將顯示以下屏幕:

Oracle 10g第2版新特性之性能特性(圖九)
點擊查看大圖


  從該屏幕中您可以執(zhí)行許多有用的任務(wù),如更改并行度的默認值以及估算百分比。 傳輸 AWR 數(shù)據(jù)

  假設(shè)您要嘗試解決生產(chǎn)數(shù)據(jù)庫中的某些性能問題。本文有一部分已經(jīng)說明了 AWR 數(shù)據(jù)對于分析是很重要的。但在正常的生產(chǎn)期間分析 AWR 數(shù)據(jù)可能并不合適,甚至是不可行的。相反,您可能希望將數(shù)據(jù)加載到某個中心位置以進行比較分析。如何完成該任務(wù)呢?

  Oracle 數(shù)據(jù)庫 10g 第 2 版中提供了一個用于此目的的新程序包 DBMS_SWRF_INTERNAL。要將它下載到 Data Pump 轉(zhuǎn)儲文件,您將使用過程 AWR_EXTRACT: 1 begin 2 DBMS_SWRF_INTERNAL.AWR_EXTRACT ( 3 dmpfile => 'awr_data.dmp', 4 dmpdir => 'TMP_DIR', 5 bid => 302, 6 eid => 305 7 ); 8* end;   我們來更具體地介紹一下以上各行。

行說明3此處介紹了數(shù)據(jù)的目標文件名。這是一個 Data Pump 導(dǎo)出文件。假如未提供文件名,則使用默認值 awrdat.dmp。4寫入轉(zhuǎn)儲文件的目錄對象。在本示例中,您可能已將目錄 TMP_DIR 定義為 /tmp。5該時段起始快照的 ID。6結(jié)束快照 ID。您在此處導(dǎo)出位于 302 和 305 之間的快照。
  現(xiàn)在,您可以將轉(zhuǎn)儲文件 awr_data.dmp 置于一個新位置,并使用同一程序包中的另一個過程 AWR_LOAD 加載它: 1 begin 2 DBMS_SWRF_INTERNAL.AWR_LOAD ( 3 SCHNAME => 'ARUP', 4 dmpfile => 'awr_data', 5 dmpdir => 'TMP_DIR' 6 ); 7* end;   在此代碼中,您將轉(zhuǎn)儲文件 awr_data.dmp 的內(nèi)容加載到由目錄對象 TMP_DIR 指定的目錄中。加載 AWR 數(shù)據(jù)時,它并不直接加載到 SYS 模式中,而是先進入另一個模式中。參數(shù) SCHNAME 中提供了模式名(如第 3 行中所示)。導(dǎo)入后,該數(shù)據(jù)移動到 SYS 模式中: 1 begin 2 DBMS_SWRF_INTERNAL.MOVE_TO_AWR ( 3 SCHNAME => 'ARUP' 4 ); 5* end;   此處,您將模式 ARUP 中的 AWR 數(shù)據(jù)移動到 SYS。

  正如我在上面指出的,將 AWR 移動到其他數(shù)據(jù)庫具有很多優(yōu)點和用途。可以在不同的數(shù)據(jù)庫中分析數(shù)據(jù)而不會對生產(chǎn)造成太大的影響。此外,可以構(gòu)建一個由從多個數(shù)據(jù)庫中收集的 AWR 數(shù)據(jù)組成的中心數(shù)據(jù)庫。

  所有這些加載步驟都已經(jīng)放置到一個名為 awrload.sql 的文件(位于 $ORACLE_HOME/rdbms/bin 目錄中)中。
同樣,腳本 awrextr.sql 包含提取過程的所有步驟。

  盡管這個將生產(chǎn) AWR 數(shù)據(jù)卸載到備用數(shù)據(jù)庫的機制已被外部化,但它在 Oracle 數(shù)據(jù)庫 10g 第 2 版中的主要用途是幫助解決客戶報告的任何問題。使用此方法,客戶可以發(fā)送 AWR 轉(zhuǎn)儲文件格式的原始數(shù)據(jù),支持人員隨后可以將這些數(shù)據(jù)導(dǎo)入到他們的模式中以幫助重現(xiàn)和診斷問題。

  比較時段報表

  假設(shè)出現(xiàn)這樣一種情況:您剛剛通知業(yè)務(wù)和應(yīng)用程序小組召開一個緊急會議。原因很明顯:數(shù)據(jù)庫很慢。(是否有任何其他原因?)開發(fā)技術(shù)主管指出了會議的要點:于昨天凌晨 1 點至凌晨 3 點之間運行的批處理程序非常慢。該程序在該時間通常運行大約 30 分鐘,而昨天凌晨卻運行了兩個小時。業(yè)務(wù)小組主管果斷聲明:“公司經(jīng)歷了潛在的收入損失。”

  “最近是否進行過更改”,您問到。“沒有,一切都未更改”,開發(fā)技術(shù)主管非常肯定地回答到。(“是的,沒錯”,您心里是這樣認為的。)

  聽起來熟悉嗎?假如您從事生產(chǎn)支持這個苦差事的時間甚至是我的十倍,您便會立即同意。您會怎么做?

  幸運地是,您擁有 Oracle 數(shù)據(jù)庫 10g 第 2 版,并在 Oracle 企業(yè)數(shù)據(jù)庫中啟動了 Snapshot 或 Time Periods 比較。使用此特性,您可以看到兩個時間間隔(而不僅僅是兩個時間點)之間的量度更改。例如,在本示例中,您可能請求查看昨天凌晨 1 點至凌晨 3 點之間的快照更改,并查看前天同一時段之間的快照更改。假如批處理過程在前天運行良好,而在昨天凌晨出現(xiàn)異常,那么快照更改將給您提供一個重要線索。

  以下是它的工作方式:啟動 Oracle 企業(yè)治理器并轉(zhuǎn)到 Performance 選項卡。在該頁面底部,您將看到“Additional Monitoring Links”部分。在該鏈接組中,搜索“Snapshots”。單擊該鏈接將顯示一個類似如下所示的屏幕。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 苏尼特右旗| 镇安县| 宝兴县| 佛教| 海阳市| 南丹县| 红河县| 龙川县| 辽宁省| 祁阳县| 马边| 芒康县| 邓州市| 丁青县| 日土县| 闻喜县| 福建省| 夏津县| 湘西| 宜黄县| 开原市| 抚顺县| 乳源| 调兵山市| 昌平区| 涟源市| 锡林浩特市| 长沙县| 罗定市| 德惠市| 洛宁县| 吴旗县| 镶黄旗| 罗田县| 洱源县| 汉沽区| 江油市| 五指山市| 长垣县| 澳门| 莆田市|