ORACLE 系统统计数据和CPU开销模型

原创 转载请注明出处

学习感悟

       10G以后默认都是使用CPU开销模型,除非在SQL语句级别指定NO_CPU_COSTING,也就是说除了IO_COST以外,还需要计算CPU_COST,而系统的统计数据就是影响COST计算的一些基数。
系统统计信息一般是存放在aux_stats$里面如下:
 select * FROM AUX_STATS$;
 SNAME                          PNAME                               PVAL1 PVAL2
------------------------------ ------------------------------ ---------- --------------------------------------------------------------------------------
SYSSTATS_INFO                  STATUS                                    COMPLETED
SYSSTATS_INFO                  DSTART                                    01-06-2010 23:25
SYSSTATS_INFO                  DSTOP                                     01-06-2010 23:55
SYSSTATS_INFO                  FLAGS                                   0
SYSSTATS_MAIN                  CPUSPEEDNW                        864.957
SYSSTATS_MAIN                  IOSEEKTIM                          19.887
SYSSTATS_MAIN                  IOTFRSPEED                      10580.471
SYSSTATS_MAIN                  SREADTIM                            0.512
SYSSTATS_MAIN                  MREADTIM                            0.606
SYSSTATS_MAIN                  CPUSPEED                             1011
SYSSTATS_MAIN                  MBRC                                   11
SYSSTATS_MAIN                  MAXTHR                                   
SYSSTATS_MAIN                  SLAVETHR                                 
SYSSTATS_INFO表示是一些基本信息。

SYSSTATS_MAIN                  CPUSPEEDNW                        864.957
SYSSTATS_MAIN                  IOSEEKTIM                          19.887
SYSSTATS_MAIN                  IOTFRSPEED                      10580.471

表示的是非工作量统计信息(noworkload statistics)

SYSSTATS_MAIN                  SREADTIM                            0.512
SYSSTATS_MAIN                  MREADTIM                            0.606
SYSSTATS_MAIN                  CPUSPEED                             1011
SYSSTATS_MAIN                  MBRC                                   11
SYSSTATS_MAIN                  MAXTHR                                   
SYSSTATS_MAIN                  SLAVETHR                                 
表示的是工作量统计信息(workload statistics)

所谓noworkload statistics和workload statistics简单的说就是前者是模拟负载得出的信息,后者是在应用系统真正负载的高的时候得到的真实信息
收集noworkload statistics使用命令,(其实在10G默认情况下有一组noworkload statistics信息,但是我看了好像很不准确,所以自己收集了下)。
execute dbms_stats.gather_system_stats(gathering_mode => 'noworkload');
收集workload statistics使用命令如下
1、启动
execute dbms_stats.gather_system_stats(gathering_mode => 'start');
2、经过一段时间的负载
3、停止
execute dbms_stats.gather_system_stats(gathering_mode => 'stop');
通过计算差值会得出workload statistics
接下来是说明这些数据到底有何用
在noworkload statistics下
多块读的IO_COST=blocks/1.6765*db_file_multiblock_read_count^0.6581
而cost=io_cost+cpu_cost/cpuspeednw*(ioseektim+db_block_size/iotfrspeed)*1000
而在workload statistic下
多块读的IO_COST=blocks/mbrc*mreadtim/sreadtim
而COST=IO_COST+cpu_cost/cpuspeed*sreadtim*1000
可以看到在noworkload statistics和workload statistic下计算COST的公式是不一样的,所以系统统计信息实际会影响计算COST的值。
当然最好收集workload statistic,如果不收集起码要更新noworkload statistics,让系统统计信息更加准确。
这里所有的=其实为约等于,所有公式来源于ORACLE性能诊断艺术。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7728585/viewspace-624917/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7728585/viewspace-624917/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值