oracle 11.2.0.3全表扫描COST计算(工作量模式)

本文详细阐述了SQL性能优化的策略,包括使用drop和create命令操作表,收集统计信息,调整系统参数,并通过解释计划获取CPU成本。通过实例演示了如何计算SQL执行的成本,并分析了不同参数设置对成本的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

droptable testpurge;

 

createtable testasselect *from dba_objects;

 

--搜集统计信息,不搜集直方图信息

BEGIN

DBMS_STATS.GATHER_TABLE_STATS(ownname =>'SCOTT',

tabname => 'TEST',

estimate_percent => 100,

method_opt => 'for all columns size 1',

degree =>DBMS_STATS.AUTO_DEGREE,

cascade=>TRUE

);

END;

/

select owner,blocksfrom dba_tableswhere owner='SCOTT'and table_name='TEST';

begin

   dbms_stats.set_system_stats('CPUSPEED',2500);

   dbms_stats.set_system_stats('SREADTIM',5);

   dbms_stats.set_system_stats('MREADTIM',30);

   dbms_stats.set_system_stats('MBRC',12);

end;

/

利用explainplan得到CPU_COST---这里等于 72735764

explainplan for select count(*) from test;

selectcpu_cost from plan_table;

 

成本计算公式如下:

Cost= (
       #SRds * sreadtim +
       #MRds * mreadtim +
       CPUCycles / cpuspeed /1000
       ) / sreadtime
       
#SRds - number of single block reads
#MRds - number of multi block reads
#CPUCyles - number of CPU cycles

sreadtim- single block read time
mreadtim - multi block read time
cpuspeed - CPU cycles per second

Cost = (
       #SRds * sreadtim+                           ---SRds=0
       #MRds * mreadtim+                         ---MRds=BLOCKS/MBCR=1105/12, mreadtim=30
       CPUCycles / cpuspeed /1000        ---CPUCycles=PLAN_TABLE.CPU_COST,cpuspeed=2500
       ) / sreadtime

注意这里的#mrds=BLOCKS/MBCR=1105/12

 

select ceil(1105/12*30/5)+ceil(19215491/2500/5/1000)+1from dual;

 

Select count(*) from test;

和执行计划得到的COST值一致

修改db_file_multiblock_read_count,看看COST值是否有改变,可以发现, 11.2.0.3在工作量模式下db_file_multiblock_read_count的修改不会影响COST的值,这个和非工作量模式恰恰相反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值