溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

oracle的快照和基線

發(fā)布時間:2020-07-09 22:14:20 來源:網(wǎng)絡(luò) 閱讀:777 作者:sunhuabin2016 欄目:關(guān)系型數(shù)據(jù)庫

1.查看當(dāng)前的AWR保存策略
select * from dba_hist_wr_control;

DBID,SNAP_INTERVAL,RETENTION,TOPNSQL
860524039,+00 01:00:00.000000,+07 00:00:00.000000,DEFAULT

以上結(jié)果表示,每小時產(chǎn)生一個SNAPSHOT,保留7天

2.調(diào)整AWR配置
AWR配置都是通過dbms_workload_repository包進(jìn)行配置

2.1調(diào)整AWR產(chǎn)生snapshot的頻率和保留策略,如:如將收集間隔時間改為30 分鐘一次。并且保留5天時間(注:單位都是為分鐘):
exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);

2.2關(guān)閉AWR,把interval設(shè)為0則關(guān)閉自動捕捉快照

2.3手工創(chuàng)建一個快照
exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();

2.4 查看快照
select * from sys.wrh$_active_session_history

2.5手工刪除指定范圍的快照
exec WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id => 22, high_snap_id => 32, dbid => 3310949047);

2.6創(chuàng)建baseline
exec dbms_workload_repository.create_baseline (56,59,'apply_interest_1')

2.7刪除baseline
exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name => ' apply_interest_1', cascade => FALSE);


3.生產(chǎn)AWR報告
$ORACLE_HOME/rdbms/admin/awrrpt.sql

 

4.1 Snapshots( 快照)

  前面操作報表生成時,snap這個關(guān)鍵字已經(jīng)出現(xiàn)過多次了,想必你對它充滿了疑惑,這個東西是哪來的咋來的誰讓它來的呢?事實上,Snap是Snapshot的簡寫,這正是AWR在自動性方面的體現(xiàn),雖然你沒有創(chuàng)建,但是AWR自動幫你創(chuàng)建了(當(dāng)然也可以手動創(chuàng)建snapshot),并且是定時(每小時)創(chuàng)建,定期清除(保留最近7天)。

  Snapshots 是一組某個時間點(diǎn)時歷史數(shù)據(jù)的集合,這些數(shù)據(jù)就可被ADDM(Automatic Database Diagnostic Monitor)用來做性能對比。默認(rèn)情況下,AWR能夠自動以每小時一次的頻率生成Snapshots性能數(shù)據(jù),并保留7天,,如果需要的話,DBA可以通過DBMS_WORKLOAD_REPOSITORY過程手動創(chuàng)建、刪除或修改snapshots。

  • 提示:調(diào)用DBMS_WORKLOAD_REPOSITORY包需要擁有DBA權(quán)限。

4.1.1  手動創(chuàng)建Snapshots

  手動創(chuàng)建Snapshots,通過DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT過程,例如:

SQL> exec dbms_workload_repository.create_snapshot();

  • PL/SQL procedure successfully completed.

  然后可以通過DBA_HIST_SNAPSHOT 視圖查看剛剛創(chuàng)建的Snapshots信息。

4.1.2  手動刪除Snapshots

  刪除Snapshots是使用DBMS_WORKLOAD_REPOSITORY包的另一個過程:DROP_SNAPSHOT_RANGE,該過程在執(zhí)行時可以通過指定snap_id的范圍的方式一次刪除多個Snapshots,例如:

SQL> select count(0) from dba_hist_snapshot where snap_id between 7509 and 7518;

  COUNT(0)

----------

        10

SQL> begin

  2   dbms_workload_repository.drop_snapshot_range(

  3     low_snap_id => 7509,

  4     high_snap_id => 7518,

  5     dbid => 3812548755);

  6  end;

  7  /

PL/SQL procedure successfully completed.

SQL> select count(0) from dba_hist_snapshot where snap_id between 7509 and 7518;

  COUNT(0)

----------

  •          0

  注意當(dāng)snapshots被刪除的話,與其關(guān)聯(lián)的ASH記錄也會級聯(lián)刪除。

