首页 > 数据库 > Oracle > 正文

使用 db_file_multiblock_read_count测试Oracle在不同系统中的IO能

2024-08-29 13:30:24
字体:
来源:转载
供稿:网友

link:

http://www.eygle.com/faq/db_file_multiblock_read_count&oracleio.htm

 

初始化参数db_file_multiblock_read_count 影响oracle在执行全表扫描时一次读取的block的数量.

db_file_multiblock_read_count的设置要受os最大io能力影响,也就是说,如果 你系统的硬件io能力有限,
即使设置再大的db_file_multiblock_read_count也是没有用 的。

理论上,最大db_file_multiblock_read_count和系统io能力应该有如下关系:


      max(db_file_multiblock_read_count) = maxosiosize/db_block_size

当然这个max(db_file_multiblock_read_count)还要受oracle的限制,
目前oracle所支持的最大db_file_multiblock_read_count 值为128.

我们可以通过db_file_multiblock_read_count来测试oracle在不同系统下,单次io最大所能读取得数据量:

 

$ sqlplus "/ as sysdba"

sql*plus: release 10.1.0.2.0 - production on wed aug 11 23:43:52 2004

copyright (c) 1982, 2004, oracle.  all rights reserved.


connected to:
oracle database 10g enterprise edition release 10.1.0.2.0 - 64bit production
with the partitioning, olap and data mining options

sys as sysdba on 11-aug-04 >show parameter read_count

name                                 type        value
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count        integer     16

sys as sysdba on 11-aug-04 >create tablespace dfmbrc
  2  datafile '/opt/oracle/oradata/eygle/dfmbrc.dbf'
  3  size 20m extent management local uniform size 2m;

tablespace created.

sys as sysdba on 11-aug-04 >create table t tablespace dfmbrc as select * from dba_objects;

table created.

sys as sysdba on 11-aug-04 >insert into t select * from t;

9149 rows created.

sys as sysdba on 11-aug-04 >/

18298 rows created.

sys as sysdba on 11-aug-04 >/

36596 rows created.

sys as sysdba on 11-aug-04 >commit;

commit complete.

sys as sysdba on 11-aug-04 >alter session set db_file_multiblock_read_count=1000;

session altered.

sys as sysdba on 12-aug-04 >show parameter read_count

name                           type        value
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count        integer        128


sys as sysdba on 11-aug-04 >alter session set events '10046 trace name context forever,level 12';

session altered.

sys as sysdba on 11-aug-04 >alter system flush buffer_cache;

system altered.

sys as sysdba on 11-aug-04 >select count(*) from t;

  count(*)
----------
     73192

sys as sysdba on 12-aug-04 >@gettrace

trace_file_name
--------------------------------------------------------------------------------
/opt/oracle/soft/eygle_ora_24432.trc


$ cat /opt/oracle/soft/eygle_ora_24432.trc|grep sca
wait #26: nam='db file scattered read' ela= 18267 p1=10 p2=10 p3=128
wait #26: nam='db file scattered read' ela= 8836 p1=10 p2=138 p3=127
wait #26: nam='db file scattered read' ela= 8923 p1=10 p2=265 p3=128
wait #26: nam='db file scattered read' ela= 8853 p1=10 p2=393 p3=128
wait #26: nam='db file scattered read' ela= 8985 p1=10 p2=521 p3=128
wait #26: nam='db file scattered read' ela= 8997 p1=10 p2=649 p3=128
wait #26: nam='db file scattered read' ela= 9096 p1=10 p2=777 p3=128
wait #26: nam='db file scattered read' ela= 583 p1=10 p2=905 p3=12
$


我们可以看到,在以上测试平台中,oracle最多每次io能够读取128个block,由于block_size为8k,也就是每次最多读取了1m数据.
系统平台为:

$ uname -a
sunos billing 5.8 generic_108528-23 sun4u sparc sunw,ultra-4



当然具体的,oracle一次io能读取多少block还和很多因素有关,比如存储是否连续,磁盘是否经过条带等方式划分,并且oracle的
单次io读取不能跨越extent边界等.某些平台还和操作系统的参数设置有关.

大家可以测试一下不同的平台,oracle的单次io最多可以读取的block数量.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表