龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

Oracle 11g R1中AWR基线增强(1)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
【51CTO.COM独家翻译】 自动工作量仓库是从Oracle 10g开始引入的,不过只包括了一些简单的基线功能,创建一个基线允许保留指定范围内的快照用于性能对比,与AWR保留策略无关,可以使

【51CTO.COM独家翻译】自动工作量仓库是从Oracle 10g开始引入的,不过只包括了一些简单的基线功能,创建一个基线允许保留指定范围内的快照用于性能对比,与AWR保留策略无关,可以使用DBMS_WORKLOAD_REPOSITORY包来管理这个功能,在11g中,它被增强了。

注意,DBMS_WORKLOAD_REPOSITORY包中的大部分存储过程和函数接受DBID参数,该参数是本地数据库的默认标识符,由于这个原因,下面的例子中将会省略掉该参数。

固定基线

相对Oracle 10g而言,11g中的固定或静态基线功能更丰富,最初,在Oracle 10g中,DBMS_WORKLOAD_REPOSITORY包中只提供了一个CREATE_BASELINE存储过程允许你使用特定的快照ID来定义基线,在Oracle 11g中,包括了更多的用于创建基线存储过程和函数,它们使用开始时间和截至时间进行基线创建,这样有助于计算出有关的快照ID,函数与存储过程的参数一样,但返回的是基线的ID,默认基线永远保存,但新的有效期参数expiration允许指定在某一日期后那些基线将自动失效。

SET SERVEROUTPUT ON
DECLARE
  l_return  NUMBER;
BEGIN
  -- Using procedures.
  DBMS_WORKLOAD_REPOSITORY.create_baseline(
    start_snap_id => 2490,【快照开始ID】
    end_snap_id   => 2491,【快照截至ID】
    baseline_name => 'test1_bl',
    expiration    => 60);【60天后失效】

  DBMS_WORKLOAD_REPOSITORY.create_baseline(
    start_time    => TO_DATE('09-JUL-2008 17:00', 'DD-MON-YYYY HH24:MI'),【开始时间】
    end_time      => TO_DATE('09-JUL-2008 18:00', 'DD-MON-YYYY HH24:MI'),【截至时间】
    baseline_name => 'test2_bl',
    expiration    => NULL);【永远都不失效】

  -- Using functions.
  l_return := DBMS_WORKLOAD_REPOSITORY.create_baseline(
                start_snap_id => 2492,
                end_snap_id   => 2493,
                baseline_name => 'test3_bl',
                expiration    => 30); 
  DBMS_OUTPUT.put_line('Return: ' || l_return);

  l_return := DBMS_WORKLOAD_REPOSITORY.create_baseline(
                start_time    => TO_DATE('09-JUL-2008 19:00', 'DD-MON-YYYY HH24:MI'),
                end_time      => TO_DATE('09-JUL-2008 20:00', 'DD-MON-YYYY HH24:MI'),
                baseline_name => 'test4_bl',
                expiration    => NULL);

  DBMS_OUTPUT.put_line('Return: ' || l_return);
END;
/

Return: 8
Return: 9

PL/SQL procedure successfully completed.

SQL>

新的基线在DBA_HIST_BASELINE视图中可见。

COLUMN baseline_name FORMAT A15

SELECT baseline_id, baseline_name, START_SNAP_ID, 
       TO_CHAR(start_snap_time, 'DD-MON-YYYY HH24:MI') AS start_snap_time,       
       END_SNAP_ID,            
       TO_CHAR(end_snap_time, 'DD-MON-YYYY HH24:MI') AS end_snap_time
FROM   dba_hist_baseline
WHERE  baseline_type = 'STATIC'
ORDER BY baseline_id;

BASELINE_ID BASELINE_NAME   START_SNAP_ID START_SNAP_TIME   END_SNAP_ID END_SNAP_TIME
----------- --------------- ------------- ----------------- ----------- -----------------
          6 test1_bl                 2490 09-JUL-2008 17:00        2491 09-JUL-2008 18:00
          7 test2_bl                 2490 09-JUL-2008 17:00        2491 09-JUL-2008 18:00
          8 test3_bl                 2492 09-JUL-2008 19:00        2493 09-JUL-2008 20:00
          9 test4_bl                 2492 09-JUL-2008 19:00        2493 09-JUL-2008 20:00

4 rows selected.

SQL>

使用管道表函数SELECT_BASELINE_DETAILS,指定BASELINE_ID参数,可以返回某个特定基线的信息,也可以使用管道表函数SELECT_BASELINE_METRIC,指定BASELINE_NAM参数,返回同样的结果。

SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.select_baseline_details(6));
SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.select_baseline_metric('SYSTEM_MOVING_WINDOW'));

基线可以使用存储过程RENAME_BASELINE进行重命名。

BEGIN
  DBMS_WORKLOAD_REPOSITORY.rename_baseline(
    old_baseline_name => 'test4_bl',
    new_baseline_name => 'test5_bl');
END;
/

使用存储过程DROP_BASELINE可以删除基线。

BEGIN
  DBMS_WORKLOAD_REPOSITORY.drop_baseline(baseline_name => 'test1_bl');
  DBMS_WORKLOAD_REPOSITORY.drop_baseline(baseline_name => 'test2_bl');
  DBMS_WORKLOAD_REPOSITORY.drop_baseline(baseline_name => 'test3_bl');
  DBMS_WORKLOAD_REPOSITORY.drop_baseline(baseline_name => 'test5_bl');
END;
/

精彩图集

赞助商链接