4.1.3  修改Snapshots設(shè)置

  通過MODIFY_SNAPSHOT_SETTINGS過程,DBA可以調(diào)整包括快照收集頻率、快照保存時間、以及捕獲的SQL數(shù)量三個方面的設(shè)置。分別對應(yīng)MODIFY_SNAPSHOT_SETTINGS的三個參數(shù):

  • Retention :設(shè)置快照保存的時間,單位是分鐘。可設(shè)置的值最小為1天,最大為100年。設(shè)置該參數(shù)值為0的話,就表示永久保留收集的快照信息。

  • Interval :設(shè)置快照收集的頻率,以分鐘為單位??稍O(shè)置的值最小為10分鐘,最大為1年。如果設(shè)置該參數(shù)值為0,就表示禁用AWR特性。

  • Topnsql :指定收集的比較占用資源的SQL數(shù)量,可設(shè)置的值最小為30,最大不超過100000000。

  查看當(dāng)前快照收集的相關(guān)設(shè)置,可以通過DBA_HIST_WR_CONTROL視圖查看,例如:

SQL> select * from dba_hist_wr_control;


      DBID SNAP_INTERVAL            RETENTION            TOPNSQL

---------- ------------------------ -------------------- ----------

  • 3812548755 +00000 01:00:00.0        +00007 00:00:00.0    DEFAULT

  又比如通過MODIFY_SNAPSHOT_SETTTINGS過程修改snap_intrval的設(shè)置:

SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>120);

PL/SQL procedure successfully completed.

SQL> select * from dba_hist_wr_control;


      DBID SNAP_INTERVAL            RETENTION            TOPNSQL

---------- ------------------------ -------------------- ----------

  • 3812548755 +00000 02:00:00.0        +00007 00:00:00.0    DEFAULT

4.2 Baselines( 基線)

  Baseline ,直譯的話叫做基線,顧名思義的方式理解,就是用于比較的基本線。因為Baseline中包含指定時間點(diǎn)時的性能數(shù)據(jù),因此就可以用來與其它時間點(diǎn)時的狀態(tài)數(shù)據(jù)做對比,以分析性能問題。

  創(chuàng)建Baseline時,Snapshots是做為其中的一個組成部分存在,因此一般來說當(dāng)AWR自動維護(hù)快照時,如果定義過baseline,與baseline相關(guān)的快照不會被刪除,即使是過期的快照,這樣就相當(dāng)于手動保留了一份統(tǒng)計數(shù)據(jù)的歷史信息,DBA可以在適當(dāng)?shù)臅r間將其與現(xiàn)有的快照進(jìn)行對比,以生成相關(guān)的統(tǒng)計報表。

  用戶可以通過DBMS_WORKLOAD_REPOSITORY包中的相關(guān)過程,手動的創(chuàng)建或刪除Baseline。

4.2.1  創(chuàng)建Baseline

  創(chuàng)建Baseline使用CREATE_BASELINE過程,執(zhí)行該過程時分別指定開始和結(jié)果的snap_id,然后為該baseline定義一個名稱即可,例如:

SQL> BEGIN

  2    DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id => 7550,

  3                                             end_snap_id   => 7660,

  4                                             baseline_name => ¨am_baseline¨);

  5  END;

  6  /

PL/SQL procedure successfully completed.

SQL> select dbid,baseline_name,start_snap_id,end_snap_id from dba_hist_baseline;

      DBID BASELINE_NAME        START_SNAP_ID END_SNAP_ID

---------- -------------------- ------------- -----------

  • 3812548755 am_baseline                   7550        7660

4.2.2  刪除Baseline

  刪除Baseline使用DROP_BASELINE過程,刪除時可以通過cascade參數(shù)選擇是否將其關(guān)聯(lián)的Snapshots級別進(jìn)行刪除,例如:

SQL> BEGIN

  2    DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name => ¨am_baseline¨,

  3                                           cascade       => true);

  4  END;

  5  /

PL/SQL procedure successfully completed.

SQL> select * from dba_hist_baseline;

no rows selected

SQL> select * from dba_hist_snapshot where snap_id between 7550 and 7660;

  • no rows selected

  如上例中所示,刪除時指定了cascade參數(shù)值為true,對應(yīng)的snap也被級聯(lián)刪除了。

 

