dbms_stats 包常用方法介绍
来源:互联网 发布:二维码制作软件下载 编辑:程序博客网 时间:2024/05/17 12:06
dbms_stats 包是 oracle 9i 之后用来收集统计 oracle 相关信息的包, 虽然 analyze 命令也可以实现类似功能, 但 oracle 还是推荐使用 dbms_stats 包, 最主要的原因 dbms_stats 包能够收集正确的分区表的统计信息, 因为 analyze 命令只能在最低级上收集统计信息, 而高级的统计信息是通过低级的统计信息汇总以及推导出来的. 此外, dbms_stats 包收集的统计信息可以被 CBO 优化器使用, 对于能否制定准确高效的执行计划至关重要.
下面介绍 Oracle 11g 中常用的几个方法
1. 收集 schema 统计信息
DBMS_STATS.GATHER_SCHEMA_STATS ( ownname VARCHAR2, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, options VARCHAR2 DEFAULT 'GATHER', objlist OUT ObjectTab, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE, obj_filter_list ObjectTab DEFAULT NULL);
method_opt(收集直方图的策略):
for all [indexed | hidden] columns size [integer | repeat | auto | skewonly]
默认值为:for all columns size auto
- integer : 直方图桶数, 取消范围 1 – 254, 如果是 1, 则不收集直方图
- repeat : 只在已经有直方图的列上收集直方图
- auto : oracle 根据列上的数据的分布情况和与对应表相关的工作负载决定哪些列需要收集统计信息
- skewonly: oracle 根据列上的数据的分布情况决定哪些列需要收集统计信息(收集数据非均匀分布的列的统计信息)
granularity(收集粒度), 取值如下:
默认值为: AUTO
- ALL :对所有包括子分区, 分区, 全局级别的数据进行收集(Sub Partition + Partition + Table)
- AUTO :根据分区类型由 oracle 决定做哪一种粒度的收集
- DEFAULT :同 GLOBAL AND PARTITION(Table + Partition)
- GLOBAL :收集全局级别的统计信息(Table)
- GLOBAL AND PARTITION :收集全局级别和分区级别的统计信息(Table + Partition)
- PARTITION :收集分区级别的统计信息(Partition)
- SUBPARTITION :收集子分区级别的统计信息(Sub Partition)
options(收集对象的策略), 取值如下:
默认值:GATHER
- GATHER : 收集 schema 上所有对象的统计信息
- GATHER ATUO :等于 gather stale 和 gather empty
- GATHER STALE :收集和返回更新超过10%的表(更新包括插入,修改,删除)
- GATHER EMPTY:收集和返回没有统计信息的对象
- LIST AUTO :返回 GATHER Auto 处理的对象
- LIST STALE :返回失效的对象(根据 view *_tab_modifications )
- LIST EMPTY :返回当前没有统计信息的对象
Exec dbms_stats.gather_schema_stats( ownname => 'scott', options => 'GATHER AUTO', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all indexed columns ', degree => 4 )
2. 收集表统计信息
DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param ('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (get_param('NO_INVALIDATE')), stattype VARCHAR2 DEFAULT 'DATA', force BOOLEAN DEFAULT FALSE);
- ownname -------- table 所在的schema = 当前用户名
- tablename -------- table name
- partname -------- 分区名
- estimate_percent -------- 动态采集行数比例, 取值范围为 [0.00001, 100], 如果为空代表全表收集
- block_sample -------- 是否使用块采样代替行采样
- method_opt -------- for all [indexed | hidden] columns size [integer | repeat | auto | skewonly]
- degree -------- 并行度
对 emp表中所有有索引的列进行自动收集直方图统计信息
exec dbms_stats.gather_table_stats(ownname => 'scott',tabname => 'emp',estimate_percent => 20,method_opt=> 'for all indexed columns') ;
收集 emp 表中 empno 列的直方图统计信息,同时指定 bucket(桶) 的数量为 5
exec dbms_stats.gather_table_stats(ownname => 'scott',tabname => 'emp',estimate_percent => 20,method_opt=> 'for columns size 5 EMPNO') ;
3. 收集索引统计信息
DBMS_STATS.GATHER_INDEX_STATS ( ownname VARCHAR2, indname VARCHAR2, partname VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type (GET_PARAM('ESTIMATE_PERCENT')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (GET_PARAM('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
- ownname ------- 索引所在的 schema
- indname ------ 索引名
- partname ------- 分区名
- estimate_percent -------- 动态采集行数比例, 取值范围为 [0.00001, 100], 如果为空代表全表收集
- stattab ------- 保存当前统计信息的名字
exec dbms_stats.gather_index_stats(ownname => 'scott',indname => 'IDX_EMPNO',estimate_percent => '20',degree => '4') ;
4. 删除表统计信息
DBMS_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 to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
exec dbms_stats.delete_table_stats(ownname => 'scott', tabname => ‘EMP’);
5. 查看收集的统计信息
可以参考 sosi.sql 方便的查看
PS: oracle 官网 dbms_stats 介绍
http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_stats.htm#ARPLS059
0 0
- dbms_stats 包常用方法介绍
- dbms_stats包的常用几个信息统计分析
- dbms_stats包
- dbms_stats包
- oracle dbms_stats 包
- oracle dbms_stats 包
- oracle dbms_stats包
- dbms_stats包dbms_stats.gather_table_stats&动态采样
- DBMS_STATS.GATHER_SCHEMA_STATS介绍使用
- DBMS_STATS.GATHER_SCHEMA_STATS介绍使用
- DBMS_STATS.GATHER_SCHEMA_STATS介绍使用
- DBMS_STATS.GATHER_SCHEMA_STATS介绍使用
- DBMS_STATS.GATHER_SCHEMA_STATS介绍使用
- DBMS_STATS.GATHER_SCHEMA_STATS介绍使用
- DBMS_STATS.GATHER_SCHEMA_STATS介绍使用
- DBMS_STATS包-收集统计信息!
- dbms_stats包的使用说明书
- Go 常用包介绍
- Test #3:性能度量
- 某铁网站证书报错修改指南
- ERROR 1172 (42000): Result consisted of more than one row
- dwz框架学习之精简官方页面 学习最基本的dwz控件和语法
- 利用ContentHub API来import图片
- dbms_stats 包常用方法介绍
- git 客户端推荐
- 珠子问题 【微软面试100题 第四十题】
- java时间转换,long , string和date和时间戳的互转
- hdoj 1237 简单计算器(栈)
- 自定义对话框之动画效果
- linux下etc/fstab文件中参数详解
- linux文件目录
- iOS8中的[UIScreen mainScreen].bounds 和 [UIScreen mainScreen].applicationFrame(下)