首页 > Linux操作系统 > Linux操作系统 > Oracle统计信息
Oracle10g的在线文档《Managing Optimizer Statistics》这一章写的比较经典,虽然关键词、知识点很多,但整个文章结构条理化非常清晰,特别是没有复杂的英文单词,总结一下以备后用。
1. 统计信息
Oracle10g里的统计信息按照object和system分类如下:
2. Object的统计信息
Oracle里每个object的统计信息类型如下:
系统级别的统计信息主要是性能相关的信息,如下:
3. 获得统计信息的途径
可以通过以下表或视图查询统计信息
上面这些记忆性的东西是OCP认证考试喜欢挑选的一些知识点!死记硬背确实有点多,平时用的时候查一下资料就行了。
4. 自动收集统计信息
Oracle的GATHER_STATS_JOB会自动收集所有object的统计信息,创建数据库的时候自动创建GATHER_STATS_JOB。
Oracle是否自动收集统计信息涉及到一个重要参数STATISTICS_LEVEL,需要注意:
- STATISTICS_LEVEL=TYPICAL/ALL,Oracle自动检测统计信息过期并收集
- STATISTICS_LEVEL=BASIC,Oracle不再自动收集统计信息
- 默认设置为TYPICAL,设置ALL收集所有相关的统计信息
设置statistics_level参数后,当object一下状态时,GATHER_STATS_JOB会自动收集统计信息:
默认,GATHER_STATS_JOB定制每天晚上22点至凌晨6点运行,周末2天全天运行。stop_on_window_close属性控制JOB的窗口运行状态,默认关闭运行窗口,JOB停止收集统计信息。
常用命令:
---------------------------------------------------------------------------------------------------
查看GATHER_STATS_JOB
SQL> SELECT owner, job_name, enabled, state FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB';
停止GATHER_STATS_JOB
SQL>EXEC DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB');
打开GATHER_STATS_JOB
SQL>EXEC DBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB');
---------------------------------------------------------------------------------------------------
5. 手工收集统计信息
一般来说,对于温和增长的数据变化,Oracle的自动收集统计信息功能足以满足需要。什么时候需要收手动集统计信息呢?当出现以下情况时,都需要重新收集statistics:
简单地说就是当数据发生明显改变时,不建议使用automagic statistics gathering,需要根据业务压力和需要手工进行统计信息的更新。
常用命令。使用DBMS_STATS包,实现各个Object统计信息的update、delete、export、import。
| Procedure | Collects Statistics |
| GATHER_INDEX_STATS | Index statistics |
| GATHER_TABLE_STATS | Table, column, and index statistics |
| GATHER_SCHEMA_STATS | Statistics for all objects in a schema |
| GATHER_DICTIONARY_STATS | Statistics for all dictionary objects |
| GATHER_DATABASE_STATS | Statistics for all objects in a database |
6. USER_TAB_MODIFICATIONS
USER_TAB_MODIFICATIONS表记录了数据库里被监控表里的DML操作次数,记录更新不够及时,可以使用Oracle提供的存储过程进行刷新。
---------------------------------------------------------------------------------------------------
查看table的DML操作次数
sql>select table_name,inserts,updates,deletes from user_tab_modifications;
刷新user_tab_modifications的统计信息
sql>exec dbms_stats.flush_database_monitoring_info;
清空user_tab_modifications里表zhangp的统计信息
sql>analyze table zhangp compute statistics;
---------------------------------------------------------------------------------------------------
这个之前不太了解,也是今天才从别人的blog上学习到的。对于性能调优或是测试来说,也可以作为监控热表的一个途径。
Oracle10g的统计信息功能并不是很稳定。我们的生产数据库从9i升级到10g后,就是没有充分考虑到gather statistics的功能和策略上的变化,导致OLTP系统晚上做报表分析时速度巨慢,sql语句的执行计划异常,影响到正常的数据分析。所以对于采用Oracle10g版本的数据库用户,无论采用哪种方式统计信息时一定要慎重测试。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25148509/viewspace-715583/ ,如需转载,请注明出处,否则将追究法律责任。