暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C 从AWR加载计划

原创 Asher.HU 2021-02-04
1806


本主题说明如何使用PL / SQL从AWR加载计划。

使用软件包LOAD_PLANS_FROM_AWR功能加载计划DBMS_SPM下表描述了一些功能参数。

表28-5 LOAD_PLANS_FROM_AWR参数

功能参数描述

begin_snap

范围内开始快照的数量。需要。

end_snap

范围内结束快照的数量。需要。

basic_filter

应用于AWR的过滤器,仅选择要加载的合格计划。默认为null表示已选择AWR中的所有计划。过滤器可以采用WHERE可针对列指定的任何子句谓词的形式DBA_HIST_SQLTEXT.SQL_TEXT一个例子是basic_filter => 'sql_text like ''SELECT /*LOAD_STS*/%'''

fixed

默认NO表示将加载的计划用作非固定计划。YES表示加载的计划是固定计划。 计划选择 说明了优化器会在计划基线中选择一个固定计划,而不是一个非固定计划。

本节说明如何使用命令行加载计划。在Cloud Control中,转到SQL Plan Baseline子页面(如图28-1所示),然后单击Load从AWR加载计划基线。

本教程假定以下内容:

  • 您要将以下查询的计划加载到SMB中:
    SELECT /*LOAD_AWR*/ *
    FROM   sh.sales
    WHERE  quantity_sold > 40
    ORDER BY prod_id;
    
  • 您希望加载的计划是不固定的。
  • 用户sh有权限查询DBA_HIST_SNAPSHOTDBA_SQL_PLAN_BASELINES,执行DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT和执行DBMS_SPM.LOAD_PLANS_FROM_AWR

要从共享SQL区域加载计划:

  1. 使用适当的权限登录数据库,然后查询最新的3个AWR快照。

    例如,查询DBA_HIST_SNAPSHOT如下:

    SELECT *
    FROM   (SELECT SNAP_ID, SNAP_LEVEL, 
                   TO_CHAR(BEGIN_INTERVAL_TIME, 'DD/MM/YY HH24:MI:SS') BEGIN
            FROM   DBA_HIST_SNAPSHOT
            ORDER BY SNAP_ID DESC)
    WHERE   ROWNUM <= 3;
    
       SNAP_ID SNAP_LEVEL BEGIN
    ---------- ---------- -----------------
           212	    1 10/12/15 06:00:02
           211	    1 10/12/15 05:00:11
           210	    1 10/12/15 04:00:59
    
  2. Query sh.sales,使用LOAD_AWR标记识别SQL语句。

    例如,使用以下查询:

    SELECT /*LOAD_AWR*/ *
    FROM   sh.sales
    WHERE  quantity_sold > 40
    ORDER BY prod_id;
    
  3. 拍摄一个新的AWR快照。

    例如,使用以下程序:

    EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
  4. 查询最近的3个AWR快照,以确认已拍摄新快照。

    例如,查询DBA_HIST_SNAPSHOT如下:

    SELECT *
    FROM   (SELECT SNAP_ID, SNAP_LEVEL, 
                   TO_CHAR(BEGIN_INTERVAL_TIME, 'DD/MM/YY HH24:MI:SS') BEGIN
            FROM   DBA_HIST_SNAPSHOT
            ORDER BY SNAP_ID DESC)
    WHERE   ROWNUM <= 3;
    
       SNAP_ID SNAP_LEVEL BEGIN
    ---------- ---------- -----------------
           213	    1 10/12/15 06:24:53
           212	    1 10/12/15 06:00:02
           211	    1 10/12/15 05:00:11
  5. 从AWR加载最近2个快照的计划。

    例如,执行LOAD_PLANS_FROM_AWRSQL * Plus中函数以将计划从快照加载212213

    VARIABLE v_plan_cnt NUMBER
    EXEC :v_plan_cnt := DBMS_SPM.LOAD_PLANS_FROM_AWR(begin_snap => 212, end_snap => 213);

    在前面的示例中,变量v_plan_cnt包含已加载计划的数量。

  6. 查询数据字典以确保将计划加载到LOAD_AWR语句的基线中

    以下语句查询DBA_SQL_PLAN_BASELINES(包括示例输出):

    COL SQL_HANDLE FORMAT a20
    COL SQL_TEXT FORMAT a20
    COL PLAN_NAME FORMAT a30
    COL ORIGIN FORMAT a20
    
    SELECT SQL_HANDLE, SQL_TEXT, PLAN_NAME,
           ORIGIN, ENABLED, ACCEPTED
    FROM   DBA_SQL_PLAN_BASELINES
    WHERE SQL_TEXT LIKE '%LOAD_AWR%';
    
    SQL_HANDLE           SQL_TEXT          PLAN_NAME                      ORIGIN               ENA ACC
    -------------------- ----------------- ------------------------------ -------------------- --- ---
    SQL_495d29c5f4612cda SELECT /*LOAD_AWR SQL_PLAN_4kr99sru62b6u54bc8843 MANUAL-LOAD-FROM-AWR YES YES
                         */ * FROM 
                         sh.sales WHERE  
                         quantity_sold 
                         > 40
                         ORDER BY prod_id

    输出显示该计划已被接受,这意味着该报表处于该报表的计划基线中。同样,原点是MANUAL-LOAD-FROM-AWR,这意味着该语句是从AWR手动加载的,而不是自动捕获的。

也可以看看:

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论