不管是EM也好,或是前面演示中使用的awr*.sql腳本也好,實質(zhì)都是訪問ORACLE中的部分相關(guān)視圖來生成統(tǒng)計數(shù)據(jù),因此如果DBA對自己的理解能力有足夠的自信,也可以直接查詢動態(tài)性能視圖(或相關(guān)數(shù)據(jù)字典)的方式來獲取自己想要的那部分性能數(shù)據(jù)。ORACLE將這部分性能統(tǒng)計數(shù)據(jù)保存在DBA_HIST開頭的數(shù)據(jù)字典中,要查詢當(dāng)前實例所有能夠訪問的DBA_HIST字典,可以通過下列語句:

SQL> select * from dict where table_name like ¨DBA_HIST%¨;

TABLE_NAME COMMENTS

------------------------------ --------------------------------------------------------------------------------

DBA_HIST_DATABASE_INSTANCE Database Instance Information

DBA_HIST_SNAPSHOT Snapshot Information

DBA_HIST_SNAP_ERROR Snapshot Error Information

DBA_HIST_BASELINE Baseline Metadata Information

DBA_HIST_WR_CONTROL Workload Repository Control Information

DBA_HIST_DATAFILE Names of Datafiles

DBA_HIST_FILESTATXS Datafile Historical Statistics Information

DBA_HIST_TEMPFILE Names of Temporary Datafiles

DBA_HIST_TEMPSTATXS Temporary Datafile Historical Statistics Information

DBA_HIST_COMP_IOSTAT I/O stats aggregated on component level

DBA_HIST_SQLSTAT SQL Historical Statistics Information

DBA_HIST_SQLTEXT SQL Text

......................

  • ........................

  ORACLE 數(shù)據(jù)庫中以DBA_HIST命名的視圖非常多,下面簡單介紹幾個,比如說:

V$ACTIVE_SESSION_HISTORY


  該視圖由ASH自動維護(hù),以每秒一次的頻率收集當(dāng)前系統(tǒng)中活動session的信息。雖然說是記錄SESSION的歷史記錄,不過該視圖與V$SESSION還是有差異的。

SQL> desc v$active_session_history;

Name Type Nullable Default Comments

------------------------- ------------ -------- ------- --------

SAMPLE_ID NUMBER Y

SAMPLE_TIME TIMESTAMP(3) Y

SESSION_ID NUMBER Y

SESSION_SERIAL# NUMBER Y

USER_ID NUMBER Y

SQL_ID VARCHAR2(13) Y

SQL_CHILD_NUMBER NUMBER Y

SQL_PLAN_HASH_VALUE NUMBER Y

FORCE_MATCHING_SIGNATURE NUMBER Y

SQL_OPCODE NUMBER Y

PLSQL_ENTRY_OBJECT_ID NUMBER Y

PLSQL_ENTRY_SUBPROGRAM_ID NUMBER Y

PLSQL_OBJECT_ID NUMBER Y

PLSQL_SUBPROGRAM_ID NUMBER Y

SERVICE_HASH NUMBER Y

SESSION_TYPE VARCHAR2(10) Y

SESSION_STATE VARCHAR2(7) Y

QC_SESSION_ID NUMBER Y

QC_INSTANCE_ID NUMBER Y

BLOCKING_SESSION NUMBER Y

BLOCKING_SESSION_STATUS VARCHAR2(11) Y

BLOCKING_SESSION_SERIAL# NUMBER Y

EVENT VARCHAR2(64) Y

EVENT_ID NUMBER Y

EVENT# NUMBER Y

SEQ# NUMBER Y

P1TEXT VARCHAR2(64) Y

P1 NUMBER Y

P2TEXT VARCHAR2(64) Y

P2 NUMBER Y

P3TEXT VARCHAR2(64) Y

P3 NUMBER Y

WAIT_CLASS VARCHAR2(64) Y

WAIT_CLASS_ID NUMBER Y

WAIT_TIME NUMBER Y

TIME_WAITED NUMBER Y

XID RAW(8) Y

