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

Oracle 19C 显示SQL调优集的内容

原创 Asher.HU 2021-02-04
1136


要在创建并填充STS之后读取其内容,请使用SELECT_SQLSET功能,可以选择使用过滤条件。DBMS_SQLTUNEDBMS_SQLSET

SELECT_SQLSET使用PL / SQL 流水线表函数选择输出,该函数接受行的集合作为输入。您可以将表函数作为语句FROM列表中表操作符的操作数来调用SELECT下表描述了一些SELECT_SQLSET功能参数。

表23-4 DBMS_SQLTUNE.SELECT_SQLSET参数

参数描述

basic_filter

用于从STS的属性上定义的STS过滤SQL的SQL谓词 SQLSET_ROW

object_filter

从共享的SQL区域中指定所选SQL的对象列表中存在的对象

下表描述了SQLSET_ROW对象的一些属性查询时,这些属性显示为列TABLE(DBMS_SQLTUNE.SELECT_SQLSET())

表23-5 SQLSET_ROW属性

参数描述

parsing_schema_name

解析SQL的架构

elapsed_time

该SQL语句经过的总秒数

buffer_gets

此SQL语句的缓冲区获取总数(数据库访问一个块的次数)

假设条件

本教程假定以下内容:

  • 您要显示名为的STS的内容SQLT_WKLD_STS
  • 您正在使用DBMS_SQLTUNE而不是DBMS_SQLSET

要显示STS的内容:

  1. 在SQL * Plus或SQL Developer中,以具有必要特权的用户身份登录数据库。
  2. 使用该TABLE功能查询STS内容

    例如,执行以下查询:

    COLUMN SQL_TEXT FORMAT a30   
    COLUMN SCH FORMAT a3
    COLUMN ELAPSED FORMAT 999999999
    
    SELECT SQL_ID, PARSING_SCHEMA_NAME AS "SCH", SQL_TEXT, 
           ELAPSED_TIME AS "ELAPSED", BUFFER_GETS
    FROM   TABLE( DBMS_SQLTUNE.SELECT_SQLSET( 'SQLT_WKLD_STS' ) );
    

    输出示例如下:

    SQL_ID        SCH SQL_TEXT                          ELAPSED BUFFER_GETS
    ------------- --- ------------------------------ ---------- -----------
    79f8shn041a1f SH  select * from sales where quan    8373148       24016
                      tity_sold < 5 union select * f
                      rom sales where quantity_sold
                      > 500
     
    2cqsw036j5u7r SH  select promo_name, count(*) c     3557373         309
                      from promotions p, sales s whe
                      re s.promo_id = p.promo_id and
                       p.promo_category = 'internet'
                       group by p.promo_name order b
                      y c desc
     
    fudq5z56g642p SH  select sum(quantity_sold) from    4787891       12118
                       sales s, products p where s.p
                      rod_id = p.prod_id and s.amoun
                      t_sold > 20000 and p.prod_name
                       = 'Linen Big Shirt'
     
    bzmnj0nbvmz8t SH  select * from sales where amou     442355       15281
                      nt_sold = 4
    
  3. (可选)根据用户特定条件过滤结果。

    下面的示例显示语句,其中磁盘读取缓冲区的比率大于或等于50%:

    COLUMN SQL_TEXT FORMAT a30   
    COLUMN SCH FORMAT a3
    COLUMN BUF_GETS FORMAT 99999999
    COLUMN DISK_READS FORMAT 99999999
    COLUMN %_DISK FORMAT 9999.99
    SELECT sql_id, parsing_schema_name as "SCH", sql_text, 
           buffer_gets as "B_GETS",
           disk_reads, ROUND(disk_reads/buffer_gets*100,2) "%_DISK"
    FROM TABLE( DBMS_SQLTUNE.SELECT_SQLSET( 
                'SQLT_WKLD_STS',
                '(disk_reads/buffer_gets) >= 0.50' ) );
    

    输出示例如下:

    SQL_ID        SCH SQL_TEXT                       B_GETS DISK_READS %_DISK
    ------------- --- ------------------------------ ------ ---------- -------
    79f8shn041a1f SH  select * from sales where quan  24016      17287  71.98
                      tity_sold < 5 union select * f
                      rom sales where quantity_sold
                      > 500
     
    fudq5z56g642p SH  select sum(quantity_sold) from  12118       6355  52.44
                       sales s, products p where s.p
                      rod_id = p.prod_id and s.amoun
                      t_sold > 20000 and p.prod_name
                       = 'Linen Big Shirt'

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

评论