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

Oracle 19C 从共享SQL区域加载计划

原创 Asher.HU 2021-02-04
906


本主题说明如何使用PL / SQL从共享SQL区域(也称为游标缓存)中加载计划。

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

表28-6 LOAD_PLANS_FROM_CURSOR_CACHE参数

功能参数描述

sql_id

SQL语句标识符。标识共享SQL区域中的SQL语句。

fixed

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

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

本教程假定以下内容:

  • 您已执行以下查询:
    SELECT /*LOAD_CC*/ *
    FROM   sh.sales
    WHERE  quantity_sold > 40
    ORDER BY prod_id;
    
    复制
  • 您希望加载的计划是不固定的。

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

  1. 使用适当的特权将SQL * Plus连接到数据库,然后在共享SQL区域中确定相关语句的SQL ID。

    例如,查询查询V$SQL的SQL ID sh.sales(包括示例输出):

    SELECT   SQL_ID, CHILD_NUMBER AS "Child Num",
             PLAN_HASH_VALUE AS "Plan Hash",
             OPTIMIZER_ENV_HASH_VALUE AS "Opt Env Hash"
    FROM     V$SQL
    WHERE    SQL_TEXT LIKE 'SELECT /*LOAD_CC*/%';
     
    SQL_ID         Child Num  Plan Hash Opt Env Hash
    ------------- ---------- ---------- ------------
    27m0sdw9snw59          0 1421641795   3160571937
    
    复制

    前面的输出显示该语句的SQL ID为27m0sdw9snw59

  2. 将指定语句的计划加载到SQL计划基准中。

    例如,LOAD_PLANS_FROM_CURSOR_CACHE在SQL * Plus中执行函数以使用SQL ID加载语句计划27m0sdw9snw59

    VARIABLE v_plan_cnt NUMBER
    EXECUTE :v_plan_cnt := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id => '27m0sdw9snw59');
    
    复制

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

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

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

    SELECT SQL_HANDLE, SQL_TEXT, PLAN_NAME,
           ORIGIN, ENABLED, ACCEPTED
    FROM   DBA_SQL_PLAN_BASELINES;
     
    SQL_HANDLE            SQL_TEXT             PLAN_NAME             ORIGIN              ENA ACC
    --------------------- -------------------- --------------------- ------------------- --- ---
    SQL_a8632bd857a4a25e  SELECT /*LOAD_CC*/   SQL_PLAN_gdkvzfhrgkda MANUAL-LOAD-FROM-CC YES YES
                          *                    71694fc6b
                          FROM sh.sales
                          WHERE quantity_sold
                          > 40                           
                          ORDER BY prod_id
    复制

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

也可以看看:

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

评论