Oracle 手动收集统计信息
收集oracle统计信息
- 优化器统计范围:
- 表统计: --行数,块数,行平均长度;all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN;
- 列统计: --列中唯一值的数量(NDV),NULL值的数量,数据分布;
- --DBA_TAB_COLUMNS:NUM_DISTINCT,NUM_NULLS,HISTOGRAM;
- 索引统计: --叶块数量,等级,聚簇因子;
- --DBA_INDEXES:LEAF_BLOCKS,CLUSTERING_FACTOR,BLEVEL;
- 系统统计:--I/O性能与使用率;
- --CPU性能与使用率;
- --存储在aux_stats$中,需要使用dbms_stats收集,I/O统计在X$KCFIO中;
Dbms_stats
- --------------------------------------------
- dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划。
- dbms_stats.gather_database_stats 分析数据库(包括所有的用户对象和系统对象)
- dbms_stats.gather_schema_stats 收集SCHEMA下所有对象的统计信息
- dbms_stats.gather_table_stats 收集表、列和索引的统计信息
- dbms_stats.gather_index_stats 收集索引的统计信息
- dbms_stats.gather_system_stats 收集系统统计信息
- dbms_stats.gather_dictionary_stats 所有字典对象的统计
- dbms_stats.gather_dictionary_stats 其收集所有系统模式的统计
- dbms_stats.delete_database_stats 删除数据库统计信息
- dbms_stats.delete_schema_stats 删除用户方案统计信息
- dbms_stats.delete_table_stats 删除表的统计信息
- dbms_stats.delete_index_stats 删除索引的统计信息
- dbms_stats.delete_column_stats 删除列统计信息
- dbms_stats.export_table_stats 输出表的统计信息
- dbms_stats.create_state_table
- dbms_stats.set_table_stats 设置表的统计
- dbms_stats.set_index_stats 设置索引统计信息:
- dbms_stats.set_column_stats 设置列统计信息
- dbms_stats.auto_sample_size
统计收集的权限
- ==========================
- 必须授予普通用户权限
- sys@ORADB> grant execute_catalog_role to hr;
- sys@ORADB> grant connect,resource,analyze any to hr;
统计收集考虑参数
- ==========================
- 1 统计收集使用取样(estimate_percent)
- 不使用抽样的统计收集需要全表扫描并且排序整个表,抽样最小化收集统计的必要资源。
- Oracle推荐设置DBMS_STATS的ESTIMATE_PERCENT参数为DBMS_STATS.AUTO_SAMPLE_SIZE在达到必要的统计精确性的同时最大化性能。
- 2 并行统计收集(degree)
- Oracle推荐设置DBMS_STATS的DEGREE参数为DBMS_STATS.AUTO_DEGREE,该参数允许Oracle根据对象的大小和并行性初始化参数的设置选择恰当的并行度。
- 聚簇索引,域索引,位图连接索引不能并行收集。
- 3 分区对象的统计收集(Granularity)
- 对于分区表和索引,DBMS_STATS可以收集单独分区的统计和全局分区,对于组合分区,可以收集子分区,分区,表/索引上的统计,分区统计的收集
- 可以通过声明参数GRANULARITY。根据将优化的SQL语句,优化器可以选择使用分区统计或全局统计,对于大多数系统这两种统计都是很重要的,Oracle推荐将GRANULARITY设置为AUTO同时收集全部信息。
- 4 列统计和直方图(METHOD_OPT)
- 当在表上收集统计时,DBMS_STATS收集表中列的数据分布的信息,数据分布最基本的信息是最大值和最小值,但是如果数据分布是倾斜的,这种级别的统计对于优化器来说不够的,对于倾斜的数据分布,直方图通常用来作为列统计的一部分。
- 直方图通过METHOD_OPT参数声明,Oracle推荐设置METHOD_OPT为FOR ALL COLUMNS SIZE AUTO,使用该值时Oracle自动决定需要直方图的列以及每个直方图的桶数。也可以手工设置需要直方图的列以及桶数。
- 如果在使用DBMS_STATS的时候需要删除表中的所有行,需要使用TRUNCATE代替drop/create,否则自动统计收集特征使用的负载信息以及RESTORE_*_STATS使用的保存的统计历史将丢失。这些特征将无法正常发挥作用。
- 5 确定过期的统计
- 对于那些随着时间更改的对象必须周期性收集统计,为了确定过期的统计,Oracle提供了一个表监控这些更改,这些监控默认情况下
- 在STATISTICS_LEVEL为TYPICAL/ALL时启用,该表为USER_TAB_MODIFICATIONS。使用DBMS_STATS.FLUSH_DATABASE _MONITORING_INFO可以立刻反映
- 内存中超过监控的信息。在OPTIONS参数设置为GATHER STALE or GATHER AUTO时,DBMS_STATS收集过期统计的对象的统计。
- 6 用户定义统计
- 在创建了基于索引的统计后,应该在表上收集新的列统计,这可以通过调用过程设置METHOD_OPT的FOR ALL HIDDEN COLUMNS。
- 7 何时收集统计
- 对于增量更改的表,可能每个月/每周只需要收集一次,而对于加载后表,通常在加载脚本中增加收集统计的脚本。对于分区表,如果仅仅是一个分区
- 有了较大改动,只需要收集一个分区的统计,但是收集整个表的分区也是必要的。
特殊说明
- 1.9i里注意在收集统计信息的时候设置cascade=>true ,否则将不收集索引的统计信息
- 2.10g里注意estimate_percent为auto_sample_size并不是100%,而且10g里的auto_sample_size采样的值一般比较小,因此建议不要使用默认值,而是设置estimate_percent为30%以上,11g里的auto_sample_size采用的值就比较大,estimate_percent的值太小容易导致sql 的执行计划出现问题
- 3.method_opt在9i里的设置是for all columns size 1,就是只收集最大值和最小值不收集直方图的信息 ,10g里method_opt的设置for all columns size auto由oracle根据col_usage$里的数据来决定是否收集直方图,因此在oltp的业务中,一定要注意10g里默认收集直方图对应用造成的影响(如bind_peeking,cursor_sharing=similar)
--整理自网络
Oracle 手动收集统计信息的更多相关文章
- Oracle 判断 并 手动收集 统计信息 脚本
CREATE OR REPLACE PROCEDURE SchameB.PRC_GATHER_STATS AUTHID CURRENT_USER IS BEGIN SYS.DBMS_STATS.GAT ...
- Oracle 分区表 收集统计信息 参数granularity
GRANULARITY Determines the granularity of statistics to collect. This value is only relevant for par ...
- ORACLE收集统计信息
1. 理解什么是统计信息 优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: · ...
- ORACLE 收集统计信息
1. 理解什么是统计信息优化器统计信息就是一个更加详细描述数据库和数据库对象的集合,这些统计信息被用于查询优化器,让其为每条SQL语句选择最佳的执行计划.优化器统计信息包括: · ...
- Oracle收集统计信息的一些思考
一.问题 Oracle在收集统计信息时默认的采样比例是DBMS_STATS.AUTO_SAMPLE_SIZE,那么AUTO_SAMPLE_SIZE的值具体是多少? 假设采样比例为10%,那么在计算单个 ...
- Oracle性能优化之Oracle里的统计信息
一.什么是统计信息 oracle数据库里的统计信息是如下的一组数据:他们存储在数据字典里,且从多个维度描述了oracle数据库数据对象的详细信息. oracle数据库里的统计信息主要分为以下6种情况: ...
- Oracle的自动统计信息不收集直方图的信息
Oracle的自动统计信息不收集直方图的信息 在oracle9i中,默认的统计信息收集是不收集直方图信息的,也就是说默认的MOTHOD_OPT模式为FOR ALL COLUMNS SIZE 1 在10 ...
- Oracle重建表索引及手工收集统计信息
Oracle重建所有表的索引的sql: SELECT 'alter index ' || INDEX_NAME || ' rebuild online nologging;' FROM USER_IN ...
- Oracle 11g系统自己主动收集统计信息的一些知识
在11g之前,当表的数据量改动超过总数据量的10%,就会晚上自己主动收集统计信息.怎样推断10%.之前的帖子有研究过:oracle自己主动统计信息的收集原理及实验.这个STALE_PERCENT=10 ...
随机推荐
- 硬盘安装ubuntu120.04分区方案
320G分区方案1/boot :256MB ext2swap :4G/ :40G ext4/tmp :5G ext4/var :20G ext4/usr :20G ext4/home :230GMB ...
- java中的 json 处理包
Jackson 以前很火 Fastjson 阿里巴巴出品
- Java-convert between INT and STRING
int -> String 三种写法 String s = 43 + ""; String s = String.valueOf(43); String s = Intege ...
- Hive基础之HiveServer2 JDBC的使用
启动HiveServer2: cd $HIVE_HOME/bin 以后台方式默认端口启动HiveServer2(默认端口是10000):hiveserver2 & 以后台方式指定端口的方式启动 ...
- (二). 细说Kalman滤波:The Kalman Filter
本文为原创文章,转载请注明出处,http://www.cnblogs.com/ycwang16/p/5999034.html 前面介绍了Bayes滤波方法,我们接下来详细说说Kalman滤波器.虽然K ...
- IIS 发布MVC 提示开启目录浏览
修改应用池 托管管道模式为 集成
- KMP算法浅析
具体参见: KMP算法详解 背景: KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字.其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除 ...
- devexpress中ASPxGridView控件初始化赋值
写在ASPxGridView中OnCellEditorInitialize="ASPxGridView_progoods_CellEditorInitialize" 事件中: / ...
- (笔记)angular选中变色
- RequireJS首次加载偶尔失败
现象:第一次加载JS文件,首次加载偶尔失败: 原因:require(['jquery', 'operamasks', 'zTree', 'jQueryCookie'],中前后引用同步加载: 解决方式: ...