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

Oracle 19C 创建在工作负载监视期间检测到的列组

原创 Asher.HU 2021-02-04
454


您可以使用该DBMS_STATS.CREATE_EXTENDED_STATS 函数创建先前通过执行检测到的列组DBMS_STATS.SEED_COL_USAGE

假设条件

本教程假定您已经进行中的步骤 检测有用的列组特定工作负荷 

要创建列组:

  1. customers_test根据在监视窗口期间捕获的使用情况信息创建列组

    例如,运行以下查询:

    SELECT DBMS_STATS.CREATE_EXTENDED_STATS(user, 'customers_test') FROM DUAL;
    

    输出示例如下:

    ###########################################################################
    EXTENSIONS FOR SH.CUSTOMERS_TEST
    ................................
    1. (CUST_CITY, CUST_STATE_PROVINCE,
        COUNTRY_ID)                     :SYS_STUMZ$C3AIHLPBROI#SKA58H_N created
    2. (CUST_STATE_PROVINCE, COUNTRY_ID):SYS_STU#S#WF25Z#QAHIHE#MOFFMM_ created
    ###########################################################################
    

    数据库创建了两个列组customers_test:一个列组用于过滤谓词,一个列组用于GROUP BY操作。

  2. 收集表统计信息。

    运行GATHER_TABLE_STATS以收集以下统计信息customers_test

    EXEC DBMS_STATS.GATHER_TABLE_STATS(user,'customers_test');
    
  3. 以用户sh身份,运行工作负载中两个查询的解释计划。

    检查USER_TAB_COL_STATISTICS视图以确定数据库创建了哪些其他统计信息:

    SELECT COLUMN_NAME, NUM_DISTINCT, HISTOGRAM
    FROM   USER_TAB_COL_STATISTICS
    WHERE  TABLE_NAME = 'CUSTOMERS_TEST'
    ORDER BY 1;
    

    部分样本输出如下所示:

    CUST_CITY                               620 HEIGHT BALANCED
    ...
    SYS_STU#S#WF25Z#QAHIHE#MOFFMM_          145 NONE
    SYS_STUMZ$C3AIHLPBROI#SKA58H_N          620 HEIGHT BALANCED
    

    本示例显示了从DBMS_STATS.CREATE_EXTENDED_STATS函数返回的两个列组名称CUST_CITYCUST_STATE_PROVINCECOUNTRY_ID创建的列组具有高度平衡的直方图。

  4. 再次说明计划。

    以下示例显示了customers_test表中两个查询的解释计划

    EXPLAIN PLAN FOR
      SELECT *
      FROM   customers_test
      WHERE  cust_city = 'Los Angeles'
      AND    cust_state_province = 'CA'
      AND    country_id = 52790;
     
    SELECT PLAN_TABLE_OUTPUT 
    FROM   TABLE(DBMS_XPLAN.DISPLAY('plan_table', null,'basic rows'));
     
    EXPLAIN PLAN FOR
      SELECT   country_id, cust_state_province, count(cust_city)
      FROM     customers_test
      GROUP BY country_id, cust_state_province;
     
    SELECT PLAN_TABLE_OUTPUT 
    FROM   TABLE(DBMS_XPLAN.DISPLAY('plan_table', null,'basic rows'));
    

    新计划显示了更准确的基数估计:

    ----------------------------------------------------
    | Id  | Operation         | Name           | Rows  |
    ----------------------------------------------------
    |   0 | SELECT STATEMENT  |                |  1093 |
    |   1 |  TABLE ACCESS FULL| CUSTOMERS_TEST |  1093 |
    ----------------------------------------------------
     
    8 rows selected.
     
    Plan hash value: 3050654408
     
    -----------------------------------------------------
    | Id  | Operation          | Name           | Rows  |
    -----------------------------------------------------
    |   0 | SELECT STATEMENT   |                |   145 |
    |   1 |  HASH GROUP BY     |                |   145 |
    |   2 |   TABLE ACCESS FULL| CUSTOMERS_TEST | 55500 |
    -----------------------------------------------------
    9 rows selected.

也可以看看:

Oracle Database PL / SQL软件包和类型参考以了解该DBMS_STATS软件包

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

评论