讓我們看看該功能的工作方式。從 Advisor Central 屏幕中,單擊 SQL Access Advisor 鏈接。
點擊查看大圖
從標題“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)容相似。 檢查是否啟用了跟蹤
假如使用程序包 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、對象、文件、會話、模塊、操作等。
從該屏幕中您可以執(zhí)行許多有用的任務(wù),如更改并行度的默認值以及估算百分比。 傳輸 AWR 數(shù)據(jù)
假設(shè)您要嘗試解決生產(chǎn)數(shù)據(jù)庫中的某些性能問題。本文有一部分已經(jīng)說明了 AWR 數(shù)據(jù)對于分析是很重要的。但在正常的生產(chǎn)期間分析 AWR 數(shù)據(jù)可能并不合適,甚至是不可行的。相反,您可能希望將數(shù)據(jù)加載到某個中心位置以進行比較分析。如何完成該任務(wù)呢?
正如我在上面指出的,將 AWR 移動到其他數(shù)據(jù)庫具有很多優(yōu)點和用途。可以在不同的數(shù)據(jù)庫中分析數(shù)據(jù)而不會對生產(chǎn)造成太大的影響。此外,可以構(gòu)建一個由從多個數(shù)據(jù)庫中收集的 AWR 數(shù)據(jù)組成的中心數(shù)據(jù)庫。