更新时间:2024-06-03 GMT+08:00

DBE_STATS

高级包DBE_STATS实现了一些统计信息管理的能力。包括对统计信息的锁定、解锁、回退和清除历史统计信息等。

DBE_STATS高级包不支持临时表。

接口介绍

表1 DBE_STATS接口总览

接口名称

描述

DBE_STATS.LOCK_TABLE_STATS

锁定表级统计信息。

DBE_STATS.LOCK_PARTITION_STATS

锁定分区级统计信息。

DBE_STATS.LOCK_COLUMN_STATS

锁定列级统计信息。

DBE_STATS.LOCK_SCHEMA_STATS

锁定指定schema下所有表相关的统计信息。

DBE_STATS.UNLOCK_TABLE_STATS

解锁表级统计信息。

DBE_STATS.UNLOCK_PARTITION_STATS

解锁分区级统计信息。

DBE_STATS.UNLOCK_COLUMN_STATS

解锁列级统计信息。

DBE_STATS.UNLOCK_SCHEMA_STATS

解锁指定schema下所有表相关的统计信息。

DBE_STATS.RESTORE_TABLE_STATS

回退表级统计信息到指定时间点。

DBE_STATS.RESTORE_PARTITION_STATS

回退分区级统计信息到指定时间点。

DBE_STATS.RESTORE_COLUMN_STATS

回退列级统计信息到指定时间点。

DBE_STATS.RESTORE_SCHEMA_STATS

回退指定schema下所有表相关的统计信息到指定时间点。

DBE_STATS.PURGE_STATS

清除指定时间节点前的所有历史统计信息。

DBE_STATS.GET_STATS_HISTORY_RETENTION

获取历史统计信息的保留时间。

DBE_STATS.GET_STATS_HISTORY_AVAILABILITY

获取最早可用的历史统计信息的时间。

DBE_STATS.CREATE_STAT_TABLE

创建用于保存统计信息的统计表。

DBE_STATS.DROP_STAT_TABLE

删除用于保存统计信息的统计表。

DBE_STATS.EXPORT_INDEX_STATS

检索指定索引的统计信息并存储在用户统计信息表中。

DBE_STATS.EXPORT_TABLE_STATS

检索指定表的统计信息并存储在用户统计信息表中。

DBE_STATS.EXPORT_COLUMN_STATS

检索指定列的统计信息并存储在用户统计信息表中。

DBE_STATS.EXPORT_SCHEMA_STATS

检索指定schema的统计信息并存储在用户统计信息表中。

DBE_STATS.IMPORT_INDEX_STATS

从用户统计信息表中检索指定索引的统计信息,并将其写回系统表。

DBE_STATS.IMPORT_TABLE_STATS

从用户统计信息表中检索指定表的统计信息,并将其写回系统表。

DBE_STATS.IMPORT_COLUMN_STATS

从用户统计信息表中检索指定列的统计信息,并将其写回系统表。

DBE_STATS.IMPORT_SCHEMA_STATS

从用户统计信息表中检索指定schema的统计信息,并将其写回系统表。

DBE_STATS.SET_COLUMN_STATS

设置列相关的统计信息,包括单列、多列、表达式统计信息。

DBE_STATS.SET_INDEX_STATS

设置索引相关的统计信息。

DBE_STATS.SET_TABLE_STATS

设置表相关的统计信息。

DBE_STATS.DELETE_COLUMN_STATS

删除列相关的统计信息,包括单列、多列、表达式统计信息。

DBE_STATS.DELETE_INDEX_STATS

删除索引相关的统计信息。

DBE_STATS.DELETE_TABLE_STATS

删除表相关的统计信息。

DBE_STATS.DELETE_SCHEMA_STATS

删除schema下所有表、索引、列相关的统计信息。

  • DBE_STATS.LOCK_TABLE_STATS

    锁定一个表的统计信息,锁定后,该表的统计信息无法更新,该表下级涉及的索引、分区和列会同步被锁定。该接口无返回值。

    DBE_STATS.LOCK_TABLE_STATS的函数原型:

    DBE_STATS.LOCK_TABLE_STATS(
       ownname   VARCHAR2,
       tabname   VARCHAR2
    );
    表2 DBE_STATS.LOCK_TABLE_STATS的接口说明

    参数

    类型

    是否允许为空

    描述

    ownname

    varchar2

    要锁定的表所属的schema名称,该参数为空时,默认为当前schema。

    tabname

    varchar2

    要锁定的表的名称。

    • 使用该接口时,用户必须对指定的表拥有与ANALYZE命令相同的权限,可以参考ANALYZE | ANALYSE
    • 可查看该表的reloptions中stat_state状态获取该表的锁定状态。
    • 当一个表处于锁定状态时,其统计信息无法更新。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 建表
    gaussdb=# CREATE SCHEMA dbe_stats_lock;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA=dbe_stats_lock;
    SET
    gaussdb=# CREATE TABLE t1(a int,b int);
    CREATE TABLE
    
    -- 锁定表,查看其锁定状态
    gaussdb=# CALL DBE_STATS.LOCK_TABLE_STATS(ownname=>'dbe_stats_lock',tabname=>'t1');
     lock_table_stats 
    ------------------
    
    (1 row)
    gaussdb=# SELECT relname,instr(reloptions::text,'stat_state=locked',1,1) <> 0  as exist_lock FROM PG_CLASS WHERE relname='t1' and relnamespace = (SELECT oid FROM PG_NAMESPACE WHERE nspname='dbe_stats_lock');
     relname | exist_lock 
    ---------+------------
     t1      | t
    (1 row)
    
    -- 锁定后analyze, 发生报错
    gaussdb=# ANALYZE t1;
    ERROR:  The statistics is locked, cannot be updated.
    
    -- 删除表、删除命名空间
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_lock;
    DROP SCHEMA
  • DBE_STATS.LOCK_PARTITION_STATS

    锁定一个分区的统计信息,锁定后,该分区的统计信息无法更新,该分区涉及下级的索引、分区、列会同步锁定。该接口无返回值。

    DBE_STATS.LOCK_PARTITION_STATS的函数原型:

    DBE_STATS.LOCK_PARTITION_STATS(
        ownname     VARCHAR2,
        tabname     VARCHAR2,
        partname    VARCHAR2
    );
    表3 DBE_STATS.LOCK_PARTITION_STATS的接口说明

    参数

    类型

    是否允许为空

    描述

    ownname

    varchar2

    要锁定的分区所属的schema的名称,该参数为空时,默认为当前schema。

    tabname

    varchar2

    要锁定的分区所属的表的名称。

    partname

    varchar2

    要锁定的分区的名称。

    • 使用该接口时,用户必须对指定的表拥有与ANALYZE命令相同的权限,可以参考ANALYZE | ANALYSE
    • 可查看该分区的reloptions中stat_state状态获取该表的锁定状态。
    • 当该分区或该表所属的表处于锁定状态时,其统计信息无法更新。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 建表
    gaussdb=# CREATE SCHEMA dbe_stats_lock;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA=dbe_stats_lock;
    SET
    gaussdb=# CREATE TABLE upart_table(a int, b int, c int) PARTITION BY RANGE(a)
     (
        PARTITION p1 VALUES LESS THAN(1200),
        PARTITION p2 VALUES LESS THAN(2400),
        PARTITION p3 VALUES LESS THAN(MAXVALUE)
     );
    CREATE TABLE
    
    -- 锁定一个分区,其他分区及表不受影响
    gaussdb=# CALL DBE_STATS.LOCK_PARTITION_STATS(ownname=>'dbe_stats_lock',tabname=>'upart_table',partname=>'p1');
     lock_partition_stats 
    ----------------------
    
    (1 row)
    
    gaussdb=# SELECT relname,instr(reloptions::text,'stat_state=locked',1,1) <> 0 as exist_lock FROM PG_CLASS WHERE relname='upart_table';
       relname   | exist_lock 
    -------------+------------
     upart_table | f
    (1 row)
    
    gaussdb=# SELECT relname,instr(reloptions::text,'stat_state=locked',1,1) <> 0 as exist_lock FROM PG_PARTITION WHERE parentid='upart_table'::REGCLASS;
       relname   | exist_lock 
    -------------+------------
     upart_table | f
     p2          | f
     p3          | f
     p1          | t
    (4 rows)
    
    -- 删除表、命名空间
    gaussdb=# DROP TABLE upart_table;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_lock;
    DROP SCHEMA
  • DBE_STATS.LOCK_COLUMN_STATS

    锁定一个列的统计信息,锁定后,该列的统计信息无法更新。该接口无返回值。

    DBE_STATS.LOCK_COLUMN_STATS的函数原型:

    DBE_STATS.LOCK_COLUMN_STATS(
        ownname     VARCHAR2,
        tabname     VARCHAR2,
        colname     VARCHAR2,
        partname    VARCHAR2 DEFAULT NULL
    );
    表4 DBE_STATS.LOCK_COLUMN_STATS的接口说明

    参数

    类型

    是否允许为空

    描述

    ownname

    varchar2

    要锁定的列所属的schema的名称,该参数为空时,默认为当前schema。

    tabname

    varchar2

    要锁定的列所属的表的名称。

    colname

    varchar2

    要锁定的列的名称。

    partname

    varchar2

    要锁定的列所属的分区的名称,默认为空。

    • 使用该接口时,用户必须对指定的表拥有与ANALYZE命令相同的权限,可以参考ANALYZE | ANALYSE
    • 当partname为空时,默认锁定该列表级统计信息。
    • 若不存在该表的列级统计信息,则锁定可执行成功,但实际未生效。
    • 可查看PG_STATISTIC/PG_STATISTIC_EXT中的stastate获取锁定状态。
    • 锁定多列时,需先查询PG_STATISTIC_EXT中的staextname字段获取多列别名作为colname入参传入。
    • 当某一列被锁定或其所属的表或分区被锁定时,其统计信息无法更新,但该列被锁定的信息不会回显,需自行在日志里通过DEBUG2级别的DBE_STATS的logging_module查看。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 建表,收集统计信息
    gaussdb=# CREATE SCHEMA dbe_stats_lock;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA=dbe_stats_lock;
    SET
    gaussdb=# CREATE TABLE t1(a int,b int);
    CREATE TABLE
    gaussdb=# INSERT INTO t1 VALUES(generate_series(1,100),1);
    INSERT 0 100
    gaussdb=# ANALYZE t1;
    ANALYZE
    
    -- 锁定列后,查看列的锁定状态
    gaussdb=# CALL DBE_STATS.LOCK_COLUMN_STATS(ownname=>'dbe_stats_lock',tabname=>'t1',colname=>'a');
     lock_column_stats 
    -------------------
    
    (1 row)
    
    gaussdb=# SELECT staattnum,stastate FROM PG_STATISTIC WHERE starelid='t1'::REGCLASS;
     staattnum | stastate 
    -----------+----------
             2 | u
             1 | l
    (2 rows)
    
    -- 删除表、命名空间
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_lock;
    DROP SCHEMA
  • DBE_STATS.LOCK_SCHEMA_STATS

    锁定一个指定schema下所有表的统计信息。该接口无返回值。

    DBE_STATS.LOCK_SCHEMA_STATS的函数原型:

    DBE_STATS.LOCK_SCHEMA_STATS(
        ownname    VARCHAR2
    );
    表5 DBE_STATS.LOCK_SCHEMA_STATS的接口说明

    参数

    类型

    是否允许为空

    描述

    ownname

    varchar2

    指定的schema名,该参数为空时,默认为当前schema。

    • 调用该接口时,会锁定该schema下所有当前用户有ANALYZE权限的表,对于没有权限的表直接跳过。
    • 调用该接口需拥有指定schema的USAGE权限。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 锁定schema的统计信息同锁定表的统计信息用法一致,此处仅展示接口调用方式,具体示例可参考DBE_STATS.LOCK_TABLE_STA...示例
    gaussdb=# CALL DBE_STATS.LOCK_SCHEMA_STATS(ownname=>'dbe_stats_lock');
     lock_schema_stats 
    -------------------
    
    (1 row)
  • DBE_STATS.UNLOCK_TABLE_STATS

    解锁一个表的统计信息,解锁后,该表的统计信息可以更新。该表下级涉及的索引、分区、列会同步解锁。该接口无返回值。

    DBE_STATS.UNLOCK_TABLE_STATS的函数原型:

    DBE_STATS.UNLOCK_TABLE_STATS(
       ownname   VARCHAR2,
       tabname   VARCHAR2
    );
    表6 DBE_STATS.UNLOCK_TABLE_STATS的接口说明

    参数

    类型

    是否允许为空

    描述

    ownname

    varchar2

    要解锁的表所属的schema的名称,该参数为空时,默认为当前schema。

    tabname

    varchar2

    要解锁的表的名称。

    • 使用该接口时,用户必须对指定的表拥有与ANALYZE命令相同的权限,可以参考ANALYZE | ANALYSE
    • 可查看该表的reloptions中stat_state状态获取该表的锁定状态。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 解锁表的统计信息同锁定表的统计信息用法一致,此处仅展示接口调用方式,具体示例可参DBE_STATS.LOCK_TABLE_STA...示例
    gaussdb=# CALL DBE_STATS.UNLOCK_TABLE_STATS(ownname=>'dbe_stats_lock',tabname=>'t1');
     unlock_table_stats 
    --------------------
    
    (1 row)
  • DBE_STATS.UNLOCK_PARTITION_STATS

    解锁一个分区的统计信息,解锁后,该分区的统计信息可以更新。该分区下级涉及的索引、分区、列会同步解锁。该接口无返回值。

    DBE_STATS.UNLOCK_PARTITION_STATS的函数原型:

    DBE_STATS.UNLOCK_PARTITION_STATS(
        ownname     VARCHAR2,
        tabname     VARCHAR2,
        partname    VARCHAR2
    );
    表7 DBE_STATS.UNLOCK_PARTITION_STATS的接口说明

    参数

    类型

    是否允许为空

    描述

    ownname

    varchar2

    要解锁的分区所属的schema的名称,该参数为空时,默认为当前schema。

    tabname

    varchar2

    要解锁的分区所属的表的名称。

    partname

    varchar2

    要解锁的分区的名称。

    • 使用该接口时,用户必须对指定的表拥有与ANALYZE命令相同的权限,可以参考ANALYZE | ANALYSE
    • 可查看该分区的reloptions中stat_state状态获取该表的锁定状态。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 解锁分区的统计信息同锁定分区的统计信息用法一致,此处仅展示接口调用方式,具体示例可参DBE_STATS.LOCK_PARTIION_...示例
    gaussdb=# CALL DBE_STATS.UNLOCK_PARTITION_STATS(ownname=>'dbe_stats_lock',tabname=>'upart_table',partname=>'p1');
     unlock_partition_stats 
    ------------------------
    
    (1 row)
  • DBE_STATS.UNLOCK_COLUMN_STATS

    解锁一个列的统计信息,解锁后,该列的统计信息可以更新。该接口无返回值。

    DBE_STATS.UNLOCK_COLUMN_STATS的函数原型:

    DBE_STATS.LOCK_COLUMN_STATS(
        ownname     VARCHAR2,
        tabname     VARCHAR2,
        colname     VARCHAR2,
        partname    VARCHAR2 DEFAULT NULL
    );
    表8 DBE_STATS.UNLOCK_COLUMN_STATS的接口说明

    参数

    类型

    是否允许为空

    描述

    ownname

    varchar2

    要解锁的列所属的schema的名称,该参数为空时,默认为当前schema。

    tabname

    varchar2

    要解锁的列所属的表的名称。

    colname

    varchar2

    要解锁的列的名称。

    partname

    varchar2

    要解锁的列所属的分区的名称,默认为空。

    • 使用该接口时,用户必须对指定的表拥有与ANALYZE命令相同的权限,可以参考ANALYZE | ANALYSE
    • 当partname为空时,默认解锁该列表级统计信息,以及解锁其级联分区列级统计信息。
    • 可查看PG_STATISTIC/PG_STATISTIC_EXT中的stastate状态未获取锁定状态。
    • 解锁多列时,需先查询PG_STATISTIC_EXT中的staextname字段获取多列别名作为colname入参传入。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 解锁列的统计信息同锁定列的统计信息用法一致,此处仅展示接口调用方式,具体示例可参考DBE_STATS.LOCK_COLUMN_ST...示例
    gaussdb=# CALL DBE_STATS.UNLOCK_COLUMN_STATS(ownname=>'dbe_stats_lock',tabname=>'t1',colname=>'a');
     unlock_column_stats 
    ---------------------
    
    (1 row)
  • DBE_STATS.UNLOCK_SCHEMA_STATS

    锁定一个指定schema下所有表的统计信息。该接口无返回值。

    DBE_STATS.UNLOCK_SCHEMA_STATS的函数原型:

    DBE_STATS.UNLOCK_SCHEMA_STATS(
        ownname    VARCHAR2
    );
    表9 DBE_STATS.UNLOCK_SCHEMA_STATS的接口说明

    参数

    类型

    是否允许为空

    描述

    ownname

    varchar2

    指定的schema名,该参数为空时,默认为当前schema。

    • 调用该接口时,会解锁该schema下所有当前用户有ANALYZE权限的表,对于没有权限的表直接跳过。
    • 调用该接口需拥有指定schema的USAGE权限。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 解锁schema的统计信息同解锁表的统计信息用法一致,此处仅展示接口调用方式,具体示例可参考DBE_STATS.LOCK_TABLE_STA...示例
    gaussdb=# CALL DBE_STATS.UNLOCK_SCHEMA_STATS(ownname=>'dbe_stats_lock');
     unlock_schema_stats 
    ---------------------
    
    (1 row)
  • DBE_STATS.RESTORE_TABLE_STATS

    将表的统计信息回退到指定的时间节点,选择该时间节点前最后一次收集的统计信息载入系统表,同时级联其下级未被锁定的分区、索引、列级统计信息。该接口无返回值。

    DBE_STATS.RESTORE_TABLE_STATS的函数原型:

    DBE_STATS.RESTORE_TABLE_STATS(
        ownname                   VARCHAR2, 
        tabname                   VARCHAR2, 
        as_of_timestamp           TIMESTAMPTZ,
        restore_cluster_index     BOOLEAN DEFAULT NULL,
        force                     BOOLEAN DEFAULT FALSE,
        no_invalidate             BOOLEAN DEFAULT NULL
    );
    表10 DBE_STATS.RESTORE_TABLE_STATS的接口介绍

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    要回退的表所属的schema名,该参数为空时,默认为当前schema。

    tabname

    VARCHAR2

    要回退的表的表名。

    as_of_timestamp

    timestamp with time zone

    要回退的目标时间节点。

    restore_cluster_index

    BOOLEAN

    暂不支持。

    force

    BOOLEAN

    是否在统计信息被锁定时强行回退的标志位,默认为FALSE。

    no_invalidate

    BOOLEAN

    暂不支持。

    • 使用该接口时,用户必须对指定的表拥有与ANALYZE命令相同的权限,可以参考ANALYZE | ANALYSE
    • 调用该接口时,同时回退其下级分区、索引、列的统计信息,如果其下级的分区或列被锁定,则直接跳过。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 建表,收集两次统计信息
    gaussdb=# CREATE SCHEMA dbe_stats_restore;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA=dbe_stats_restore;
    SET
    gaussdb=# CREATE TABLE t1(a int, b int);
    CREATE TABLE
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    gaussdb=# INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    
    -- 查看历史表
    gaussdb=# SELECT relname,reltuples FROM GS_TABLESTATS_HISTORY WHERE relname='t1';
     relname | reltuples 
    ---------+-----------
     t1      |         3
     t1      |         6
    (2 rows)
    
    -- 查看当前系统表中的统计信息
    gaussdb=# SELECT relname,reltuples FROM PG_CLASS WHERE relname='t1' AND relnamespace = (SELECT oid FROM PG_NAMESPACE WHERE nspname='dbe_stats_restore');
     relname | reltuples 
    ---------+-----------
     t1      |         6
    (1 row)
    
    -- 回退到最早的统计信息,查看系统表
    gaussdb=# CALL DBE_STATS.RESTORE_TABLE_STATS(ownname=>'dbe_stats_restore',tabname=>'t1',as_of_timestamp=>((SELECT MIN(reltimestamp) FROM GS_TABLESTATS_HISTORY WHERE relname='t1') + INTERVAL '1 second'));
     restore_table_stats 
    ---------------------
    
    (1 row)
    
    gaussdb=# SELECT relname,reltuples FROM PG_CLASS WHERE relname='t1' AND relnamespace = (SELECT oid FROM PG_NAMESPACE WHERE nspname='dbe_stats_restore');
     relname | reltuples 
    ---------+-----------
     t1      |         3
    (1 row)
    
    -- 删除表、删除命名空间
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_restore;
    DROP SCHEMA
  • DBE_STATS.RESTORE_PARTITION_STATS

    将分区的统计信息回退到指定的时间节点,选择该时间节点前最后一次收集的统计信息载入系统表,同时级联其下级未被锁定的分区、索引、列级统计信息。该接口无返回值。

    DBE_STATS.RESTORE_PARTITION_STATS的函数原型:

    DBE_STATS.RESTORE_PARTITION_STATS(
        ownname                   VARCHAR2, 
        tabname                   VARCHAR2, 
        partname                  VARCHAR2, 
        as_of_timestamp           TIMESTAMPTZ,
        force                     BOOLEAN DEFAULT FALSE,
        no_invalidate             BOOLEAN DEFAULT NULL
    );
    表11 DBE_STATS.RESTORE_PARTITION_STATS的接口介绍

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    要回退的分区所属的schema名。

    tabname

    VARCHAR2

    要回退的分区所属的表名。

    partname

    VARCHAR2

    要回退的分区名。

    as_of_timestamp

    timestamp with time zone

    要回退的目标时间节点。

    force

    BOOLEAN

    是否在统计信息被锁定时强行回退的标志位。

    no_invalidate

    BOOLEAN

    暂不支持。

    • 使用该接口时,用户必须对指定的表拥有与ANALYZE命令相同的权限,可以参考ANALYZE | ANALYSE
    • 调用该接口时,同时回退其下级分区、索引、列的统计信息。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 回退分区的统计信息同回退表的统计信息用法一致,此处仅展示接口调用方式,具体示例请参见•DBE_STATS.RESTORE_TABLE...示例
    gaussdb=# CALL DBE_STATS.RESTORE_PARTITION_STATS(ownname=>'dbe_stats_restore',tabname=>'t1',partname=>'p1',as_of_timestamp=>((SELECT MIN(reltimestamp) FROM GS_TABLESTATS_HISTORY WHERE relname='t1') + INTERVAL '1 second'));
     restore_partition_stats 
    -------------------------
    
    (1 row)
  • DBE_STATS.RESTORE_COLUMN_STATS

    将列的统计信息回退到指定的时间节点,选择该时间节点前最后一次收集的统计信息载入系统表。该接口无返回值。

    DBE_STATS.RESTORE_COLUMN_STATS的函数原型:

    RESTORE_COLUMN_STATS(
        ownname                   VARCHAR2, 
        tabname                   VARCHAR2, 
        colname                   VARCHAR2,
        partname                  VARCHAR2 DEFAULT NULL,
        as_of_timestamp           TIMESTAMPTZ,
        force                     BOOLEAN DEFAULT FALSE,
        no_invalidate             BOOLEAN DEFAULT NULL
    );
    表12 DBE_STATS.RESTORE_COLUMN_STATS的接口介绍

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    要回退的列所属的schema名。

    tabname

    VARCHAR2

    要回退的列所属的表名。

    colname

    VARCHAR2

    要回退的列名。

    partname

    VARCHAR2

    要回退的列所属的分区名。

    as_of_timestamp

    timestamp with time zone

    要回退的目标时间节点。

    force

    BOOLEAN

    是否在统计信息被锁定时强行回退的标志位。

    no_invalidate

    BOOLEAN

    暂不支持。

    • 使用该接口时,用户必须对指定的表拥有与ANALYZE命令相同的权限,可以参考ANALYZE | ANALYSE
    • 当partname为空时,默认回退该列表及统计信息。
    • 回退多列时,需先查询PG_STATISTIC_EXT中的staextname字段获取多列别名作为colname入参传入。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 建表,收集两次统计信息
    gaussdb=# CREATE SCHEMA dbe_stats_restore;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA=dbe_stats_restore;
    SET
    gaussdb=# CREATE TABLE t1(a int, b int);
    CREATE TABLE
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    gaussdb=# INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    
    -- 查看历史表里的统计信息
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM GS_STATISTIC_HISTORY WHERE starelid='t1'::REGCLASS ORDER BY statimestamp;
     staattnum | stadistinct | stakind1 | stanumbers1 | stavalues1 
    -----------+-------------+----------+-------------+------------
             1 |    -.333333 |        1 | {1}         | {1}
             2 |    -.333333 |        1 | {1}         | {1}
             1 |    -.333333 |        1 | {.5,.5}     | {1,2}
             2 |    -.333333 |        1 | {.5,.5}     | {1,2}
    (4 rows)
    
    -- 查询当前系统表中的统计信息
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='t1'::REGCLASS;
     staattnum | stadistinct | stakind1 | stanumbers1 | stavalues1 
    -----------+-------------+----------+-------------+------------
             1 |    -.333333 |        1 | {.5,.5}     | {1,2}
             2 |    -.333333 |        1 | {.5,.5}     | {1,2}
    (2 rows)
    
    -- 回退到时间较早的时间节点,查询系统表中的统计信息
    gaussdb=# CALL DBE_STATS.RESTORE_COLUMN_STATS(ownname=>'dbe_stats_restore',tabname=>'t1',colname=>'a',as_of_timestamp=>((SELECT MIN(reltimestamp) FROM GS_TABLESTATS_HISTORY WHERE relname='t1') + INTERVAL '1 second'));
     restore_column_stats 
    ----------------------
    
    (1 row)
    
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='t1'::REGCLASS;
     staattnum | stadistinct | stakind1 | stanumbers1 | stavalues1 
    -----------+-------------+----------+-------------+------------
             1 |    -.333333 |        1 | {1}         | {1}
             2 |    -.333333 |        1 | {.5,.5}     | {1,2}
    (2 rows)
    
    -- 删除表、命名空间
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_restore;
    DROP SCHEMA
  • DBE_STATS.RESTORE_SCHEMA_STATS

    将指定schema下所有表的统计信息回退到指定时间节点。该接口无返回值。

    DBE_STATS.RESTORE_SCHEMA_STATS的函数原型:

    DBE_STATS.RESTORE_SCHEMA_STATS(
        ownname                   VARCHAR2, 
        as_of_timestamp           TIMESTAMPTZ,
        force                     BOOLEAN DEFAULT FALSE,
        no_invalidate             BOOLEAN DEFAULT NULL
    );
    表13 DBE_STATS.RESTORE_SCHEMA_STATS的接口介绍

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    指定的schema名。

    as_of_timestamp

    timestamp with time zone

    要回退的目标时间节点。

    force

    BOOLEAN

    是否在统计信息被锁定时强行回退的标志位。

    no_invalidate

    BOOLEAN

    暂不支持。

    • 调用该接口时,会回退该schema下所有当前用户有ANALYZE权限的表,对于没有权限的表直接跳过。
    • 调用该接口需拥有指定schema的USAGE权限。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 回退schema的统计信息同回退表的统计信息用法一致
    -- 建表,插数据,收集两次统计信息
    gaussdb=#CREATE SCHEMA dbe_stats_restore;
    CREATE SCHEMA
    gaussdb=#SET CURRENT_SCHEMA=dbe_stats_restore;
    SET
    gaussdb=#CREATE TABLE t1(a int, b int);
    CREATE TABLE
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=#INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=#INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=#ANALYZE t1;
    ANALYZE
    gaussdb=#INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=#INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=#INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=#ANALYZE t1;
    ANALYZE
    
    -- 查看系统表
    gaussdb=#SELECT relname,reltuples FROM GS_TABLESTATS_HISTORY WHERE relname='t1';
     relname | reltuples 
    ---------+-----------
     t1      |         3
     t1      |         6
    (2 rows
    
    gaussdb=#SELECT relname,reltuples FROM PG_CLASS WHERE relname='t1' AND relnamespace = (SELECT oid FROM PG_NAMESPACE WHERE nspname='dbe_stats_restore');
     relname | reltuples 
    ---------+-----------
     t1      |         6
    (1 row)
    
    -- 回退
    gaussdb=#CALL DBE_STATS.RESTORE_SCHEMA_STATS(ownname=>'dbe_stats_restore',as_of_timestamp=>((SELECT MIN(reltimestamp) FROM GS_TABLESTATS_HISTORY WHERE relname='t1') + INTERVAL '1 second'));
     restore_schema_stats 
    ----------------------
    
    (1 row)
    
    -- 再次查看系统表
    gaussdb=#SELECT relname,reltuples FROM PG_CLASS WHERE relname='t1' AND relnamespace = (SELECT oid FROM PG_NAMESPACE WHERE nspname='dbe_stats_restore');
     relname | reltuples 
    ---------+-----------
     t1      |         3
    (1 row)
    
    -- 删除表、命名空间
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_restore;
    DROP SCHEMA
  • DBE_STATS.PURGE_STATS

    清除指定时间节点之前的所有历史统计信息。该接口无返回值。

    DBE_STATS.PURGE_STATS的函数原型:

    DBE_STATS.PURGE_STATS(
        before_timestamp       TIMESTAMPTZ
    );
    表14 DBE_STATS.PURGE_STATS的接口介绍

    参数

    类型

    是否允许为空

    描述

    before_timestamp

    timestamp with time zone

    指定要清除的时间节点。

    只有初始用户可调用该接口。

    示例:

    -- 建表,收集两次统计信息
    gaussdb=# CREATE SCHEMA dbe_stats_purge;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA=dbe_stats_purge;
    SET
    gaussdb=# CREATE TABLE t1(a int, b int);
    CREATE TABLE
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(1,1);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    gaussdb=# INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES(2,2);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    
    -- 查看历史表
    gaussdb=# SELECT relname,reltuples FROM GS_TABLESTATS_HISTORY WHERE relname='t1';
     relname | reltuples 
    ---------+-----------
     t1      |         3
     t1      |         6
    (2 rows)
    
    -- 清除时间较早的历史统计信息,查看历史表
    gaussdb=# CALL DBE_STATS.PURGE_STATS(before_timestamp=>((SELECT MIN(reltimestamp) FROM GS_TABLESTATS_HISTORY WHERE relname='t1') + INTERVAL '1 second'));
     purge_stats 
    -------------
    
    (1 row)
    
    gaussdb=# SELECT relname,reltuples FROM GS_TABLESTATS_HISTORY WHERE relname='t1';
     relname | reltuples 
    ---------+-----------
     t1      |         6
    (1 row)
    
    -- 删除表、命名空间
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_purge;
    DROP SCHEMA
  • DBE_STATS.GET_STATS_HISTORY_RETENTION

    获得当前历史统计信息的保留时间,返回用DBE_STATS.ALTER_STATS_HISTORY_RETENTION接口设置的保留时间。该接口没有入参。

    DBE_STATS.GET_STATS_HISTORY_RETENTION的函数原型:

    DBE_STATS.GET_STATS_HISTORY_RETENTION()
    returns NUMBER;

    示例:

    gaussdb=# CALL DBE_STATS.GET_STATS_HISTORY_RETENTION();
     get_stats_history_retention 
    -----------------------------
                              31
    (1 row)
  • DBE_STATS.GET_STATS_HISTORY_AVAILABILITY

    获得当前历史统计信息的最早可用时间,返回当前数据库下所有历史统计信息的最早时间。该接口没有入参。

    DBE_STATS.GET_STATS_HISTORY_AVAILABILITY的函数原型:

    DBE_STATS.GET_STATS_HISTORY_AVAILABILITY()
    returns TIMESTAMPTZ;

    示例:

    gaussdb=# ANALYZE;
    ANALYZE
    gaussdb=# CALL DBE_STATS.GET_STATS_HISTORY_AVAILABILITY();
     get_stats_history_availability 
    --------------------------------
     2023-08-27 02:07:04.065217+08
    (1 row)

    以上所有接口函数原型都具备同等数据类型和字段的C_FUNCTION函数原型,命名为DBE_STATS.XXXX_C_FUNCTION。

    DBE_STATS高级包接口仅对普通表有效。

  • DBE_STATS.CREATE_STAT_TABLE

    创建用于保存用户统计信息的统计表。该接口无返回值。

    DBE_STATS.CREATE_STAT_TABLE函数原型为:

    DBE_STATS.CREATE_STAT_TABLE (
        ownname          VARCHAR2,
        stattab          VARCHAR2,
        tblspace         VARCHAR2 DEFAULT NULL,
        global_temporary BOOLEAN DEFAULT NULL
    );
    表15 DBE_STATS.CREATE_STAT_TABLE接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    指定创建的统计表所在的schema。如果设置为null,默认在当前所在的schema创建。

    stattab

    VARCHAR2

    统计表的名称。

    tblspace

    VARCHAR2

    指定创建的统计表所在的表空间。如果不指定,则使用默认表空间进行创建。

    global_temporary

    BOOLEAN

    暂不支持该参数。

    • 要调用此过程创建统计表,需要用户拥有在指定schema与指定tablespace下创建表和创建索引的权限。
    • 为了区分普通表和统计表,在创建统计表后,其reloptions中的字段statstable将不为空串。且考虑到统计表结构后续存在升级的可能,为了实现前向兼容,statstable将被赋予当前统计信息表的版本信息。
    • 该表创建时会自动生成一个索引gs_stattab_oid_statid_type_nameinfo_index用于索引扫描,其中oid为该统计信息表的oid。如若被删除,则导入导出export、import接口不可用。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    --在dbe_stats_create_drop_schema下创建一个stattab统计表,并手动插入一条数据,可从新建的用户统计信息表中查询到此条数据。
    gaussdb=# CREATE SCHEMA dbe_stats_create_drop_schema;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA = dbe_stats_create_drop_schema;
    SET
    gaussdb=# CALL DBE_STATS.CREATE_STAT_TABLE(ownname => 'dbe_stats_create_drop_schema', stattab => 'stat_tab');
     create_stat_table 
    -------------------
    (1 row)
    gaussdb=# INSERT INTO stat_tab(statid, type, relname) VALUES('123', 't', 't1');
    INSERT 0 1
    gaussdb=# SELECT statid, type, relname FROM stat_tab;
     statid | type | relname 
    --------+------+---------
     123    | t    | t1
    (1 row)
  • DBE_STATS.DROP_STAT_TABLE

    删除用户统计信息表。该接口无返回值。

    DBE_STATS.DROP_STAT_TABLE函数原型为:

    DBE_STATS.DROP_STAT_TABLE (
        ownname VARCHAR2, 
        stattab VARCHAR2
    );
    表16 DBE_STATS.DROP_STAT_TABLE接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    统计表所在的schema。如果设置为null,则默认使用当前schema。

    stattab

    VARCHAR2

    统计表的名称。

    • 要调用此过程删除统计表,需要用户拥有在指定schema下删除表和删除索引的权限。
    • 对于statstable属性为空的普通表,无法使用此过程删除。
    • 如果在用户统计信息表上创建了索引或者创建了其他依赖于该表的对象,那么在调用此过程时,会级联删除所有依赖于该表的对象。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 删除用户统计信息表。将上述所建的用户统计信息表删除,删除新建的schema。
    gaussdb=# CALL DBE_STATS.DROP_STAT_TABLE(ownname => 'dbe_stats_create_drop_schema', stattab => 'stat_tab');
     drop_stat_table 
    -----------------
    (1 row)
    gaussdb=# DROP SCHEMA dbe_stats_create_drop_schema CASCADE;
    DROP SCHEMA
  • DBE_STATS.EXPORT_INDEX_STATS

    在系统表中根据查找指定索引的统计信息,并将结果存储在用户统计信息表中。该接口无返回值。

    DBE_STATS.EXPORT_INDEX_STATS的函数原型为:

    DBE_STATS.EXPORT_INDEX_STATS (
    ownname  VARCHAR2,
    indname  VARCHAR2, 
    partname VARCHAR2 DEFAULT NULL,
    stattab  VARCHAR2, 
    statid   VARCHAR2 DEFAULT NULL,
    statown  VARCHAR2 DEFAULT NULL
    );
    表17 DBE_STATS.EXPORT_INDEX_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    指定索引所在schema的名称,如果设置为null,会默认使用当前的schema。

    indname

    VARCHAR2

    指定需要导出统计信息的索引名。

    partname

    VARCHAR2

    分区索引的名称。如果索引已分区但是partname为null,则导出全局和分区索引统计信息。

    stattab

    VARCHAR2

    指定存储统计信息用户表的表名。

    statid

    VARCHAR2

    指向stattab中统计信息的标识符(可选)。

    statown

    VARCHAR2

    暂不支持。

    • 要调用此过程导出索引统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE。。
    • 调用此过程将统计信息导出到用户统计信息表,需要对用户统计信息表具有SELECT、INSERT、DELETE和UPDATE的权限。
    • 导出索引的reltuples(numrows)、relpages(numlblks)和relallvisible(relallvisible)三类统计信息。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 建表,收集统计信息。
    gaussdb=# CREATE SCHEMA dbe_stats_export;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA = dbe_stats_export;
    SET
    gaussdb=# CREATE TABLE t2(a int, b int, c int) PARTITION BY RANGE(a) SUBPARTITION BY RANGE(b)
     (
        PARTITION p1 VALUES LESS THAN(200)
        (SUBPARTITION s1 VALUES LESS THAN (500),
         SUBPARTITION s2 VALUES LESS THAN (MAXVALUE)
        ),
        PARTITION p2 VALUES LESS THAN(500)
        (SUBPARTITION s3 VALUES LESS THAN (500),
         SUBPARTITION s4 VALUES LESS THAN (MAXVALUE)
        ),
        PARTITION p3 VALUES LESS THAN(MAXVALUE)
        ( SUBPARTITION s5 VALUES LESS THAN (500),
          SUBPARTITION s6 VALUES LESS THAN (MAXVALUE)
        )
     );
    CREATE TABLE
    gaussdb=# CREATE INDEX idx_t2_local_a ON t2(a) LOCAL
     (
         PARTITION p1_idx_a
         (
             SUBPARTITION s1_idx_a,
             SUBPARTITION s2_idx_a
         ),
         PARTITION p2_idx_a
         (
             SUBPARTITION s3_idx_a,
             SUBPARTITION s4_idx_a
         ),
         PARTITION p3_idx_a
         (
             SUBPARTITION s5_idx_a,
             SUBPARTITION s6_idx_a
         ));
    CREATE INDEX
    gaussdb=# INSERT INTO t2 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (100, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (300, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (300, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 400, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 600, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t2;
    ANALYZE
    gaussdb=# ANALYZE t2((a,b));
    ANALYZE
    -- 建立用户统计信息表,作为统计信息导出的目标表。
    gaussdb=# CALL DBE_STATS.CREATE_STAT_TABLE('dbe_stats_export', 'export_table');
     create_stat_table 
    -------------------
    (1 row)
    
    -- 导出索引统计信息,连同分区索引的统计信息一并导出。
    -- 查看当前的统计信息。
    gaussdb=# SELECT relpages,reltuples FROM PG_CLASS WHERE relname='idx_t2_local_a';
     relpages | reltuples 
    ----------+-----------
            6 |         6
    (1 row)
    gaussdb=# SELECT relname,relpages,reltuples FROM PG_PARTITION WHERE parentid='idx_t2_local_a'::REGCLASS;
     relname  | relpages | reltuples 
    ----------+----------+-----------
     s1_idx_a |        1 |         0
     s2_idx_a |        1 |         0
     s3_idx_a |        1 |         0
     s4_idx_a |        1 |         0
     s5_idx_a |        1 |         0
     s6_idx_a |        1 |         0
    (6 rows)
    -- 导出统计信息,查看用户统计信息表中的数据。
    gaussdb=# CALL DBE_STATS.EXPORT_INDEX_STATS(ownname => 'dbe_stats_export', indname => 'idx_t2_local_a', partname=> null, stattab => 'export_table', statid => 'idx_s1');
     export_index_stats 
    --------------------
    (1 row)
    gaussdb=# SELECT relname,partname,numrows,numblocks FROM export_table;
        relname     | partname | numrows | numblocks 
    ----------------+----------+---------+-----------
     idx_t2_local_a |          |       6 |         6
     idx_t2_local_a | s6_idx_a |       0 |         1
     idx_t2_local_a | s5_idx_a |       0 |         1
     idx_t2_local_a | s4_idx_a |       0 |         1
     idx_t2_local_a | s3_idx_a |       0 |         1
     idx_t2_local_a | s2_idx_a |       0 |         1
     idx_t2_local_a | s1_idx_a |       0 |         1
    (7 rows)
    -- 删除表、命名空间。
    gaussdb=# DROP INDEX idx_t2_local_a;
    DROP INDEX
    gaussdb=# DROP TABLE t2;
    DROP TABLE
    gaussdb=# DROP TABLE export_table;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_export;
    DROP SCHEMA
  • DBE_STATS.EXPORT_TABLE_STATS

    检索指定表的统计信息,并存储在用户统计信息表中。该接口无返回值。

    DBE_STATS.EXPORT_TABLE_STATS的函数原型:

    DBE_STATS.EXPORT_TABLE_STATS (
       ownname           VARCHAR2, 
       tabname           VARCHAR2, 
       partname          VARCHAR2 DEFAULT NULL,
       stattab           VARCHAR2, 
       statid            VARCHAR2 DEFAULT NULL,
       cascade           BOOLEAN  DEFAULT TRUE,
       statown           VARCHAR2 DEFAULT NULL,
       stat_category     VARCHAR2 DEFAULT NULL
    );
    表18 DBE_STATS.EXPORT_TABLE_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    指定schema的名称,如果设置为null,会默认使用当前的schema。

    tabname

    VARCHAR2

    指定需要导出统计信息的表名。

    partname

    VARCHAR2

    表分区的名称。如果表已分区但是partname为null,则导出全局和分区表统计信息。

    stattab

    VARCHAR2

    指定存储统计信息用户表的表名。

    statid

    VARCHAR2

    指向stattab中统计信息的标识符(可选)。

    cascade

    BOOLEAN

    是否一并导出列、索引、多列和索引表达式的统计信息。默认为TRUE。

    statown

    VARCHAR2

    暂不支持。

    stat_category

    VARCHAR2

    暂不支持。

    • 要调用此过程导出表统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 调用此过程将统计信息导出到用户统计信息表,需要对用户统计信息表具有SELECT、INSERT、DELETE和UPDATE的权限。
    • 导出表的reltuples(numrows)、relpages(numblks)和relallvisible(relallvisible)三类统计信息。级联导出列级、索引级的统计信息参考EXPORT_INDEX_STATSEXPORT_COLUMN_STATS接口的统计信息。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 导出表的统计信息同导出索引统计信息用法一致,此处仅展示接口调用方式,具体示例可参考DBE_STATS.EXPORT_INDEX_STATS示例。
    gaussdb=# CALL DBE_STATS.EXPORT_TABLE_STATS(ownname => 'dbe_stats_export', tabname => 't2', partname =>null, stattab => 'export_table', statid => 't1_t', cascade => true);
     export_table_stats 
    --------------------
    (1 row)
  • DBE_STATS.EXPORT_COLUMN_STATS

    检索指定列(多列/表达式)的统计信息并存储在用户统计信息表中。该接口无返回值。

    DBE_STATS.EXPORT_COLUMN_STATS的函数原型为:

    DBE_STATS.EXPORT_COLUMN_STATS (
       ownname  VARCHAR2, 
       tabname  VARCHAR2, 
       colname  VARCHAR2, 
       partname VARCHAR2 DEFAULT NULL,
       stattab  VARCHAR2, 
       statid   VARCHAR2 DEFAULT NULL,
       statown  VARCHAR2 DEFAULT NULL
    );
    表19 DBE_STATS.EXPORT_COLUMN_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    指定schema的名称,如果设置为null,会默认使用当前的schema。

    tabname

    VARCHAR2

    指定需要导出统计信息的列所属的表名(表达式对应索引名)。

    colname

    VARCHAR2

    列名或者多列名(tabname为索引时,colname为表达式名)。

    partname

    VARCHAR2

    分区的名称。如果表/索引已分区但是partname为null,则导出全局和分区列/多列/索引表达式统计信息。

    stattab

    VARCHAR2

    指定存储统计信息用户表的表名。

    statid

    VARCHAR2

    指向stattab中统计信息的标识符(可选)。

    statown

    VARCHAR2

    暂不支持。

    • 要调用此过程导出表统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 调用此过程将统计信息导出到用户统计信息表,需要对用户统计信息表具有SELECT、INSERT、DELETE和UPDATE的权限。
    • 导出列级的统计信息可查询PG_STATISTIC或者PG_STATISTIC_EXT
    • 导出多列统计信息时,需先查询PG_STATISTIC_EXT中的staextname字段获取多列别名作为colname入参传入。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    --建表,收集统计信息。
    gaussdb=# CREATE SCHEMA dbe_stats_export;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA=dbe_stats_export;
    SET
    gaussdb=# CREATE TABLE IF NOT EXISTS t1 (a int, b int, c int);
    CREATE TABLE
    gaussdb=# CREATE INDEX idx_t1_expr on t1((a*a), (a+a), (a*b)); 
    CREATE INDEX
    gaussdb=# INSERT INTO t1 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (150, 550, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (250, 150, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    gaussdb=# ANALYZE t1((a,b));
    ANALYZE
    --建立用户统计信息表。
    gaussdb=# CALL DBE_STATS.CREATE_STAT_TABLE('dbe_stats_export', 'export_table');
     create_stat_table 
    -------------------
    (1 row)
    
    --查看列级统计信息。
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='t1'::REGCLASS;
     staattnum | stadistinct | stakind1 | stanumbers1 |  stavalues1   
    -----------+-------------+----------+-------------+---------------
             1 |          -1 |        2 |             | {100,150,250}
             2 |          -1 |        2 |             | {150,300,550}
             3 |    -.333333 |        1 | {1}         | {1}
    (3 rows)
    --导出列级统计信息,查看用户统计信息表。
    gaussdb=# CALL DBE_STATS.EXPORT_COLUMN_STATS(ownname => 'dbe_stats_export', tabname => 't1', colname=> 'a', partname => null, stattab => 'export_table', statid => 't1_c');
     export_column_stats 
    ---------------------
    (1 row)
    gaussdb=# SELECT relname,columnname,stadistinct,stakind1,stanumbers1,stavalues1 FROM export_table;
     relname | columnname | stadistinct | stakind1 | stanumbers1 |  stavalues1   
    ---------+------------+-------------+----------+-------------+---------------
     t1      | a          |          -1 |        2 |             | {100,150,250}
    (1 row)
    
    --查看表达式统计信息。
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='idx_t1_expr'::REGCLASS;
     staattnum | stadistinct | stakind1 | stanumbers1 |     stavalues1      
    -----------+-------------+----------+-------------+---------------------
             1 |          -1 |        2 |             | {10000,22500,62500}
             2 |          -1 |        2 |             | {200,300,500}
             3 |          -1 |        2 |             | {30000,37500,82500}
    (3 rows)
    --导出表达式统计信息,查看用户统计信息表。
    gaussdb=# CALL DBE_STATS.EXPORT_COLUMN_STATS(ownname => 'dbe_stats_export', tabname => 'idx_t1_expr', colname => 'expr', stattab => 'export_table', statid => 't1_expr');
     export_column_stats 
    ---------------------
    (1 row)
    gaussdb=# SELECT relname,columnname,stadistinct,stakind1,stanumbers1,stavalues1 FROM export_table where statid='t1_expr';
       relname   | columnname | stadistinct | stakind1 | stanumbers1 |     stavalues1    
    
    -------------+------------+-------------+----------+-------------+---------------------
     idx_t1_expr | expr       |          -1 |        2 |             | {10000,22500,62500}
    (1 row)
    
    --导出多列统计信息。
    --查看多列统计信息。
    gaussdb=# SELECT stakey,staextname,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC_EXT WHERE starelid='t1'::REGCLASS;
     stakey |     staextname      | stadistinct | stakind1 | stanumbers1 | stavalues1 
    --------+---------------------+-------------+----------+-------------+------------
     1 2    | extname_-1308656218 |          -1 |        8 |             | 
    (1 row)
    --导出,查看用户统计信息表。
    gaussdb=# CALL DBE_STATS.EXPORT_COLUMN_STATS(ownname => 'dbe_stats_export', tabname => 't1', colname=> 'extname_-1308656218', partname => null, stattab => 'export_table', statid => 't1_c');
     export_column_stats 
    ---------------------
    (1 row)
    gaussdb=# SELECT relname,columnname,stadistinct,stakind1,stanumbers1,stavalues1 FROM export_table;
     relname |     columnname      | stadistinct | stakind1 | stanumbers1 |  stavalues1   
    ---------+---------------------+-------------+----------+-------------+---------------
     t1      | a                   |          -1 |        2 |             | {100,150,250}
     t1      | extname_-1308656218 |          -1 |        8 |             | 
    (2 rows)
    --删除表、命名空间。
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP TABLE export_table;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_export;
    DROP SCHEMA
  • DBE_STATS.EXPORT_SCHEMA_STATS

    用于检索指定schema的统计信息,并存储在用户统计信息表中。该接口无返回值。

    DBE_STATS.EXPORT_SCHEMA_STATS的函数原型为:

    DBE_STATS.EXPORT_TABLE_STATS (
       ownname         VARCHAR2, 
       stattab         VARCHAR2, 
       statid          VARCHAR2 DEFAULT NULL,
       statown         VARCHAR2 DEFAULT NULL,
       stat_category   VARCHAR2 DEFAULT NULL);
    表20 DBE_STATS.EXPORT_SCHEMA_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    指定schema的名称,如果设置为null,会默认使用当前的schema。

    stattab

    VARCHAR2

    指定存储统计信息用户表的表名。

    statid

    VARCHAR2

    指向stattab中统计信息的标识符(可选)。

    statown

    VARCHAR2

    暂不支持。

    stat_category

    VARCHAR2

    暂不支持。

    • 要调用此过程导出表统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 调用此过程将统计信息导出到用户统计信息表,需要对用户统计信息表具有SELECT、INSERT、DELETE和UPDATE的权限。
    • 导出当前用户在指定schema下所有具有权限的表的统计信息,对于无权限的表直接跳过,不报错。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 导出schema的统计信息同导出表统计信息用法一致,此处仅展示接口调用方式,具体示例可参考DBE_STATS.EXPORT_TABLE_STATS示例。
    gaussdb=# CALL DBE_STATS.EXPORT_SCHEMA_STATS(ownname => 'dbe_stats_export', stattab => 'export_table', statid => 's1');
     export_schema_stats 
    ---------------------
    (1 row)
  • DBE_STATS.IMPORT_INDEX_STATS

    从stattab标识的用户统计信息表中检索指定索引的统计信息,并将其写回系统表中。该接口无返回值。

    DBE_STATS.IMPORT_INDEX_STATS的函数原型:

    DBE_STATS.IMPORT_INDEX_STATS (
       ownname       VARCHAR2, 
       indname       VARCHAR2,
       partname      VARCHAR2 DEFAULT NULL,
       stattab       VARCHAR2, 
       statid        VARCHAR2 DEFAULT NULL,
       statown       VARCHAR2 DEFAULT NULL,
       no_invalidate BOOLEAN DEFAULT NULL,
       force         BOOLEAN DEFAULT FALSE
    );
    表21 DBE_STATS.IMPORT_INDEX_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    指定schema的名称,如果设置为null,会默认使用当前的schema。

    indname

    VARCHAR2

    指定需要导入统计信息的索引名。

    partname

    VARCHAR2

    索引分区的名称。如果索引已分区但是partname为null,则导入全局和分区索引统计信息。

    stattab

    VARCHAR2

    指定存储统计信息用户表的表名。

    statid

    VARCHAR2

    指向stattab中统计信息的标识符(可选)。

    statown

    VARCHAR2

    暂不支持。

    no_invalidate

    BOOLEAN

    暂不支持。

    force

    BOOLEAN

    是否强制导入,忽略锁的状态,默认FALSE。

    • 要调用此过程导入统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 调用此过程将统计信息从用户统计信息表导回系统表,需要对用户统计信息表具有SELECT、INSERT、DELETE和UPDATE的权限。
    • 导入索引的reltuples(numrows)、relpages(numlblks)和relallvisible(relallvisible)三类统计信息。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 建表,收集统计信息。
    gaussdb=# CREATE SCHEMA dbe_stats_import;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA = dbe_stats_import;
    SET
    gaussdb=# CREATE TABLE t2(a int, b int, c int) PARTITION BY RANGE(a) SUBPARTITION BY RANGE(b)
     (
        PARTITION p1 VALUES LESS THAN(200)
        (SUBPARTITION s1 VALUES LESS THAN (500),
         SUBPARTITION s2 VALUES LESS THAN (MAXVALUE)
        ),
        PARTITION p2 VALUES LESS THAN(500)
        (SUBPARTITION s3 VALUES LESS THAN (500),
         SUBPARTITION s4 VALUES LESS THAN (MAXVALUE)
        ),
        PARTITION p3 VALUES LESS THAN(MAXVALUE)
        ( SUBPARTITION s5 VALUES LESS THAN (500),
          SUBPARTITION s6 VALUES LESS THAN (MAXVALUE)
        )
     );
    CREATE TABLE
    gaussdb=# CREATE INDEX idx_t2_local_a ON t2(a) LOCAL
     (
         PARTITION p1_idx_a
         (
             SUBPARTITION s1_idx_a,
             SUBPARTITION s2_idx_a
         ),
         PARTITION p2_idx_a
         (
             SUBPARTITION s3_idx_a,
             SUBPARTITION s4_idx_a
         ),
         PARTITION p3_idx_a
         (
             SUBPARTITION s5_idx_a,
             SUBPARTITION s6_idx_a
         ));
    CREATE INDEX
    gaussdb=# INSERT INTO t2 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (100, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (300, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (300, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 400, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 600, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t2;
    ANALYZE
    -- 创建用户统计信息表,先将数据导出。
    gaussdb=# CALL DBE_STATS.CREATE_STAT_TABLE('dbe_stats_import', 'export_table');
     create_stat_table 
    -------------------
    (1 row)
    gaussdb=# CALL DBE_STATS.IMPORT_INDEX_STATS(ownname => 'dbe_stats_import', indname => 'idx_t2_local_a', partname=> null, stattab => 'export_table', statid => 'idx_s1');
     export_index_stats 
    --------------------
    (1 row)
    gaussdb=# SELECT relname,partname,numrows,numblocks FROM export_table;
        relname     | partname | numrows | numblocks 
    ----------------+----------+---------+-----------
     idx_t2_local_a |          |       6 |         6
     idx_t2_local_a | s6_idx_a |       0 |         1
     idx_t2_local_a | s5_idx_a |       0 |         1
     idx_t2_local_a | s4_idx_a |       0 |         1
     idx_t2_local_a | s3_idx_a |       0 |         1
     idx_t2_local_a | s2_idx_a |       0 |         1
     idx_t2_local_a | s1_idx_a |       0 |         1
    (7 rows)
    -- 再次插入数据,收集统计信息,查看统计信息。
    gaussdb=# INSERT INTO t2 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (100, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (100, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (300, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 400, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 600, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t2;
    ANALYZE
    gaussdb=# SELECT relpages,reltuples FROM PG_CLASS WHERE relname='idx_t2_local_a';
     relpages | reltuples 
    ----------+-----------
            6 |        12
    (1 row)
    gaussdb=# SELECT relname,relpages,reltuples FROM PG_PARTITION WHERE parentid='idx_t2_local_a'::REGCLASS;
     relname  | relpages | reltuples 
    ----------+----------+-----------
     s1_idx_a |        1 |         0
     s2_idx_a |        1 |         0
     s3_idx_a |        1 |         0
     s4_idx_a |        1 |         0
     s5_idx_a |        1 |         0
     s6_idx_a |        1 |         0
    (6 rows)
    -- 将用户统计表中的统计信息导入统计信息系统表。
    gaussdb=# CALL DBE_STATS.IMPORT_INDEX_STATS(ownname => 'dbe_stats_import', indname => 'idx_t2_local_a', stattab => 'export_table', statid => 'idx_s1');
     import_index_stats 
    --------------------
    (1 row)
    gaussdb=# SELECT relpages,reltuples FROM PG_CLASS WHERE relname='idx_t2_local_a';
     relpages | reltuples 
    ----------+-----------
            6 |         6
    (1 row)
    gaussdb=# SELECT relname,relpages,reltuples FROM PG_PARTITION WHERE parentid='idx_t2_local_a'::REGCLASS;
     relname  | relpages | reltuples 
    ----------+----------+-----------
     s1_idx_a |        1 |         0
     s2_idx_a |        1 |         0
     s3_idx_a |        1 |         0
     s4_idx_a |        1 |         0
     s5_idx_a |        1 |         0
     s6_idx_a |        1 |         0
    (6 rows)
    -- 删除表、命名空间。
    gaussdb=# DROP TABLE t2;
    DROP TABLE
    gaussdb=# DROP TABLE export_table;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_import;
    DROP SCHEMA
  • DBE_STATS.IMPORT_TABLE_STATS

    从stattab标识的用户统计信息表中检索指定表的统计信息,并将其写回系统表中。该接口无返回值。

    DBE_STATS.IMPORT_TABLE_STATS的函数原型:

    DBE_STATS.IMPORT_TABLE_STATS (
       ownname       VARCHAR2, 
       tabname       VARCHAR2,
       partname      VARCHAR2 DEFAULT NULL,
       stattab       VARCHAR2, 
       statid        VARCHAR2 DEFAULT NULL,
       cascade       BOOLEAN  DEFAULT TRUE,
       statown       VARCHAR2 DEFAULT NULL,
       no_invalidate BOOLEAN  DEFAULT NULL,
       force         BOOLEAN  DEFAULT FALSE,
       stat_category VARCHAR2 DEFAULT NULL
    );
    表22 DBE_STATS.IMPORT_TABLE_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    varchar2

    指定schema的名称,如果设置为null,会默认使用当前的schema。

    tabname

    varchar2

    指定需要导入统计信息的表名。

    partname

    varchar2

    表分区的名称。如果表已分区但是partname为null,则导入全局和分区表统计信息。

    stattab

    varchar2

    指定存储统计信息用户表的表名。

    statid

    varchar2

    指向stattab中统计信息的标识符(可选)。

    cascade

    boolean

    是否一并导入列、索引、多列和索引表达式的统计信息。默认为true。

    statown

    varchar2

    暂不支持。

    no_invalidate

    boolean

    暂不支持。

    force

    boolean

    是否强制导入,忽略锁的状态,默认FALSE。

    stat_category

    varchar2

    暂不支持。

    • 要调用此过程导入统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 调用此过程将统计信息从用户统计信息表导回系统表,需要对用户统计信息表具有SELECT、INSERT、DELETE和UPDATE的权限。
    • 导入表的reltuples(numrows)、relpages(numblks)和relallvisible(relallvisible)三类统计信息。级联导入列级、索引级的统计信息参考IMPORT_INDEX_STATSIMPORT_COLUMN_STATS接口的统计信息。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 导入表的统计信息同导入索引统计信息用法一致,此处仅展示接口调用方式,具体示例可参考DBE_STATS.IMPORT_INDEX_STATS示例。
    gaussdb=# CALL DBE_STATS.IMPORT_TABLE_STATS(ownname => 'dbe_stats_import', tabname => 't2', partname => 'p1', stattab => 'export_table', statid => 't1_t', cascade => true, force => false);
     import_table_stats 
    --------------------
    (1 row)
  • DBE_STATS.IMPORT_COLUMN_STATS

    从stattab标识的用户统计信息表中检索指定列(多列/表达式)的统计信息,并将其写回系统表中。该接口无返回值。

    DBE_STATS.IMPORT_COLUMN_STATS的函数原型:

    DBE_STATS.IMPORT_COLUMN_STATS (
       ownname       VARCHAR2, 
       tabname       VARCHAR2, 
       colname       VARCHAR2,
       partname      VARCHAR2 DEFAULT NULL,
       stattab       VARCHAR2, 
       statid        VARCHAR2 DEFAULT NULL,
       statown       VARCHAR2 DEFAULT NULL,
       no_invalidate BOOLEAN DEFAULT NULL,
       force         BOOLEAN DEFAULT FALSE
    );
    表23 DBE_STATS.IMPORT_COLUMN_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    指定schema的名称,如果设置为null,会默认使用当前的schema。

    tabname

    VARCHAR2

    指定需要导入统计信息的列所属的表名(表达式对应索引名)。

    colname

    VARCHAR2

    列名或者多列名(tabname为索引时,colname为表达式名)。

    partname

    VARCHAR2

    分区的名称。如果表/索引已分区但是partname为null,则导入全局和分区列/多列/索引表达式统计信息。

    stattab

    VARCHAR2

    指定存储统计信息用户表的表名。

    statid

    VARCHAR2

    指向stattab中统计信息的标识符(可选)。

    statown

    VARCHAR2

    暂不支持。

    no_invalidate

    BOOLEAN

    暂不支持。

    force

    BOOLEAN

    是否强制导入,忽略锁的状态,默认FALSE。

    • 要调用此过程导入统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 调用此过程将统计信息从用户统计信息表导回系统表,需要对用户统计信息表具有SELECT、INSERT、DELETE和UPDATE的权限。
    • 导入列级的统计信息可查询PG_STATISTIC或者PG_STATISTIC_EXT
    • 导入多列时,需先查询PG_STATISTIC_EXT中的staextname字段获取多列别名作为colname入参传入。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 建表,收集统计信息。
    gaussdb=# CREATE SCHEMA dbe_stats_import;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA = dbe_stats_import;
    SET
    gaussdb=# CREATE TABLE IF NOT EXISTS t1 (a int, b int, c int);
    CREATE TABLE
    gaussdb=# CREATE INDEX idx_t1_expr on t1((a*a), (a+a), (a*b));
    CREATE INDEX
    gaussdb=# INSERT INTO t1 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (150, 550, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (250, 150, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    gaussdb=# ANALYZE t1((a,b));
    ANALYZE
    -- 建立用户统计信息表,先将单列、多列统计信息导出。
    gaussdb=# CALL DBE_STATS.CREATE_STAT_TABLE('dbe_stats_import', 'export_table');
     create_stat_table 
    -------------------
    (1 row)
    gaussdb=# SELECT stakey,staextname,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC_EXT WHERE starelid='t1'::REGCLASS;
     stakey |     staextname      | stadistinct | stakind1 | stanumbers1 | stavalues1 
    --------+---------------------+-------------+----------+-------------+------------
     1 2    | extname_-1308656218 |          -1 |        8 |             | 
    (1 row)
    gaussdb=# CALL DBE_STATS.EXPORT_COLUMN_STATS(ownname => 'dbe_stats_import', tabname => 't1', colname=> 'a', partname => null, stattab => 'export_table', statid => 't1_c');
     export_column_stats 
    ---------------------
    (1 row)
    gaussdb=# CALL DBE_STATS.EXPORT_COLUMN_STATS(ownname => 'dbe_stats_import', tabname => 'idx_t1_expr', colname => 'expr', stattab => 'export_table', statid => 't1_expr');
     export_column_stats 
    ---------------------
    (1 row)
    gaussdb=# CALL DBE_STATS.EXPORT_COLUMN_STATS(ownname => 'dbe_stats_import', tabname => 't1', colname=> 'extname_-1308656218', partname => null, stattab => 'export_table', statid => 't1_c');
     export_column_stats 
    ---------------------
    (1 row)
    gaussdb=# SELECT relname,columnname,stadistinct,stakind1,stanumbers1,stavalues1 FROM export_table;
       relname   |     columnname      | stadistinct | stakind1 | stanumbers1 |     stavalues1      
    -------------+---------------------+-------------+----------+-------------+---------------------
     idx_t1_expr | expr                |          -1 |        2 |             | {10000,22500,62500}
     t1          | a                   |          -1 |        2 |             | {100,150,250}
     t1          | extname_-1308656218 |          -1 |        8 |             | 
    (3 rows)
    -- 再次插入数据,收集统计信息,查看系统表。
    gaussdb=# INSERT INTO t1 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (150, 550, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (250, 150, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    gaussdb=# ANALYZE t1((a,b));
    ANALYZE
    --查看import前列统计信息。
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='t1'::REGCLASS;
     staattnum | stadistinct | stakind1 |        stanumbers1        |  stavalues1   
    -----------+-------------+----------+---------------------------+---------------
             1 |         -.5 |        1 | {.333333,.333333,.333333} | {100,150,250}
             2 |         -.5 |        1 | {.333333,.333333,.333333} | {150,300,550}
             3 |    -.166667 |        1 | {1}                       | {1}
    (3 rows)
    --查看import前表达式统计信息。
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='idx_t1_expr'::REGCLASS;
     staattnum | stadistinct | stakind1 |        stanumbers1        |     stavalues1     
    -----------+-------------+----------+---------------------------+---------------------
             1 |         -.5 |        1 | {.333333,.333333,.333333} | {10000,22500,62500}
             2 |         -.5 |        1 | {.333333,.333333,.333333} | {200,300,500}
             3 |         -.5 |        1 | {.333333,.333333,.333333} | {30000,37500,82500}
    (3 rows)
    --查看import前的多列统计信息。
    gaussdb=# SELECT stakey,staextname,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC_EXT WHERE starelid='t1'::REGCLASS;
     stakey |     staextname      | stadistinct | stakind1 | stanumbers1 | stavalues1 
    --------+---------------------+-------------+----------+-------------+------------
     1 2    | extname_-1308656218 |         -.5 |        8 |             | 
    (1 row)
    
    -- 导入单列、多列统计信息,查看系统表。
    gaussdb=# CALL DBE_STATS.IMPORT_COLUMN_STATS(ownname => 'dbe_stats_import', tabname => 't1', colname=> 'a', partname => null, stattab => 'export_table', statid => 't1_c', force => false);
     import_column_stats 
    ---------------------
    (1 row)
    gaussdb=# CALL DBE_STATS.IMPORT_COLUMN_STATS(ownname => 'dbe_stats_import', tabname => 'idx_t1_expr', colname=> 'expr', partname => null, stattab => 'export_table', statid => 't1_expr', force => false);
     import_column_stats 
    ---------------------
    (1 row)
    gaussdb=# CALL DBE_STATS.IMPORT_COLUMN_STATS(ownname => 'dbe_stats_import', tabname => 't1', colname=> 'extname_-1308656218', partname => null, stattab => 'export_table', statid => 't1_c', force => false);
     import_column_stats 
    ---------------------
    (1 row)
    
    --查看import后的列级统计信息。
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='t1'::REGCLASS;
     staattnum | stadistinct | stakind1 |        stanumbers1        |  stavalues1   
    -----------+-------------+----------+---------------------------+---------------
             1 |          -1 |        2 |                           | {100,150,250}
             2 |         -.5 |        1 | {.333333,.333333,.333333} | {150,300,550}
             3 |    -.166667 |        1 | {1}                       | {1}
    (3 rows)
    --查看import后的表达式级统计信息。
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='idx_t1_expr'::REGCLASS;
     staattnum | stadistinct | stakind1 | stanumbers1 |     stavalues1      
    -----------+-------------+----------+-------------+---------------------
             1 |          -1 |        2 |             | {10000,22500,62500}
             2 |          -1 |        2 |             | {200,300,500}
             3 |          -1 |        2 |             | {30000,37500,82500}
    (3 rows)
    --查看import后的多列统计信息。
    gaussdb=# SELECT stakey,staextname,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC_EXT WHERE starelid='t1'::REGCLASS;
     stakey |     staextname      | stadistinct | stakind1 | stanumbers1 | stavalues1 
    --------+---------------------+-------------+----------+-------------+------------
     1 2    | extname_-1308656218 |          -1 |        8 |             | 
    (1 row)
    -- 删除表、删除命名空间。
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP TABLE export_table;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_import;
    DROP SCHEMA
  • DBE_STATS.IMPORT_SCHEMA_STATS

    从stattab标识的用户统计信息表中检索指定schema的统计信息,并将其写回系统表中。该接口无返回值。

    DBE_STATS.IMPORT_SCHEMA_STATS的函数原型:

    DBE_STATS.IMPORT_SCHEMA_STATS (
       ownname       VARCHAR2,
       stattab       VARCHAR2, 
       statid        VARCHAR2 DEFAULT NULL,
       statown       VARCHAR2 DEFAULT NULL,
       no_invalidate BOOLEAN  DEFAULT NULL,
       force         BOOLEAN DEFAULT FALSE,
       stat_category VARCHAR2 DEFAULT NULL);
    表24 DBE_STATS.IMPORT_SCHEMA_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    指定schema的名称,如果设置为null,会默认使用当前的schema。

    stattab

    VARCHAR2

    指定存储统计信息用户表的表名。

    statid

    VARCHAR2

    指向stattab中统计信息的标识符(可选)。

    statown

    VARCHAR2

    暂不支持。

    no_invalidate

    BOOLEAN

    暂不支持。

    force

    BOOLEAN

    是否强制导入,忽略锁的状态,默认FALSE。

    stat_category

    VARCHAR2

    暂不支持。

    • 要调用此过程导入统计信息,需要对指定的表具有同ANALYZE命令一样的权限,可以参考ANALYZE | ANALYSE
    • 调用此过程将统计信息从用户统计信息表导回系统表,需要对用户统计信息表具有SELECT、INSERT、DELETE和UPDATE的权限。
    • 导入当前用户在指定schema下所有具有权限的表的统计信息,对于无权限的表直接跳过,不报错。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 导入schema的统计信息同导入表的统计信息用法一致,此处仅展示接口调用方式,具体示例可参考DBE_STATS.IMPORT_TABLE_STATS示例。
    gaussdb=# CALL DBE_STATS.IMPORT_SCHEMA_STATS(ownname => 'dbe_stats_import', stattab => 'export_table', statid => 's1',force => false);
     import_schema_stats 
    ---------------------
    (1 row)
  • DBE_STATS.SET_COLUMN_STATS

    设置列相关的统计信息,包括设置单列、多列和表达式统计信息。该接口无返回值。

    DBE_STATS.SET_COLUMN_STATS函数原型为:

    DBE_STATS.SET_COLUMN_STATS (
        ownname         VARCHAR2, 
        tabname         VARCHAR2, 
        colname         VARCHAR2, 
        partname        VARCHAR2   DEFAULT NULL,
        stattab         VARCHAR2   DEFAULT NULL,
        statid          VARCHAR2   DEFAULT NULL,
        distcnt         NUMBER     DEFAULT NULL,
        density         NUMBER     DEFAULT NULL,
        nullcnt         NUMBER     DEFAULT NULL,
        srec            VARCHAR2   DEFAULT NULL,
        avgclen         NUMBER     DEFAULT NULL,
        flags           NUMBER     DEFAULT NULL,
        statown         VARCHAR2   DEFAULT NULL,
        no_invalidate   BOOLEAN    DEFAULT NULL,
        force           BOOLEAN    DEFAULT FALSE
    );
    表25 DBE_STATS.SET_COLUMN_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    该表所在的schema。如果设置为null,则默认使用当前schema。

    tabname

    VARCHAR2

    表名。

    colname

    VARCHAR2

    列名。

    partname

    VARCHAR2

    要设置统计信息的表分区的名称。如果表已分区且partname为null,则设置全局级别的列级统计信息。

    stattab

    VARCHAR2

    暂不支持此参数。

    statid

    VARCHAR2

    暂不支持此参数。

    distcnt

    NUMBER

    设置该列中NDV数量。

    density

    NUMBER

    暂不支持。

    nullcnt

    NUMBER

    设置该列中null值数量。

    srec

    VARCHAR2

    暂不支持此参数。

    avgclen

    NUMBER

    设置该列中字段的平均长度(以字节为单位)。

    flags

    NUMBER

    暂不支持此参数。

    statown

    VARCHAR2

    暂不支持此参数。

    no_invalidate

    BOOLEAN

    暂不支持此参数。

    force

    NUMBER

    决定统计信息被锁定时的行为。如果为true,则即使列级统计信息被锁定,该过程也会设置值。默认为FALSE。

    • 要调用此过程设置表的列级统计信息,需要对该列涉及的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 该接口支持设置表达式统计信息,由于表达式的创建依赖于索引,因此当调用该接口设置表达式统计信息时,tabname应该传入该索引的名称。
    • 当前仅支持设置列的NDV(distcnt)、nullfrac(nullcnt)和width(avgclen)三类统计信息。
    • 当单列、表达式统计信息被删除后,仍然支持调用该接口设置对应的单列、表达式统计信息,此时PG_STATISTIC系统表中将插入新的数据。但对于多列统计信息,当其被删除后,不支持使用该接口进行重新设置。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 前置条件,建表,收集统计信息。
    gaussdb=# CREATE SCHEMA dbe_stats_set_schema;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA = dbe_stats_set_schema;
    SET
    gaussdb=# DROP TABLE IF EXISTS t1;
    NOTICE:  table "t1" does not exist, skipping
    DROP TABLE
    gaussdb=# CREATE TABLE IF NOT EXISTS t1 (a int, b int, c int);
    CREATE TABLE
    gaussdb=# CREATE INDEX idx_t1_expr ON t1((a*a), (a+a), (a*b));
    CREATE INDEX
    gaussdb=# INSERT INTO t1 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (150, 550, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (250, 150, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (250, 150, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    gaussdb=# ANALYZE t1((a, b));
    ANALYZE
    -- 设置单列统计信息。
    -- 查询原有统计信息。
    gaussdb=# SELECT staattnum,stanullfrac,stawidth,stadistinct FROM PG_STATISTIC WHERE starelid='t1'::REGCLASS;
     staattnum | stanullfrac | stawidth | stadistinct 
    -----------+-------------+----------+-------------
             1 |           0 |        4 |        -.75
             2 |           0 |        4 |        -.75
             3 |           0 |        4 |        -.25
    (3 rows)
    -- 设置列级统计信息后重新查询。
    gaussdb=# CALL DBE_STATS.SET_COLUMN_STATS(ownname => 'dbe_stats_set_schema', tabname => 't1', colname => 'a', distcnt => 6, nullcnt => 5, avgclen => 42);
     set_column_stats 
    ------------------
    (1 row)
    gaussdb=# SELECT staattnum,stanullfrac,stawidth,stadistinct FROM PG_STATISTIC WHERE starelid='t1'::REGCLASS;
     staattnum | stanullfrac | stawidth | stadistinct 
    -----------+-------------+----------+-------------
             1 |           1 |       42 |           6
             2 |           0 |        4 |        -.75
             3 |           0 |        4 |        -.25
    (3 rows)
    -- 设置多列统计信息。
    -- 查询原有统计信息。
    gaussdb=# SELECT stakey,staextname,stanullfrac,stawidth,stadistinct FROM PG_STATISTIC_EXT WHERE starelid='t1'::REGCLASS;
     stakey |     staextname      | stanullfrac | stawidth | stadistinct 
    --------+---------------------+-------------+----------+-------------
     1 2    | extname_-1308656218 |           0 |        8 |        -.75
    (1 row)
    -- 设置统计信息后重新查询
    gaussdb=# CALL DBE_STATS.SET_COLUMN_STATS(ownname => 'dbe_stats_set_schema', tabname => 't1', colname => 'extname_-1308656218', distcnt => 5, nullcnt => 5, avgclen => 2);
     set_column_stats 
    ------------------
    (1 row)
    gaussdb=# SELECT stakey,staextname,stanullfrac,stawidth,stadistinct FROM PG_STATISTIC_EXT WHERE starelid='t1'::REGCLASS;
     stakey |     staextname      | stanullfrac | stawidth | stadistinct 
    --------+---------------------+-------------+----------+-------------
     1 2    | extname_-1308656218 |           1 |        2 |           5
    (1 row)
    -- 设置表达式统计信息。
    -- 查询原有统计信息。
    gaussdb=# SELECT staattnum,stanullfrac,stawidth,stadistinct FROM PG_STATISTIC WHERE starelid='idx_t1_expr'::REGCLASS;
     staattnum | stanullfrac | stawidth | stadistinct 
    -----------+-------------+----------+-------------
             1 |           0 |        4 |        -.75
             2 |           0 |        4 |        -.75
             3 |           0 |        4 |        -.75
    (3 rows)
    -- 查询表达式列名
    gaussdb=# SELECT attnum, attname FROM PG_ATTRIBUTE WHERE attrelid='idx_t1_expr'::REGCLASS;
     attnum | attname
    --------+---------
          1 | expr
          2 | expr1
          3 | expr2
    (3 rows)
    -- 设置统计信息后重新查询。
    gaussdb=# CALL DBE_STATS.SET_COLUMN_STATS(ownname => 'dbe_stats_set_schema', tabname => 'idx_t1_expr', colname => 'expr', distcnt => 13, nullcnt => 5, avgclen => 22);
     set_column_stats 
    ------------------
    (1 row)
    gaussdb=# SELECT staattnum,stanullfrac,stawidth,stadistinct FROM PG_STATISTIC WHERE starelid='idx_t1_expr'::REGCLASS;
     staattnum | stanullfrac | stawidth | stadistinct 
    -----------+-------------+----------+-------------
             1 |           1 |       22 |          13
             2 |           0 |        4 |        -.75
             3 |           0 |        4 |        -.75
    (3 rows)
    -- 删除表、命名空间。
    gaussdb=# DROP INDEX idx_t1_expr;
    DROP INDEX
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_set_schema cascade;
    DROP SCHEMA
  • DBE_STATS.SET_INDEX_STATS

    设置索引相关的统计信息。该接口无返回值。

    DBE_STATS.SET_INDEX_STATS的函数原型为:

    DBE_STATS.SET_INDEX_STATS (
        ownname       VARCHAR2,
        indname       VARCHAR2,
        partname      VARCHAR2  DEFAULT NULL,
        stattab       VARCHAR2  DEFAULT NULL,
        statid        VARCHAR2  DEFAULT NULL,
        numrows       NUMBER    DEFAULT NULL,
        numlblks      NUMBER    DEFAULT NULL,
        relallvisible NUMBER    DEFAULT NULL,
        numdist       NUMBER    DEFAULT NULL,
        avglblk       NUMBER    DEFAULT NULL,
        avgdblk       NUMBER    DEFAULT NULL,
        clstfct       NUMBER    DEFAULT NULL,
        indlevel      NUMBER    DEFAULT NULL,
        flags         NUMBER    DEFAULT NULL,
        statown       VARCHAR2  DEFAULT NULL,
        no_invalidate BOOLEAN   DEFAULT NULL,
        guessq        NUMBER    DEFAULT NULL,
        cachedblk     NUMBER    DEFAULT NULL,
        cachehit      NUMBER    DEFAULT NULL,
        force         BOOLEAN   DEFAULT FALSE
    );
    表26 DBE_STATS.SET_INDEX_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    该索引所在的schema。如果设置为null,则默认使用当前schema。

    indname

    VARCHAR2

    索引名。

    partname

    VARCHAR2

    要设置统计信息的索引分区的名称。如果索引已分区且partname为null,则设置全局索引级别的统计信息。

    stattab

    VARCHAR2

    暂不支持该参数。

    statid

    VARCHAR2

    暂不支持该参数。

    numrows

    NUMBER

    设置索引的行数。

    numlblks

    NUMBER

    设置索引的页数。

    relallvisible

    NUMBER

    设置被标识为全可见的索引中的页的数量。

    numdist

    NUMBER

    暂不支持该参数。

    avglblk

    NUMBER

    暂不支持此参数。

    avgdblk

    NUMBER

    暂不支持此参数。

    clstfct

    NUMBER

    暂不支持此参数。

    indlevel

    NUMBER

    暂不支持此参数。

    flags

    NUMBER

    暂不支持此参数。

    statown

    VARCHAR2

    暂不支持此参数。

    no_invalidate

    BOOLEAN

    暂不支持此参数。

    guessq

    NUMBER

    暂不支持此参数。

    cachedblk

    NUMBER

    暂不支持此参数。

    cachehit

    NUMBER

    暂不支持此参数。

    force

    BOOLEAN

    决定统计信息被锁定时的行为。如果为TRUE,则即使索引统计信息被锁定,该过程也会设置值。默认为FALSE。

    • 要调用此过程设置索引统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 当前仅支持设置索引的reltuples(numrows)、relpages(numlblks)和relallvisible(relallvisible)三类统计信息。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 前置条件,建表,收集统计信息。
    gaussdb=# CREATE SCHEMA dbe_stats_set_schema;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA = dbe_stats_set_schema;
    SET
    gaussdb=# DROP TABLE IF EXISTS t1;
    NOTICE:  table "t1" does not exist, skipping
    DROP TABLE
    gaussdb=# CREATE TABLE IF NOT EXISTS t1 (a int, b int, c int);
    CREATE TABLE
    gaussdb=# CREATE INDEX idx_t1_a on t1(a);
    CREATE INDEX
    gaussdb=# INSERT INTO t1 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (150, 550, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t1 VALUES (250, 150, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t1;
    ANALYZE
    -- 设置索引统计信息。
    -- 查看当前索引统计信息。
    gaussdb=# SELECT reltuples,relpages,relallvisible FROM PG_CLASS WHERE relname='idx_t1_a';
     reltuples | relpages | relallvisible 
    -----------+----------+---------------
             3 |        2 |             0
    (1 row)
    -- 设置统计信息后重新查询。
    gaussdb=# CALL DBE_STATS.SET_INDEX_STATS(indname => 'idx_t1_a', ownname => 'dbe_stats_set_schema', numrows => 1, numlblks => 3, relallvisible => 6);
     set_index_stats 
    -----------------
    (1 row)
    gaussdb=# SELECT reltuples,relpages,relallvisible FROM PG_CLASS WHERE relname='idx_t1_a';
     reltuples | relpages | relallvisible 
    -----------+----------+---------------
             1 |        3 |             6
    (1 row)
    -- 删除表、命名空间。
    gaussdb=# DROP INDEX idx_t1_a;
    DROP INDEX
    gaussdb=# DROP TABLE t1;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_set_schema CASCADE;
    DROP SCHEMA
  • DBE_STATS.SET_TABLE_STATS

    设置表级统计信息。该接口无返回值。

    DBE_STATS.SET_TABLE_STATS函数原型为:

    DBE_STATS.SET_TABLE_STATS (
        ownname         VARCHAR2, 
        tabname         VARCHAR2, 
        partname        VARCHAR2 DEFAULT NULL,
        stattab        VARCHAR2  DEFAULT NULL,
        statid         VARCHAR2  DEFAULT NULL,
        numrows        NUMBER    DEFAULT NULL, 
        numblks        NUMBER    DEFAULT NULL,
        relallvisible  NUMBER    DEFAULT NULL,
        avgrlen        NUMBER    DEFAULT NULL,
        flags          NUMBER    DEFAULT NULL,
        statown        VARCHAR2  DEFAULT NULL,
        no_invalidate  BOOLEAN   DEFAULT NULL,
        cachedblk      NUMBER    DEFAULT NULL,
        cachehit       NUMBER    DEFAULT NULL,
        force          BOOLEAN   DEFAULT FALSE,
        im_imcu_count  NUMBER    DEFAULT NULL,
        im_block_count NUMBER    DEFAULT NULL,
        scanrate       NUMBER    DEFAULT NULL
    );
    表27 DBE_STATS.SET_TABLE_STATS接口参数说明

    参数

    参数

    是否允许为空

    描述

    ownname

    VARCHAR2

    该表所在的schema。如果设置为null,则默认使用当前schema。

    tabname

    VARCHAR2

    表名。

    partname

    VARCHAR2

    要设置统计信息的表分区的名称。如果表已分区且partname为null,则设置全局表级别的统计信息。

    stattab

    VARCHAR2

    暂不支持该参数。

    statid

    VARCHAR2

    暂不支持该参数。

    numrows

    NUMBER

    设置表的行数。

    numblks

    NUMBER

    设置表的页数。

    relallvisible

    NUMBER

    设置被标识为全可见的表中的页的数量。

    avgrlen

    NUMBER

    暂不支持该参数。

    flags

    NUMBER

    暂不支持此参数。

    statown

    VARCHAR2

    暂不支持此参数。

    no_invalidate

    BOOLEAN

    暂不支持此参数。

    cachedblk

    NUMBER

    暂不支持此参数。

    cachehit

    NUMBER

    暂不支持此参数。

    force

    BOOLEAN

    决定统计信息被锁定时的行为。如果为TRUE,则即使表统计信息被锁定,该过程也会设置值。默认为FALSE。

    im_imcu_count

    NUMBER

    暂不支持此参数。

    im_block_count

    NUMBER

    暂不支持此参数。

    scanrate

    NUMBER

    暂不支持此参数。

    • 要调用此过程设置表的统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 当前仅支持设置表的reltuples(numrows)、relpages(numblks)和relallvisible(relallvisible)三类统计信息。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    --与设置索引统计信息类似,此处只展示接口调用方式,具体使用示例参考DBE_STATS.SET_INDEX_STATS接口示例。
    --设置表级统计信息。
    gaussdb=# CALL DBE_STATS.SET_TABLE_STATS(tabname => 't1', ownname => 'dbe_stats_set_schema', numrows => 1, numblks => 3, relallvisible => 6);
     set_table_stats 
    -----------------
    (1 row)
  • DBE_STATS.DELETE_COLUMN_STATS

    删除列相关的统计信息,包括删除单列、多列和表达式统计信息。该接口无返回值。

    DBE_STATS.DELETE_COLUMN_STATS函数原型为:

    DBE_STATS.DELETE_COLUMN_STATS (
        ownname        VARCHAR2,
        tabname        VARCHAR2,
        colname        VARCHAR2,
        partname       VARCHAR2 DEFAULT NULL,
        stattab        VARCHAR2 DEFAULT NULL,
        statid         VARCHAR2 DEFAULT NULL,
        cascade_parts  BOOLEAN  DEFAULT TRUE,
        statown        VARCHAR2 DEFAULT NULL,
        no_invalidate  BOOLEAN  DEFAULT NULL,
        force          BOOLEAN  DEFAULT FALSE,
        col_stat_type  VARCHAR2 DEFAULT NULL
    );
    表28 DBE_STATS.DELETE_COLUMN_STATS接口参数说明

    参数

    类型

    是否允许为空

    说明

    ownname

    VARCHAR2

    该表所在的schema。如果设置为null,则默认使用当前schema。

    tabname

    VARCHAR2

    表名。

    colname

    VARCHAR2

    列名。

    partname

    VARCHAR2

    要删除统计信息的表分区的名称。如果表已分区且partname为null,则删除全局级别的列级统计信息,并且如果cascade_parts为true,则级联删除所有分区的列级统计信息。

    stattab

    VARCHAR2

    暂不支持此参数。

    statid

    VARCHAR2

    暂不支持此参数。

    cascade_parts

    BOOLEAN

    决定在删除列级统计信息时是否将其下面的所有分区的统计信息级联删除。默认为true。

    statown

    VARCHAR2

    暂不支持此参数。

    no_invalidate

    BOOLEAN

    暂不支持此参数。

    force

    BOOLEAN

    决定统计信息被锁定时的行为。如果为true,则即使列统计信息被锁定,该过程也会将其删除。默认为false。

    col_stat_type

    VARCHAR2

    暂不支持此参数。

    • 要调用此过程删除列的统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 该接口支持删除表达式统计信息,由于表达式的创建依赖于索引,因此当调用该接口删除表达式统计信息时,tabname应该传入该索引的名称。
    • 如果表是一个二级分区表,且指定partname为一级分区名,此时如果cascade_parts为true,则会将该一级分区下的所有二级分区统计信息一并删除。
    • 删除多列统计信息时,需先查询PG_STATISTIC_EXT中的staextname字段获取多列别名作为colname入参传入。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 前置条件,建表,收集统计信息。
    gaussdb=# CREATE SCHEMA dbe_stats_delete_schema;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA = dbe_stats_delete_schema;
    SET
    gaussdb=# DROP TABLE IF EXISTS t2;
    NOTICE:  table "t2" does not exist, skipping
    DROP TABLE
    gaussdb=# CREATE TABLE t2(a int, b int, c int) PARTITION BY RANGE(a) SUBPARTITION BY RANGE(b)
     (
        PARTITION p1 VALUES LESS THAN(200)
        (SUBPARTITION s1 VALUES LESS THAN (500),
         SUBPARTITION s2 VALUES LESS THAN (MAXVALUE)
        ),
        PARTITION p2 VALUES LESS THAN(500)
        (SUBPARTITION s3 VALUES LESS THAN (500),
         SUBPARTITION s4 VALUES LESS THAN (MAXVALUE)
        ),
        PARTITION p3 VALUES LESS THAN(MAXVALUE)
        ( SUBPARTITION s5 VALUES LESS THAN (500),
          SUBPARTITION s6 VALUES LESS THAN (MAXVALUE)
        ));
    CREATE TABLE
    gaussdb=# INSERT INTO t2 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (100, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (300, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (300, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 400, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 600, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t2;
    ANALYZE
    gaussdb=# ANALYZE t2((a, b));
    ANALYZE
    
    -- 删除t2表的单列统计信息,不级联分区,分区统计信息仍然存在。
    -- 查看表级列的统计信息。
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='t2'::REGCLASS;
     staattnum | stadistinct | stakind1 |        stanumbers1        |  stavalues1   
    -----------+-------------+----------+---------------------------+---------------
             1 |         -.5 |        1 | {.333333,.333333,.333333} | {100,300,600}
             2 |         -.5 |        1 | {.5,.333333}              | {600,300}
             3 |    -.166667 |        1 | {1}                       | {1}
    (3 rows)
    -- 查看分区级列的统计信息。
    gaussdb=# SELECT part.relname,s.staattnum,s.stadistinct,s.stakind1,s.stanumbers1,s.stavalues1 FROM PG_STATISTIC s,PG_PARTITION part WHERE part.parentid='t2'::REGCLASS and s.starelid=part.oid;
     relname | staattnum | stadistinct | stakind1 | stanumbers1 | stavalues1 
    ---------+-----------+-------------+----------+-------------+------------
     p1      |         1 |          -1 |        1 | {1}         | {100}
     p1      |         2 |          -1 |        2 |             | {300,600}
     p1      |         3 |          -1 |        1 | {1}         | {1}
     p2      |         1 |          -1 |        1 | {1}         | {300}
     p2      |         2 |          -1 |        2 |             | {300,600}
     p2      |         3 |          -1 |        1 | {1}         | {1}
     p3      |         1 |          -1 |        1 | {1}         | {600}
     p3      |         2 |          -1 |        2 |             | {400,600}
     p3      |         3 |          -1 |        1 | {1}         | {1}
    (9 rows)
    -- 删除表级单列统计信息,不级联分区,表级不存在,分区级列的统计信息仍然存在。
    gaussdb=# CALL DBE_STATS.DELETE_COLUMN_STATS(ownname => 'dbe_stats_delete_schema', tabname => 't2', colname => 'a', partname => null, cascade_parts => false);
     delete_column_stats 
    ---------------------
    (1 row)
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='t2'::REGCLASS;
     staattnum | stadistinct | stakind1 | stanumbers1  | stavalues1 
    -----------+-------------+----------+--------------+------------
             2 |         -.5 |        1 | {.5,.333333} | {600,300}
             3 |    -.166667 |        1 | {1}          | {1}
    (2 rows)
    gaussdb=# SELECT part.relname,s.staattnum,s.stadistinct,s.stakind1,s.stanumbers1,s.stavalues1 FROM PG_STATISTIC s,PG_PARTITION part WHERE part.parentid='t2'::REGCLASS and s.starelid=part.oid;
     relname | staattnum | stadistinct | stakind1 | stanumbers1 | stavalues1 
    ---------+-----------+-------------+----------+-------------+------------
     p1      |         1 |          -1 |        1 | {1}         | {100}
     p1      |         2 |          -1 |        2 |             | {300,600}
     p1      |         3 |          -1 |        1 | {1}         | {1}
     p2      |         1 |          -1 |        1 | {1}         | {300}
     p2      |         2 |          -1 |        2 |             | {300,600}
     p2      |         3 |          -1 |        1 | {1}         | {1}
     p3      |         1 |          -1 |        1 | {1}         | {600}
     p3      |         2 |          -1 |        2 |             | {400,600}
     p3      |         3 |          -1 |        1 | {1}         | {1}
    (9 rows)
    
    -- 删除t2表的多列统计信息,级联分区,分区的列级统计信息被同时删除。
    -- 查询统计信息。
    gaussdb=# SELECT stakey,staextname,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC_EXT WHERE starelid='t2'::REGCLASS;
     stakey |     staextname      | stadistinct | stakind1 | stanumbers1 | stavalues1 
    --------+---------------------+-------------+----------+-------------+------------
     1 2    | extname_-1308656218 |          -1 |        8 |             | 
    (1 row)
    gaussdb=# SELECT part.relname,s.stakey,s.staextname,s.stadistinct,s.stakind1,s.stanumbers1,s.stavalues1 FROM PG_STATISTIC_EXT s,PG_PARTITION part WHERE part.parentid='t2'::REGCLASS and s.starelid=part.oid;
     relname | stakey |     staextname      | stadistinct | stakind1 | stanumbers1 | stavalues1 
    ---------+--------+---------------------+-------------+----------+-------------+------------
     p1      | 1 2    | extname_-1308656218 |          -1 |        8 |             | 
     p2      | 1 2    | extname_-1308656218 |          -1 |        8 |             | 
     p3      | 1 2    | extname_-1308656218 |          -1 |        8 |             | 
    (3 rows)
    -- 删除多列统计信息,查询统计信息。
    gaussdb=# CALL DBE_STATS.DELETE_COLUMN_STATS(ownname => 'dbe_stats_delete_schema', tabname => 't2', colname => 'extname_-1308656218', partname => null, cascade_parts => true);
     delete_column_stats 
    ---------------------
    (1 row)
    gaussdb=# SELECT stakey,staextname,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC_EXT WHERE starelid='t2'::REGCLASS;
     stakey | staextname | stadistinct | stakind1 | stanumbers1 | stavalues1 
    --------+------------+-------------+----------+-------------+------------
    (0 rows)
    gaussdb=# SELECT part.relname,s.stakey,s.staextname,s.stadistinct,s.stakind1,s.stanumbers1,s.stavalues1 FROM PG_STATISTIC_EXT s,PG_PARTITION part WHERE part.parentid='t2'::REGCLASS and s.starelid=part.oid;
     relname | stakey | staextname | stadistinct | stakind1 | stanumbers1 | stavalues1 
    ---------+--------+------------+-------------+----------+-------------+------------
    (0 rows)
    
    -- 指定删除p1分区的列级统计信息,表级、p2、p3列统计信息不受影响。
    -- 查询统计信息。
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='t2'::REGCLASS and staattnum=2;
     staattnum | stadistinct | stakind1 | stanumbers1  | stavalues1 
    -----------+-------------+----------+--------------+------------
             2 |         -.5 |        1 | {.5,.333333} | {600,300}
    (1 row)
    gaussdb=# SELECT part.relname,s.staattnum,s.stadistinct,s.stakind1,s.stanumbers1,s.stavalues1 FROM PG_STATISTIC s,PG_PARTITION part WHERE part.parentid='t2'::REGCLASS and s.starelid=part.oid and s.staattnum=2;
     relname | staattnum | stadistinct | stakind1 | stanumbers1 | stavalues1 
    ---------+-----------+-------------+----------+-------------+------------
     p1      |         2 |          -1 |        2 |             | {300,600}
     p2      |         2 |          -1 |        2 |             | {300,600}
     p3      |         2 |          -1 |        2 |             | {400,600}
    (3 rows)
    -- 删除p1分区的列统计信息,查询统计信息。
    gaussdb=# CALL DBE_STATS.DELETE_COLUMN_STATS(ownname => 'dbe_stats_delete_schema', tabname => 't2', colname => 'b', partname => 'p1', cascade_parts => false);
     delete_column_stats 
    ---------------------
    (1 row)
    gaussdb=# SELECT staattnum,stadistinct,stakind1,stanumbers1,stavalues1 FROM PG_STATISTIC WHERE starelid='t2'::REGCLASS and staattnum=2;
     staattnum | stadistinct | stakind1 | stanumbers1  | stavalues1 
    -----------+-------------+----------+--------------+------------
             2 |         -.5 |        1 | {.5,.333333} | {600,300}
    (1 row)
    gaussdb=# SELECT part.relname,s.staattnum,s.stadistinct,s.stakind1,s.stanumbers1,s.stavalues1 FROM PG_STATISTIC s,PG_PARTITION part WHERE part.parentid='t2'::REGCLASS and s.starelid=part.oid and s.staattnum=2;
     relname | staattnum | stadistinct | stakind1 | stanumbers1 | stavalues1 
    ---------+-----------+-------------+----------+-------------+------------
     p2      |         2 |          -1 |        2 |             | {300,600}
     p3      |         2 |          -1 |        2 |             | {400,600}
    (2 rows)
    -- 删除表、命名空间。
    gaussdb=# DROP TABLE t2;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_delete_schema CASCADE;
    DROP SCHEMA
  • DBE_STATS.DELETE_INDEX_STATS

    删除索引相关的统计信息。该接口无返回值。

    DBE_STATS.DELETE_INDEX_STATS的函数原型为:

    DBE_STATS.DELETE_INDEX_STATS (
        ownname          VARCHAR2, 
        indname          VARCHAR2,
        partname         VARCHAR2 DEFAULT NULL,
        stattab          VARCHAR2 DEFAULT NULL, 
        statid           VARCHAR2 DEFAULT NULL,
        cascade_parts    BOOLEAN  DEFAULT TRUE,
        statown          VARCHAR2 DEFAULT NULL,
        no_invalidate    BOOLEAN  DEFAULT NULL,
        stattype         VARCHAR2 DEFAULT NULL,
        force            BOOLEAN  DEFAULT FALSE,
        stat_category    VARCHAR2 DEFAULT NULL
    )
    表29 DBE_STATS.DELETE_INDEX_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    该索引所在的schema。如果设置为null,则默认使用当前schema。

    indname

    VARCHAR2

    索引名。

    partname

    VARCHAR2

    要删除统计信息的索引分区的名称。如果索引已分区且partname为null,则删除全局级别的索引统计信息,并且如果cascade_parts为true,则级联删除所有分区的索引统计信息。

    stattab

    VARCHAR2

    暂不支持此参数。

    statid

    VARCHAR2

    暂不支持此参数。

    cascade_parts

    BOOLEAN

    决定在删除索引统计信息时是否将其下面的所有分区的索引统计信息级联删除。默认为true。

    statown

    VARCHAR2

    暂不支持此参数。

    no_invalidate

    BOOLEAN

    暂不支持此参数。

    stattype

    VARCHAR2

    暂不支持此参数。

    force

    BOOLEAN

    决定统计信息被锁定时的行为。如果为true,则即使索引统计信息被锁定,该过程也会将其删除。默认为false。

    stat_category

    VARCHAR2

    暂不支持此参数。

    • 要调用此过程删除索引的统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 删除索引的统计信息等同于将索引统计信息的reltuples、relpages和relallvisible信息置零。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 前置条件,建表。
    gaussdb=# CREATE SCHEMA dbe_stats_delete_schema;
    CREATE SCHEMA
    gaussdb=# SET CURRENT_SCHEMA = dbe_stats_delete_schema;
    SET
    gaussdb=# DROP TABLE IF EXISTS t2;
    NOTICE:  table "t2" does not exist, skipping
    DROP TABLE
    gaussdb=# CREATE TABLE t2(a int, b int, c int) PARTITION BY RANGE(a) SUBPARTITION BY RANGE(b)
     (
        PARTITION p1 VALUES LESS THAN(200)
        (SUBPARTITION s1 VALUES LESS THAN (500),
         SUBPARTITION s2 VALUES LESS THAN (MAXVALUE)
        ),
        PARTITION p2 VALUES LESS THAN(500)
        (SUBPARTITION s3 VALUES LESS THAN (500),
         SUBPARTITION s4 VALUES LESS THAN (MAXVALUE)
        ),
        PARTITION p3 VALUES LESS THAN(MAXVALUE)
        ( SUBPARTITION s5 VALUES LESS THAN (500),
          SUBPARTITION s6 VALUES LESS THAN (MAXVALUE)
        ));
    CREATE TABLE
    gaussdb=# CREATE INDEX idx_t2_local_a ON t2(a) LOCAL
     (
         PARTITION p1_idx_a
         (
             SUBPARTITION s1_idx_a,
             SUBPARTITION s2_idx_a
         ),
         PARTITION p2_idx_a
         (
             SUBPARTITION s3_idx_a,
             SUBPARTITION s4_idx_a
         ),
         PARTITION p3_idx_a
         (
             SUBPARTITION s5_idx_a,
             SUBPARTITION s6_idx_a
         ));
    CREATE INDEX
    gaussdb=# INSERT INTO t2 VALUES (100, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (100, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (300, 300, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (300, 600, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 400, 1);
    INSERT 0 1
    gaussdb=# INSERT INTO t2 VALUES (600, 600, 1);
    INSERT 0 1
    gaussdb=# ANALYZE t2;
    ANALYZE
    gaussdb=# ANALYZE t2((a, b));
    ANALYZE
    
    -- 删除idx_t2_local_a索引的统计信息,不级联分区索引的统计信息。
    -- 查看统计信息。
    gaussdb=# SELECT relpages,reltuples FROM PG_CLASS WHERE relname='idx_t2_local_a';
     relpages | reltuples 
    ----------+-----------
            6 |         6
    (1 row)
    gaussdb=# SELECT relname,relpages,reltuples FROM PG_PARTITION WHERE parentid='idx_t2_local_a'::REGCLASS;
     relname  | relpages | reltuples 
    ----------+----------+-----------
     s1_idx_a |        1 |         0
     s2_idx_a |        1 |         0
     s3_idx_a |        1 |         0
     s4_idx_a |        1 |         0
     s5_idx_a |        1 |         0
     s6_idx_a |        1 |         0
    (6 rows)
    -- 删除统计信息,查询系统表。
    gaussdb=# CALL DBE_STATS.DELETE_INDEX_STATS(ownname => 'dbe_stats_delete_schema', indname => 'idx_t2_local_a', partname => null, cascade_parts => false);
     delete_index_stats 
    --------------------
    (1 row)
    gaussdb=# SELECT relpages,reltuples FROM PG_CLASS WHERE relname='idx_t2_local_a';
     relpages | reltuples 
    ----------+-----------
            0 |         0
    (1 row)
    gaussdb=# SELECT relname,relpages,reltuples FROM PG_PARTITION WHERE parentid='idx_t2_local_a'::REGCLASS;
     relname  | relpages | reltuples 
    ----------+----------+-----------
     s1_idx_a |        1 |         0
     s2_idx_a |        1 |         0
     s3_idx_a |        1 |         0
     s4_idx_a |        1 |         0
     s5_idx_a |        1 |         0
     s6_idx_a |        1 |         0
    (6 rows)
    
    -- 删除idx_t2_local_a索引的s1_idx_a分区的统计信息。
    gaussdb=# CALL DBE_STATS.DELETE_INDEX_STATS(ownname => 'dbe_stats_delete_schema', indname => 'idx_t2_local_a', partname => 's1_idx_a', cascade_parts => false);
     delete_index_stats 
    --------------------
    (1 row)
    gaussdb=# SELECT relname,relpages,reltuples FROM PG_PARTITION WHERE parentid='idx_t2_local_a'::REGCLASS;
     relname  | relpages | reltuples 
    ----------+----------+-----------
     s2_idx_a |        1 |         0
     s3_idx_a |        1 |         0
     s4_idx_a |        1 |         0
     s5_idx_a |        1 |         0
     s6_idx_a |        1 |         0
     s1_idx_a |        0 |         0
    (6 rows)
    
    -- 级联删除所有分区的索引统计信息。
    gaussdb=# CALL DBE_STATS.DELETE_INDEX_STATS(ownname => 'dbe_stats_delete_schema', indname => 'idx_t2_local_a', partname => null, cascade_parts => true);
     delete_index_stats 
    --------------------
    (1 row)
    gaussdb=# SELECT relname,relpages,reltuples FROM PG_PARTITION WHERE parentid='idx_t2_local_a'::REGCLASS;
     relname  | relpages | reltuples 
    ----------+----------+-----------
     s6_idx_a |        0 |         0
     s5_idx_a |        0 |         0
     s4_idx_a |        0 |         0
     s3_idx_a |        0 |         0
     s2_idx_a |        0 |         0
     s1_idx_a |        0 |         0
    (6 rows)
    -- 删表、删除命名空间。
    gaussdb=# DROP INDEX idx_t2_local_a;
    DROP INDEX
    gaussdb=# DROP TABLE t2;
    DROP TABLE
    gaussdb=# DROP SCHEMA dbe_stats_delete_schema CASCADE;
    DROP SCHEMA
  • DBE_STATS.DELETE_TABLE_STATS

    删除表级统计信息。该接口无返回值。

    DBE_STATS.DELETE_TABLE_STATS的函数原型为:

    DBE_STATS.DELETE_TABLE_STATS (
        ownname               VARCHAR2, 
        tabname               VARCHAR2, 
        partname              VARCHAR2 DEFAULT NULL,
        stattab               VARCHAR2 DEFAULT NULL,
        statid                VARCHAR2 DEFAULT NULL,
        cascade_parts         BOOLEAN  DEFAULT TRUE, 
        cascade_columns       BOOLEAN  DEFAULT TRUE,
        cascade_indexes       BOOLEAN  DEFAULT TRUE,
        statown               VARCHAR2 DEFAULT NULL,
        no_invalidate         BOOLEAN  DEFAULT NULL,
        force                 BOOLEAN  DEFAULT FALSE,
        stat_category         VARCHAR2 DEFAULT NULL
    )
    表30 DBE_STATS.DELETE_TABLE_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    该表所在的schema。如果设置为null,则默认使用当前schema。

    tabname

    VARCHAR2

    表名。

    partname

    VARCHAR2

    要删除统计信息的表分区的名称。如果表已分区且partname为null,则删除全局级别的表统计信息,并且如果cascade_parts为true,则级联删除所有分区的表级统计信息。

    stattab

    VARCHAR2

    暂不支持此参数。

    statid

    VARCHAR2

    暂不支持此参数。

    cascade_parts

    BOOLEAN

    决定在删除表级统计信息时是否将其下面的所有分区的表统计信息级联删除。默认为true。

    cascade_columns

    BOOLEAN

    决定是否调用delete_column_stats删除该表的所有列级统计信息。默认为true。

    cascade_indexes

    BOOLEAN

    决定是否调用delete_index_stats删除该表的所有索引统计信息。默认为true。

    statown

    VARCHAR2

    暂不支持此参数。

    no_invalidate

    BOOLEAN

    暂不支持此参数。

    force

    BOOLEAN

    决定统计信息被锁定时的行为。如果为true,则即使表的统计信息被锁定,该过程也会将其删除。默认为false。

    stat_category

    VARCHAR2

    暂不支持此参数。

    • 要调用此过程删除表的统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 如果cascade_columns或cascade_indexes设置为true,则是否级联删除对应分区列或索引的统计信息,也由cascade_parts决定。比如,如果cascade_parts设置为true,则对于一个分区表,不仅将其所有分区的表级统计信息删除,也会将所有分区的列级、索引级统计信息删除。
    • 删除表的统计信息等同于将表统计信息的reltuples、relpages和relallvisible信息置零。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 删除表级索引统计信息与删除索引统计信息类似,此处仅展示接口调用方式,具体示例参考DBE_STATS.DELETE_INDEX_STATS示例。
    -- 删除表级统计信息,同时将该表的所有列、索引统计信息进行删除。
    gaussdb=# CALL DBE_STATS.DELETE_TABLE_STATS(ownname => 'dbe_stats_delete_schema', tabname => 't2', cascade_columns => true, cascade_indexes => true);
     delete_table_stats 
    --------------------
    (1 row)
  • DBE_STATS.DELETE_SCHEMA_STATS

    删除schema下所有的表级、索引级和列级统计信息。该接口无返回值。

    DBE_STATS.DELETE_SCHEMA_STATS的函数原型为:

    DBE_STATS.DELETE_SCHEMA_STATS (
        ownname          VARCHAR2, 
        stattab          VARCHAR2 DEFAULT NULL, 
        statid           VARCHAR2 DEFAULT NULL,
        statown          VARCHAR2 DEFAULT NULL,
        no_invalidate    BOOLEAN  DEFAULT NULL,
        force            BOOLEAN  DEFAULT FALSE,
        stat_category    VARCHAR2 DEFAULT NULL
    );
    表31 DBE_STATS.DELETE_SCHEMA_STATS接口参数说明

    参数

    类型

    是否允许为空

    描述

    ownname

    VARCHAR2

    schema名字。如果设置为null,则默认使用当前schema。

    stattab

    VARCHAR2

    暂不支持此参数。

    statid

    VARCHAR2

    暂不支持此参数。

    statown

    VARCHAR2

    暂不支持此参数。

    no_invalidate

    BOOLEAN

    暂不支持此参数。

    force

    BOOLEAN

    决定统计信息被锁定时的行为。如果为true,则即使有统计信息被锁定,该过程也会将其删除。默认为false。

    stat_category

    VARCHAR2

    暂不支持此参数。

    • 要调用此过程删除统计信息,需要对指定的表具有同ANALYZE命令一样的权限,具体可以参考ANALYZE | ANALYSE
    • 删除schema下的统计信息,即删除当前用户在指定schema下所有有权限的表,对于没有权限的表直接跳过,不报错。
    • 当ownname参数值设置为null时使用当前schema,需将behavior_compat_options参数值设置为bind_procedure_searchpath。

    示例:

    -- 此处仅展示接口调用,具体实现用例参考DBE_STATS.DELETE_TABLE_STATSgaussdb=# CALL DBE_STATS.DELETE_SCHEMA_STATS(ownname => 'dbe_stats_delete_schema');
     delete_schema_stats 
    ---------------------
    (1 row)