Chinaunix首页 | 论坛 | 博客
  • 博客访问: 539949
  • 博文数量: 128
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 1345
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-22 21:43
文章分类

全部博文(128)

文章存档

2009年(30)

2008年(98)

我的朋友

分类: Oracle

2008-04-19 20:41:54

execute dbms_random.seed(0);

create table t1
pctfree 99
pctused 1
as
select
    /*+ ordered use_nl(v2) */
    rownum                    id,
    trunc(100 * dbms_random.normal)        val,
    rpad('x',100)                padding
from
    all_objects
where
    rownum <= 10000
;

● pctfree 99 :基本上每个数据块1行数据

ALTER SESSION SET db_file_multiblock_read_count = 8;

select MAX(val) from t1;

Description                         对象所有者     对象名称        耗费    基数    字节    IO耗费
------------------------------------------------------------------------------------------------------------
SELECT STATEMENT, GOAL = CHOOSE                        1227    1    3    1227    
 SORT AGGREGATE                                        1    3        
  TABLE ACCESS FULL            STUDENT        T1        1227    8073    24219    1227    

ALTER SESSION SET db_file_multiblock_read_count = 16;

select MAX(val) from t1;
Description                         对象所有者     对象名称        耗费    基数    字节    IO耗费
------------------------------------------------------------------------------------------------------------
SELECT STATEMENT, GOAL = CHOOSE                        778    1    3    778    
 SORT AGGREGATE                                        1    3        
  TABLE ACCESS FULL            STUDENT        T1        778    8073    24219    778    

ALTER SESSION SET db_file_multiblock_read_count = 32;

select MAX(val) from t1;
Description                         对象所有者     对象名称        耗费    基数    字节    IO耗费
------------------------------------------------------------------------------------------------------------
SELECT STATEMENT, GOAL = CHOOSE                        494    1    3    494    
 SORT AGGREGATE                                        1    3        
  TABLE ACCESS FULL            STUDENT        T1        494    8073    24219    494    


设置表的块状态,欺骗优化器
exec dbms_stats.set_table_stats('STUDENT', 'T1', numblks => 128000000);

Description                         对象所有者     对象名称        耗费        基数    字节    IO耗费
------------------------------------------------------------------------------------------------------------
SELECT STATEMENT, GOAL = CHOOSE                        7800650    1    3    7800650    
 SORT AGGREGATE                                            1    3        
  TABLE ACCESS FULL            STUDENT        T1        7800650    8073    24219    7800650   

SQL> analyze table sunwg compute statistics;

Table analyzed

SQL> select blocks from user_tables where table_name='SUNWG';

BLOCKS

----------

738

db_file_multiblock_read_count

COST

ADJUSTED DBF_MBRC

4

179

738/179 = 4.12

8

114

738/114 = 6.47

16

73

738/73 = 10.1

ADJUSTED DBF_MBRC是个很重要的参数,其实表扫描的成本也就是高水位标记下的块的数量除以ADJUSTED DBF_MBRC的结果。然后上面表中的ADJUSTED DBF_MBRC仅仅是个近似的值,因为并没有加上位图块的数量。因为本地管理的表空间是用一些位图来表示块的可用性的,所以如果算上位图块的话,ADJUSTED DBF_MBRC应该会大一些。

CBO中增加了对CPUCOST的统计,这个cpu costing在全表扫描的时候对COST值的影响会很大,所以在这里把cpu costing给去掉了。

SQL> analyze table sunwg compute statistics;

Table analyzed

SQL> select blocks from user_tables where table_name='SUNWG';

BLOCKS

----------

738

db_file_multiblock_read_count

COST

ADJUSTED DBF_MBRC

4

179

738/179 = 4.12

8

114

738/114 = 6.47

16

73

738/73 = 10.1

ADJUSTED DBF_MBRC是个很重要的参数,其实表扫描的成本也就是高水位标记下的块的数量除以ADJUSTED DBF_MBRC的结果。然后上面表中的ADJUSTED DBF_MBRC仅仅是个近似的值,因为并没有加上位图块的数量。因为本地管理的表空间是用一些位图来表示块的可用性的,所以如果算上位图块的话,ADJUSTED DBF_MBRC应该会大一些。

/*+no_cpu_costing*/,这个提示的目的是去掉CPUCOST信息
10GCBO中增加了对CPUCOST的统计,这个cpu costing在全表扫描的时候对COST值的影响会很大,所以在这里把cpu costing给去掉了

阅读(1106) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:shell 登录环境

给主人留下些什么吧!~~