VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

DBMS_STATS

功能描述

DBMS_STATS包用于查看和修改收集的所有数据库对象的统计信息,以便能估量统计数据(尤其是针对较大的分区表),从而制定出速度更快的SQL执行计划。该内置包包含以下子程序:

子程序 描述
GATHER_SCHEMA_STATS 收集模式中所有对象的统计信息。

注意事项

无。

常量

该内置包包含以下常量:

常量 描述
AUTO_DEGREE 用于DBMS_STATS.GATHER_SCHEMA_STATS中degree参数,该参数允许数据库根据对象的大小,CPU的数量和初始化参数选择并行度。由于Vastbase暂时不支持并行收集统计信息,该常量可随意设置,但不校验有效性且不生效。
AUTO_CASCADE 用于DBMS_STATS.GATHER_SCHEMA_STATS中cascade参数,该参数确定是否要收集索引统计信息。支持该参数传入,但不校验并忽略该参数。
AUTO_INVALIDATE 用于DBMS_STATS.GATHER_SCHEMA_STATS中no_invalidate参数,该参数控制正在收集统计信息的表的从属游标(即依赖该表的执行计划)的无效,支持该参数传入,但不校验并忽略该参数。

子程序

GATHER_SCHEMA_STATS函数

功能描述

该函数用于收集指定模式下的所有对象的统计信息。

注意事项

GATHER_SCHEMA_STATS只处理参数ownname(代表schema名称),其余参数支持传入,但不校验并忽略。

