|
|
最初由 4pal 发布
[B]
我想,只有当分配extent的时候才影响性能。读取的时候,应该没又影响 [/B]
我对这个问题的理解是这样的:
对于读表来讲,按biti兄的说法来讲,一次IO最大读取的数据量不可能超过操作系统的能力。在实际的表查询过程中,一个查询语句要获得的数据存放的位置,有可能是在一个块内,有可能在一个段里,有可能在多个分区里,oracle是不可能预测到的。那么平均起来,我猜想一般情况下的读表动作,可能是东取一点西找一点数据的。这种情况下表的数据在硬盘上是否连续存放,确实意义不大。
在分配extent的时候,oracle则需要寻找哪一个extent符合要求的大小。如果碎片大小不一,则这个寻找过程可能就很费时。但如果表空间里的碎片大小是一样的,而且又都符合表的extent的大小呢?就象我做的测试那样?我想这个时候的分配extent也不会太影响性能。
从另一个角度来理解Feng兄的解释,也考察一下我做的测试时oracle分配的extent的顺序,虽然说没有什么规律,但还是可以看到,oracle是先分配已有的碎片,而不是在一个最大的自由空间里再开一块出来,这是一;另一方面,分配的extent的起始块号也是从小到大的,只有快到了碎片的末尾了,才又回过头来再分配前面的碎片。当然,这只是很短时间内连续的向一个表里插入大量数据的结果,如果是并发访问多个表里插入数据的情况,可能又会不一样的。我只是觉得,Feng兄提到的,从物理的角度来理解oracle的分配,可能还是可以这样解释的。 |
|