CURRENT_OBJ# NUMBER Y

CURRENT_FILE# NUMBER Y

CURRENT_BLOCK# NUMBER Y

PROGRAM VARCHAR2(48) Y

MODULE VARCHAR2(48) Y

ACTION VARCHAR2(32) Y

  • CLIENT_ID VARCHAR2(64) Y

  v$session 中與操作相關(guān)的列均被收集,除此之外還冗余了部分列,這是為了方便DBA查詢V$ACTIVE_SESSION_HISTORY時能夠快速獲取到自己需要的數(shù)據(jù)。

DBA_HIST_ACTIVE_SESS_HISTORY


  該視圖與V$ACTIVE_SESSION_HISTORY的結(jié)構(gòu)灰常灰?;页5南胂?,功能也灰?;页;页5念愃?,都是記錄活動session的操作記錄,所不同點(diǎn)在于,V$ACTIVE_SESSION_HISTORY是ORACLE自動在內(nèi)存中維護(hù)的,受制于其可用內(nèi)存區(qū)限制,并非所有記錄都能保存,而DBA_HIST_ACTIVE_SESS_HISTORY視圖則是維護(hù)到磁盤中的。簡單理解的話,就是說通常情況下,DBA_HIST_ACTIVE_SESS_HISTORY視圖的數(shù)據(jù)量要比V$ACTIVE_SESSION_HISTORY的多。

  • 提示:上述結(jié)構(gòu)并不絕對,因為默認(rèn)情況下DBA_HIST_ACTIVE_SESS_HISTORY字典的數(shù)據(jù)每10秒收集一次,而V$ACTIVE_SESSION_HISTORY中則是每秒一次,因此也有可能V$ACTIVE_SESSION_HISTORY中記錄量更大。不過相對來說,DBA_HIST字典中保存的數(shù)據(jù)更長久。

DBA_HIST_DATABASE_INSTANCE


  該視圖用來顯示數(shù)據(jù)庫和實例的信息,比如DBID,實例名,數(shù)據(jù)庫版本等等信息,生成報表中第一行表格,就是由該視圖生成的。如圖:

  oracle的快照和基線

  如果你去分析awrrpt.sql腳本的話,會發(fā)現(xiàn)其中有如下腳本,上述表格中顯示的內(nèi)容信息,正是來自于下列腳本:

select distinct

(case when cd.dbid = wr.dbid and

cd.name = wr.db_name and

ci.instance_number = wr.instance_number and

ci.instance_name = wr.instance_name

then ¨* ¨

else ¨ ¨

end) || wr.dbid dbbid

, wr.instance_number instt_num

, wr.db_name dbb_name

, wr.instance_name instt_name

, wr.host_name host

  • from dba_hist_database_instance wr, v$database cd, v$instance ci;

DBA_HIST_SNAPSHOT


  該視圖用來記錄當(dāng)前數(shù)據(jù)庫收集到的快照信息。相信朋友應(yīng)該還記得之前使用腳本生成報表時,輸入完快照區(qū)間后顯示的一堆列表,沒錯,那正是DBA_HIST_SNAPSHOT記錄的內(nèi)容,該段功能對應(yīng)的代碼如下:

select to_char(s.startup_time,¨dd Mon "at" HH24:mi:ss¨) instart_fmt

, di.instance_name inst_name

, di.db_name db_name

, s.snap_id snap_id

, to_char(s.end_interval_time,¨dd Mon YYYY HH24:mi¨) snapdat

, s.snap_level lvl

from dba_hist_snapshot s

, dba_hist_database_instance di

where s.dbid = :dbid

and di.dbid = :dbid

and s.instance_number = :inst_num

and di.instance_number = :inst_num

and di.dbid = s.dbid

and di.instance_number = s.instance_number

and di.startup_time = s.startup_time

and s.end_interval_time >= decode( &num_days

, 0 , to_date(¨31-JAN-9999¨,¨DD-MON-YYYY¨)

, 3.14, s.end_interval_time

, to_date(:max_snap_time,¨dd/mm/yyyy¨) - (&num_days-1))

  • order by db_name, instance_name, snap_id;

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI