达梦数据库如何利用DBMS_STATS收集统计信息

前言

优化统计信息描述了数据库中的对象细节。查询优化使用这些信息选择最合适的执行计划。使用DBMS_STATS包来收集统计、删除信息,将收集的统计信息记录在数据字典中。

DBMS_STATS 包中涉及到类型,如下统一说明。
OBJECTELEM 类型是 DBMS_STATS 专有类型。用户不能引用和改变该记录的内容。
OBJECTELEM 记录类型定义如下:

TYPE OBJECTELEM IS RECORD (
OWNNAME VARCHAR(128) ,
OBJTYPE VARCHAR(6) ,
OBJNAME VARCHAR(128) ,
PARTNAME VARCHAR(128) ,
SUBPARTNAME VARCHAR(128)
) ;

参数详解
OWNNAME 模式名。
OBJTYPE 对象类型,TABLE 或 INDEX。
OBJNAME 对象(表或索引)名称,区分大小写。
PARTNAME 分区名称,区分大小写。
SUBPARTNAME 子分区名称,区分大小写。

OBJECTTAB 为 OBJECTELEM 类型的索引表:
TYPE OBJECTTAB IS TABLE OF OBJECTELEM INDEX BY IN

测试环境:

操作系统:中标麒麟6
达梦数据库:DMV8.1
在这里插入图片描述

相关案例分析:

使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_STATS');

案例1:

收集模式DMHR模式下EMPLOYEE表的统计信息,并打印收集的表信息。
使用方法:GATHER_SCHEMA_STATS
收集模式下对象的统计信息。
在这里插入图片描述
打印结果
在这里插入图片描述
语法如下:

PROCEDURE GATHER_SCHEMA_STATS (
OWNNAME VARCHAR(128),
ESTIMATE_PERCENT DOUBLE DEFAULT
TO_ESTIMATE_PERCENT_TYPE(GET_PREFS('ESTIMATE_PERCENT')),
BLOCK_SAMPLE BOOLEAN DEFAULT FALSE,
METHOD_OPT VARCHAR DEFAULT GET_PREFS('METHOD_OPT'),
DEGREE INT DEFAULT TO_DEGREE_TYPE(GET_PREFS('DEGREE')),
GRANULARITY VARCHAR DEFAULT GET_PREFS('GRANULARITY'),
CASCADE BOOLEAN DEFAULT TO_CASCADE_TYPE(GET_PREFS('CASCADE')),
STATTAB VARCHAR DEFAULT NULL,
STATID VARCHAR DEFAULT NULL,
OPTIONS VARCHAR DEFAULT 'GATHER',
OBJLIST OUT OBJECTTAB DEFAULT NULL,
STATOWN VARCHAR DEFAULT NULL,
NO_INVALIDATE BOOLEAN DEFAULT TO_NO_INVALIDATE_TYPE
(GET_PREFS('NO_INVALIDATE')),
FORCE BOOLEAN DEFAULT FALSE,
OBJ_FILTER_LIST OBJECTTAB DEFAULT NULL

参数详解:
• OWNNAME 模式名,区分大小写。
• ESTIMATE_PERCENT 收集的百分比,范围为 0.000001~100,默认系统自定。
• BLOCK_SAMPLE 保留参数,是否使用随机块代替随机行,默认为 TRUE。
• METHOD_OPT 控制列的统计信息集合和直方图的创建;

默认为 FOR ALL COULMNS SIZE AUTO;只支持其中一种格式:

FOR ALL [INDEXED | HIDDEN] COLUMNS [<size_clause>]
<size_clause>::= SIZE {integer | REPEAT | AUTO | SKEWONLY}

• DEGREE 保留参数,收集的并行度,默认为 1。
• GRANULARITY 保留参数,收集的粒度,默认为 ALL。
• CASCADE 是否收集索引信息,TRUE 或 FALSE。默认为 TRUE。
• STATTAB 保留参数,统计信息存放的表,默认为 NULL。
• STATID 保留参数,统计信息的 ID,默认为 NULL。
• OPTIONS

控制收集的列,默认为 NULL ;选项如下:
GATHER|GATHER AUTO|GATHER STALE|GATHER EMPTY|LIST AUTO|LIST STALE|LIST EMPTY。

各选项解释如下:
• GATHER:收集模式下所有对象的统计信息。
• GATHER AUTO:自动收集需要的统计信息。系统隐含的决定哪些对象需要新的统计信息,以及怎样收集这些统计信息。此时,只有 OWNNAME,STATTAB,STATID,OBJLIST AND STATOWN有效,返回收集统计信息的对象。
• GATHER STALE:对旧的对象收集统计信息。返回找到的旧的对象。
• GATHER EMPTY:收集没有统计信息对象的统计信息。返回这些对象。
• LIST AUTO:返回GATHER AUTO方式处理的对象。
• LIST STALE:返回旧的对象信息。
• LIST EMPTY:返回没有统计信息的对象。
• OBJLIST 返回 OPTION 选项对应的链表,默认为 NULL。
• STATOWN 保留参数,统计信息的模式,默认为 NULL。
• NO_INVALIDATE 保留参数,是否让依赖游标失效,默认为 TRUE。
• FORCE 保留参数,是否强制收集统计信息,默认为 FALSE。
• OBJ_FILTER_LIST 存放过滤条件的模式名、表名和子表名,默认为 NULL

案例2:

获得 DMHR 模式下表 EMPLOYEE 中列 HIRE_DATE 的统计信息。
使用方法:COLUMN_STATS_SHOW
根据模式名,表名和列名获得该列的统计信息。返回两个结果集:一个是列的统计信息;另一个是直方图的统计信息。

DBMS_STATS.COLUMN_STATS_SHOW('DMHR','EMPLOYEE','HIRE_DATE');

返回结果集:
在这里插入图片描述
语法如下:

PROCEDURE COLUMN_STATS_SHOW (
OWNNAME IN VARCHAR(128),
TABNAME IN VARCHAR(128),
COLNAME INVARCHAR(128)
);

列的统计信息,格式分别如下:

名称 解释
NUM_DISTINCT 不同列值的个数
LOW_VALUE 列最小值
HIGH_VALUE 列最大值
NUM_NULLS 空值的个数
NUM_BUCKETS 直方图桶的个数
SAMPLE_SIZE 样本容量
HISTOGRAM 直方图的类型

参数详解:
• OWNNAME 模式名,区分大小写。
• TABNAME 表名,区分大小写。
• COLNAME 列名,区分大小写。

不适用范围

以下对象不支持统计信息:

  1. 外部表、DBLINK 远程表、动态视图表、记录类型数组所用的临时表。
  2. 所在表空间为 OFFLINE 的对象。
  3. 位图索引,位图连接索引、虚索引、全文索引、空间索引、数组索引、无效的索引。
  4. BLOB、IMAGE、LONGVARBINARY、CLOB、TEXT、LONGVARCHAR、自定义类型列和空间类型列等列类型。

关于DBMS_STATS更多的使用方法,请查阅官方相关手册。

发布了56 篇原创文章 · 获赞 5 · 访问量 9336

猜你喜欢

转载自blog.csdn.net/fengxiaozhenjay/article/details/104350524