这是一篇学习baseline的笔记,主要讲述:基本的概念、使用sql创建和管理(删除),单一AWR基线、基线模板、修改默认的Moving Window Baselin的大小。
在 Oracle Database 11g 中,AWR基线提供了定义动态和未来基线的强大功能,并在很大程度上简化了创建和管理性能数据(以便比较)的过程。
Oracle Database 11g 默认具备一个系统定义的Moving Window Baseline,该基线对应于 AWR 保留期中的所有 AWR 数据。仅可存在一个Moving Window Baseline。系统定义的Moving Window Baseline认大小为当前的AWR保留期,即默认为八天。
如果要增大Moving Window Baseline,首先需要相应增大AWR保留期。AWR保留期和系统定义的Moving Window Baseline的大小是两个独立的参数。但是AWR保留期必须大于或等于系统定义的Moving Window Baseline的大小。
Oracle Database 11g 提供了收集两种基线的功能:静态基线和Moving Window Baseline。 静态基线可以是单一的,也可以是重复的。单一 AWR 基线是在单一时段内收集的。重复基线是在重复的时段(例如,六月份的每个星期一)内收集的。
在 Oracle Database 11g 中,如果 STATISTICS_LEVEL=TYPICAL 或 ALL,则默认启用基线。
基线视图
- DBA_HIST_BASELINE:显示有关系统中所获取的基线的信息。对于每个基线,该视图显示完整的时间范围,以及该基线是否为默认基线。其它信息包括创建日期、上一次统计信息计算的时间和基线类型。
- DBA_HIST_BASELINE_DETAILS:显示可用来确定给定基线有效性的信息,如基线时段期间是否存在关闭操作及基线时段中由快照数据覆盖的百分比。
- DBA_HIST_BASELINE_TEMPLATE:保存了基线模板。该视图提供了 MMON 所需的信息,用以确定何时根据模板创建基线,以及何时应删除基线。
- DBA_HIST_BASELINE_METADATA:显示基线的元数据信息,包括名称、类型、创建时间、模板和失效时间。
如果要在过去的某个时段创建基线,则使用 CREATE_BASELINE 过程;如果时段有任何部分处于未来,则使用 CREATE_BASELINE_TEMPLATE 过程。
单一AWR基线
CREATE_BASELINE
语法:
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE( start_snap_id IN NUMBER, end_snap_id IN NUMBER, baseline_name IN VARCHAR2, dbid IN NUMBER DEFAULT NULL, expiration IN NUMBER DEFAULT NULL); DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE( start_snap_id IN NUMBER, end_snap_id IN NUMBER, baseline_name IN VARCHAR2, dbid IN NUMBER DEFAULT NULL, expiration IN NUMBER DEFAULT NULL) RETURN NUMBER; DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE( start_time IN DATE, end_time IN DATE, baseline_name IN VARCHAR2, dbid IN NUMBER DEFAULT NULL, expiration IN NUMBER DEFAULT NULL); DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE( start_time IN DATE, end_time IN DATE, baseline_name IN VARCHAR2, dbid IN NUMBER DEFAULT NULL, expiration IN NUMBER DEFAULT NULL); RETURN NUMBER;
示例:
创建一个名为TEST39,从2013-05-25 10:00:00开始到2013-05-29 11:00:00结束的,且永远不会过期的baseline
BEGIN DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE ( start_time => '2013-05-25 10:00:00', end_time => '2013-05-29 11:00:00', baseline_name => 'TEST39', expiration => NULL ); END;
查看已经创建了哪些baseline
SQL> set line 1000 SQL> col TEMPLATE_NAME for a20 SQL> col BASELINE_NAME for a20 SQL> select DBID,BASELINE_ID,BASELINE_NAME,BASELINE_TYPE,EXPIRATION,TEMPLATE_NAME from dba_hist_baseline;
—————————————————————————————-
删除基线
先确定已存在的基线名称,比如是TEST3
BEGIN DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'TEST3', cascade => FALSE, dbid => null); END; /
cascade参数选择FALSE,如果选择TRUE则会将删除基线相关的快照
—————————————————————————————-
重命名基线
查看已经存在的基线,然后重命名
BEGIN DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE ( old_baseline_name => 'TEST3', new_baseline_name => 'NTEST3', ); END; /
============================================================
基线模板
CREATE_BASELINE_TEMPLATE
语法:
Specifies a template for generating a baseline for a single time period in the future. DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE( start_time IN DATE, end_time IN DATE, baseline_name IN VARCHAR2, template_name IN VARCHAR2, expiration IN NUMBER, dbid IN NUMBER DEFAULT NULL); Specifies a template for creating and dropping baseline based on repeating time periods: DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE( day_of_week IN VARCHAR2, hour_in_day IN NUMBER, duration IN NUMBER, start_time IN DATE, end_time IN DATE, baseline_name_prefix IN VARCHAR2, template_name IN VARCHAR2, expiration IN NUMBER, dbid IN NUMBER DEFAULT NULL);
示例:
单一基线模板
先查询当前的时间:
SQL> select sysdate from dual; SYSDATE ------------------- 2013-05-29 15:47:13
BASELINE_TEMPLATE是需要有任何部分包含未发生的时间才能用的。
为此,我们来特别证明下:
SQL> BEGIN 2 DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE ( 3 start_time => '2013-05-25 10:00:00', 4 end_time => '2013-05-29 15:00:00', 5 baseline_name => 'FALL29', 6 template_name => 'FALL29', 7 expiration => NULL ); 8 END; 9 / BEGIN * 第 1 行出现错误: ORA-13537: 为创建基线模板而输入的内容无效 (end_time, end_time is less than SYSDATE) ORA-06512: 在 "SYS.DBMS_WORKLOAD_REPOSITORY", line 768 ORA-06512: 在 "SYS.DBMS_WORKLOAD_REPOSITORY", line 818 ORA-06512: 在 line 2
果然如此,验证之前说的过去的某时段必须要是使用CREATE_BASELINE,反之包含任何时段的未来则使用 CREATE_BASELINE_TEMPLATE 过程。
SQL> BEGIN 2 DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE ( 3 start_time => '2013-05-25 10:00:00', 4 end_time => '2013-05-29 16:00:00', 5 baseline_name => 'FALL29', 6 template_name => 'FALL29', 7 expiration => NULL ); 8 END; 9 / PL/SQL 过程已成功完成。
重复基线模板
创建名template_2013_mondays的基线模板:每周一(day_of_week)早上8点开始(hour_in_day)持续12个小时(duration)且将保留30天(expiration),开始于2013-05-25 10:00:00,结束于2013-05-30 17:00:00。
SQL> BEGIN 2 DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE ( 3 day_of_week => 'monday', hour_in_day => 8, 4 duration => 12, expiration => 30, 5 start_time => '2013-05-25 10:00:00', 6 end_time => '2013-05-30 17:00:00', 7 baseline_name_prefix => 'baseline_2013_mondays_', 8 template_name => 'template_2013_mondays', 9 dbid => NULL); 10 END; 11 / PL/SQL 过程已成功完成。
查询有哪些基线模板
SQL> col REPEAT_INTERVAL for a60 SQL> select DBID,TEMPLATE_ID,TEMPLATE_NAME,TEMPLATE_TYPE,DURATION,EXPIRATION,REPEAT_INTERVAL from dba_hist_baseline_template; DBID TEMPLATE_ID TEMPLATE_NAME TEMPLATE_ DURATION EXPIRATION REPEAT_INTERVAL ---------- ----------- -------------------- --------- ---------- ---------- ------------------------------------------------------------ 2197530720 2 FALL08 SINGLE 2197530720 3 FALL09 SINGLE 2197530720 4 FALL19 SINGLE 2197530720 5 FALL29 SINGLE 2197530720 6 template_2013_monday REPEATING 12 30 FREQ=WEEKLY;INTERVAL=1;BYDAY=MON;BYHOUR=8;BYMINUTE=0;BYSECON s D=0
————————————————————————————-
删除基线模板
查询已存在的基线模板,确定需要删除的基线名称,比如template_2013_monday
BEGIN DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE ( template_name => 'template_2013_mondays', dbid => null); END; /
修改默认的Moving Window Baselin的大小
关于怎么修改Moving Window Baseline请查看:修改AWR快照出现ORA-13541
参考:
Oracle Database 11g:Performance Tuning Volume I •Student Guide
Oracle® Database Performance Tuning Guide 11g Release 2 (11.2) – — 5 Automatic Performance Statistics