语法格式

  • 语法1:

    DBMS_STATS.GATHER_SCHEMA_STATS(
    ownname		VARCHAR2,
    estimate_percent NUMBER   DEFAULT 100,
    block_sample BOOLEAN DEFAULT FALSE,
    method_opt		VARCHAR2 default 'FOR ALL COLUMNS SIZE AUTO',
    degree 			NUMBER DEFAULT NULL,
    granularity 		VARCHAR2 DEFAULT 'GLOBAL'
    cascade			 BOOLEAN DEFAULT FALSE,
    stattab 			VARCHAR2 DEFAULT NULL,
    statid 			VARCHAR2 DEFAULT NULL,
    options 			VARCHAR2 DEFAULT 'GATHER',
    objlist 		OUT ObjectTab, 
    statown 		VARCHAR2 DEFAULT NULL,
    no_invalidate 	BOOLEAN DEFAULT FALSE,
    force 		BOOLEAN DEFAULT FALSE, 
    obj_filter list ( ObjectTab DEFAULT NULL);
    
  • 语法2:

    DBMS_STATS.GATHER_SCHEMA_STATS(
    ownname		VARCHAR2,
    estimate_percent NUMBER   DEFAULT 100,
    block_sample BOOLEAN DEFAULT FALSE,
    method_opt		VARCHAR2 default 'FOR ALL COLUMNS SIZE AUTO',
    degree 			NUMBER DEFAULT NULL,
    granularity 		VARCHAR2 DEFAULT 'GLOBAL'
    cascade			 BOOLEAN DEFAULT FALSE,
    stattab 			VARCHAR2 DEFAULT NULL,
    statid 			VARCHAR2 DEFAULT NULL,
    options 			VARCHAR2 DEFAULT 'GATHER',
    statown 		VARCHAR2 DEFAULT NULL,
    no_invalidate 	BOOLEAN DEFAULT FALSE,
    force 		BOOLEAN DEFAULT FALSE, 
    obj_filter list ( ObjectTab DEFAULT NULL);
    

参数说明

  • ownname:要分析的schema(NULL表示当前schema)。
  • estimate_percent: 确定要采样的行的百分比,有效范围在0.000001~100。
  • block_sample:表示是否使用随机块采样代替随机行采样,默认为false。注意:Vastbase 目前无需支持,可忽略该参数。
  • method_opt:默认值为:FOR ALL COLUMNS SIZE AUTO(仅支持该选项,其他选项不支持)。该选项可接受的语法为:

    FOR ALL [INDEXED|HIDDEN] COLUMNS [size clause]
    
    • INDEXED:指定该选项将只对那些包含索引的列进收集列统计信息。
    • HIDDEN:指定该选项将只对那些虚拟列收集列统计信息。这意味着在对表收集统计时真实列是不会生成列统计信息的。这个值不能用于通常的统计信息收集,它只能用在当基表列的统计信息精确收集后在表中创建新的虚拟列,然后对新的虚拟列收集列统计信息时才使用它。
    • 其中size clause := SIZE {integer| REPEAT| AUTO |SKEWONLY}

      • Integer:直方图数。必须在1~2048范围内。
      • REPEAT:仅在已经具有直方名的列上收集直方名。
      • AUTO:数据库根据数据分布和列的工作量确定要收集直方图的列。
      • SKEWONLY:数据库根据列的数据分布来确定要收集直方图的列。
  • degree:并行度,默认degree值为 NULL,也可以使用常量 AUTO DEGREE设置自动并行度(Vastbase 仅支持 NULL,其他选项不支持)。

  • granularity:要收集的统计信息的粒度(仅在表已分区时才适用)。取值可以是:'GLOBAL','GLOBAL AND PARTITION’,'PARTITION'

    • 'GLOBAL':收集全局统计数据。
    • 'GLOBAL AND PARTITION':收集全局和分区级别的统计数据。
    • 'PARTITION':收集分区级别的统计信息。
  • cascade:收集有关索引的统计信息。除了收集表和列统计信息之外,使用此选项等效于在模式中的每个索引上运行GATHER_INDEX_STATS 过程,使用该常量DBMS_STATS.AUTO_CASCADE 让数据库确定是否要收集索引统计信息。这是默认值(支持该参数传入,但不校验并忽略该参数)。

  • stattab:用户统计信息表标识符,用于描述将当前统计信息保存在何处。

  • statid:标识符。支持该参数传入,但不校验并忽略该参数。

  • options:指定需要收集统计信息的对象。有效值如下:Vastbase 仅支持默认值 GATHER(收集 schema 中所有对象的统计信息),其他选项不支持。

  • objlist:过旧或空的对象列表(支持该参数传入,但不校验并忽略该参数)。

  • statown: 包含的schema(支持该参数传入,但不校验并忽略该参数)。

  • no_invalidate:是否使相关游标无效,设置为false表示使得相关游标无效:设置为 true 则相反(支持该参数传入,但不校验并忽略该参数)。

  • force:收集有关对象的统计信息,被锁定的对象也会被统计(支持该参数传入,但不校验并忽略该参数)。

  • obj_filter list:设置对象过滤器列表(支持该参数传入,但不校验并忽略该参数)。

示例

1、创建模式。

create schema zmm;

2、创建分区表。

create table zmm.customer_address
(
    ca_address_sk       integer                  not null   ,
    ca_address_id       character(16) 
)
partition by range (ca_address_sk)
(
        partition p1 values less than(500),
        partition p2 values less than(1000),
        partition p3 values less than(1500),
        partition p4 values less than(2000),
        partition p5 values less than(2500),
        partition p6 values less than(3000),
        partition p7 values less than(4000),
        partition p8 values less than(maxvalue) 
)
enable row movement;

3、插入数据。

insert into zmm.customer_address(ca_address_sk) values(generate_series(1,5000));

4、调用dbms_stats.gather_schema_stats函数收集统计信息。

BEGIN 
dbms_stats.gather_schema_stats(ownname=>'zmm',estimate_percent=>100,block_sample=>false,method_opt=>'for all columns size auto',degree=>DBMS_STATS.AUTO_DEGREE,granularity=>'GLOBAL',cascade=>DBMS_STATS.AUTO_CASCADE,stattab=>'',statid=>'',options=>'GATHER AUTO',no_invalidate=>DBMS_STATS.AUTO_INVALIDATE,force=>false,statown=>''); 
END; 
/

返回结果如下,则表示函数调用成功:

NOTICE:  PL/SQL procedure successfully completed.
CONTEXT:  SQL statement "CALL dbms_stats.gather_schema_stats(ownname=>'zmm',estimate_percent=>100,block_sample=>false,method_opt=>'for all columns size auto',degree=>DBMS_STATS.AUTO_DEGREE,granularity=>'GLOBAL',cascade=>DBMS_STATS.AUTO_CASCADE,stattab=>'',statid=>'',options=>'GATHER AUTO',no_invalidate=>DBMS_STATS.AUTO_INVALIDATE,force=>false,statown=>'')"
PL/pgSQL function inline_code_block line 3 at PERFORM
ANONYMOUS BLOCK EXECUTE