select * from sys.aux_stats$;
2、统计信息项
--cpuspeedNW 表示非负载情况下的cpu速度,在系统启动时自动搜集
--ioseektim IO查找时间,以毫秒表示;缺省为10ms,非负载模式或可以手动设置。
--iotfrspeed IO传输速度,
表示Oracle数据库单次读数据的传输速率,单位为bytes/ms,在系统启动时自动收集;默认为4096 bytes/ms
--cpuspeed 表示负载情况下的cpu速度,以平均每秒可提供的cpu周期表示
--maxthr 最大IO吞吐量,单位为bytes/s
--slavethr 从属IO吞吐量,表示并行进程时,从属进程的IO吞吐量,单位为bytes/s
--sreadtim 单块读时间(如索引读取),表示随机读一个Oracle数据块的时间,以ms计算
--mreadtim 多块读时间(主要是指全表扫描),表示连续读取多个Oracle数据库的平均时间,以ms计算
--mbrc 多块读计数,表示一次多块读的读取的Oracle数据块数
3、收集和删除统计信息
dbms_stats.gather_system_stats 和 dbms_stats.delete_system_stats
exec DBMS_STATS.GATHER_SYSTEM_STATS(GATHERING_MODE => 'start');
exec DBMS_STATS.GATHER_SYSTEM_STATS(GATHERING_MODE => 'stop');
或者
exec dbms_stats.gather_system_stats(gathering_mode => 'INTERVAL',interval => 10);
4、大话+实验
们知道在CBO环境中,Oracle依赖于对象的统计估算成本,以选择正确的SQL执行计划。从Oracle9i开始CBO计算成本(cost)的算法有了变化。Oracle9i以前更多考虑IO(多块读与单块读)成本;9i以后,强化了cpu速度对成本估算的影响。
Oracle提供了dbms_stats.gather_system_stats来收集系统统计信息。系统统计信息让优化器考虑服务器的IO与CPU性能及其利用率,作为计算成本的依据;为每一个可选的执行计划估算IO与CPU成本。因而对于CBO来说,获得准确的系统统计信息对于正确估计成本是非常重要的。
不同压力与不同类型的应用,甚至同一系统的不同时间,cpu与io的能力都是不一样的。比如ZLHIS在8点到11点的压力,明显于大于下午的压力;这时候包括多块读时间、单块读时间的效率都会有差异。理想的情况是,收集不同系统负载下的系统统计信息,存放到特定的统计信息表中,然后在负载发生变化的时候导入到Oracle中,但在类似ZLHIS这种要求高可用的系统,频繁的变更系统统计信息不太现实。大多数情况下,只需要采集系统高峰时段或典型时段的系统统计信息即可。
收集负载情况下的统计信息有两种方式,一种是手工指定收集时段的开始与结束:
--启动收集
exec dbms_stats.gather_system_stats(gathering_mode => 'START');
.............
--等待系统运行一段时间,等待时间长短根据情况做调整
.............
--停止收集
exec dbms_stats.gather_system_stats(gathering_mode => 'STOP');
另一种方式就是使用间隔模式,指定一个间隔时段,Oracle自动开始与结束信息收集:
--以未来10分钟的系统负载,收集系统统计信息。
exec dbms_stats.gather_system_stats(gathering_mode => 'INTERVAL',interval => 10);
需要说明的是收集系统统计信息,并不影响已经缓存的sq