分区表首次执行时的疑问(SGA中没有记录)

[复制链接]
查看11 | 回复5 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
各位
 我在测试分区表性能时候
 特意将数据库shutdown  这样保证sga区中没有共享的记录
 因为我不能保证是否执行过类似sql和buffer中是否有记录
huang1是一个分区表  分区关键字是order_id
0~1000 1000~2000 2000~3000.........
SQL> select * from huang1 where ORDER_ID=2001;
no rows selected

Execution Plan
----------------------------------------------------------
0SELECT STATEMENT Optimizer=ALL_ROWS (Cost=1 Card=1 Bytes=157

)
10 TABLE ACCESS (BY GLOBAL INDEX ROWID) OF 'HUANG1' (TABLE) (

Cost=1 Card=1 Bytes=157)
21 INDEX (UNIQUE SCAN) OF 'SYS_C0013634' (INDEX (UNIQUE)) (

Cost=1 Card=1)


Statistics
----------------------------------------------------------
1053recursive calls

0db block gets
152consistent gets

2physical reads

0redo size
3201bytes sent via SQL*Net to client
376bytes received via SQL*Net from client

1SQL*Net roundtrips to/from client

0sorts (memory)

0sorts (disk)

0rows processed
SQL>

可以看到
1053recursive calls
152consistent gets
2physical reads
都不是很理想
因为相对一张结构一样的普通表的首次执行来说 这个值非常大
对普通表操作结果是
1recursive calls
3 consistent gets
0 physical reads
当然  再次对分区表操作后 结果是
0recursive calls
2 consistent gets
0 physical reads
我的疑问是:
1)
性能应该是比普通表高了,这个可以看出
但比较担心的是在是首次执行时候是否将非常慢,并且,如果数据库量比较大,那下次查询,buffer中的记录被替换了,那是否还会产生很大的 consistent gets physical reads?

2)
在同一分区范围内查找
比如
select * from huang1 where ORDER_ID=2003;
这个时候consistent gets physical reads不会很大,我比较奇怪,这个时候buffer中应该没有相关记录,为什么这个时候就会很小了呢?
3)
如果我这个时候的条件变成其他分区的
比如
select * from huang1 where ORDER_ID=4003;
这个可以看到
1053recursive calls
152consistent gets
2physical reads
又变成了很大的数值  1053recursive calls
为什么这个时候不利用sga的share pool了呢?产生了这么多内部递归
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
你这个索引是全局的吧,改为local索引去测试测试
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
最初由 Toms_zhang 发布
[B]你这个索引是全局的吧,改为local索引去测试测试 [/B]

这里的order_id是表的primary key
所以没建额外的index
但现在无法在这个字段上建立local索引了
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
最初由 oraclinux 发布
[B]
这里的order_id是表的primary key
所以没建额外的index
但现在无法在这个字段上建立local索引了 [/B]

将这个主键对应的索引删除,modify 一下该主键,采用 using index的写法创建local 索引
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
第一次运行的统计数据包括对对象的解析的消耗吧
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
我是否可以这样认为对不同的分区进行查询
本来在普通表中可以被共享的 sql在这里首次执行的时候也会有相当大的recursive calls
不知道对sga中的data buffer中的内容是否可以共享
不知道大家是否有这个方面的深入点的解释文档
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行