Using Baseline

这是一篇学习baseline的笔记,主要讲述:基本的概念、使用sql创建和管理(删除),单一AWR基线、基线模板、修改默认的Moving Window Baselin的大小。

在 Oracle Database 11g 中,AWR基线提供了定义动态和未来基线的强大功能,并在很大程度上简化了创建和管理性能数据(以便比较)的过程。

Comparative Performance Analysis with AWR Baselines

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

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据