Oracle通过两种方式从表中获取数据:

·          通过ROWID(通常使用索引扫描时)

·          通过全表扫描

如果通过ROWID读取数据,表中的区间数就不是读性能的一个因素(如果使用并行查询,那么一个表中有较多的区间的数量可以明显提高I/O的性能),Oracle将通过ROWID直接找到需要的行,并获取相应数据。

如果是全表扫描,那么区间的尺寸大小就有可能导致性能问题。因为全表扫描时,Oracle会一次读取多个Blocks。每次读取的块数将受初始化参数DB_FILE_MULTIBLOCK_READ_COUNT和操作系统的I/O缓冲区大小的限制。比如说,如果Oracle Block的大小是4KB,操作系统I/O缓冲区大小是64KB,那么在全表扫描时每次最多可以读取16各块(Oracle Blocks),所以此时将DB_FILE_MULTIBLOCK_READ_COUNT的值设置为超过16也改变不了全表扫描的性能了。

通常,设置DB_FILE_MULTIBLOCK_READ_COUNT参数是如下考虑的:

(1)         使用一个单独的数据文件创建一个新的表空间

(2)         在该表空间中创建一个单独的未索引的表

(3)         查询V$FILESTAT以验证该测试的初始统计值

(4)         在表上执行全表扫描

(5)         查询V$FILESTAT以确定该测试的终止统计值,并从中减去开始统计值。将PhyBlkRds值除以PhyRds以确定有效的多块读计数。

(6)         删除这个用于测试的表空间

C:\>sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on 星期六 6月 28 10:11:22 2003

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

已连接到空闲例程。

SQL> startup

ORACLE 例程已经启动。

Total System Global Area   93395628 bytes

Fixed Size                   453292 bytes

Variable Size              67108864 bytes

Database Buffers           25165824 bytes

Redo Buffers                 667648 bytes

数据库装载完毕。

数据库已经打开。

SQL> show parameter db_block_size;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ---------------------

db_block_size                        integer     8192

SQL> show parameter DB_FILE_MULTIBLOCK_READ_COUNT;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ----------

db_file_multiblock_read_count        integer     16

SQL>

使用一个单独的数据文件创建一个新的表空间:

SQL> create tablespace lunar

2  datafile 'd:\lunar.dbf' size 10m

3  default storage(initial 1m next 1m pctincrease 0);

表空间已创建。

在该表空间中创建一个单独的未索引的表:

SQL> create table lunar

2  tablespace lunar

3  as select * from dba_objects;

表已创建。

SQL> select relative_fno from dba_data_files

2  where tablespace_name='LUNAR';

RELATIVE_FNO

------------

15

查询V$FILESTAT以验证该测试的初始统计值:

SQL> select phyrds,phyblkrd from v$filestat

2  where file#=15;

PHYRDS   PHYBLKRD

---------- ----------

0          0

在表上执行全表扫描:

SQL> select count(*) from lunar;

COUNT(*)

----------

27547

查询V$FILESTAT以确定该测试的终止统计值:

SQL> select phyrds,phyblkrd from v$filestat

2   where file#=15;

PHYRDS   PHYBLKRD

---------- ----------

24        376

SQL>

PHYRDS 和 PHYBLKRD 的初始统计的值都是0;

PHYRDS 和 PHYBLKRD 的终止统计的值分别是24和 376;

PHYRDS 的终止统计的值 - PHYRDS 的初始统计的值 =24;

PHYBLKRD 的终止统计的值 - PHYBLKRD 的初始统计的值 =376;

PHYBLKRD 的差值 / PHYRDS 的差值 = 15.67

所以,有效的多块读计数是16

需要注意的是,如果不是用新的表空间测试,那么测试得到第3步和第5步的差值后,在会话级改变DB_FILE_MULTIBLOCK_READ_COUNT参数,然后再次得到第3步和第5步的差值,并重复测过程。

记住,不要将DB_FILE_MULTIBLOCK_READ_COUNT参数设置的比计算的值高。

设置区间尺寸大小的考虑思路应该是合理的利用Oracle的能力以便在全表扫描时执行多块存取,同时读操作又是不能跨区间的。举个例子,假设操作系统I/O缓冲区大小是64KB,考察读取一个640KB大小的表,如果设置为每个区间64KB,一共10个区间,如果执行全表扫描,则Oracle需要10次读操作(相当于一次读一个区间);如果设置为一个640KB的区间,则Oracle还是需要10次读操作(因为操作系统I/O缓冲区大小是64KB),可见压缩区间并不能提高性能;如果设置为每个区间80KB,一共8个区间,则每个区间Oracle需要读两次,第一次读64KB,第二次读这个区间剩余的16KB(读操作不能跨区间),所以总共需要16次读操作(相当于一次读一个区间)。区间尺寸的设置对性能的影响是显而易见的。

综上,总结起来设置区间大小时需要考虑下面的问题:

·          创建明显大于或者等于操作系统I/O缓冲区大小的区间(最好是操作系统I/O缓冲区大小的整数倍)。这样,如果区间非常大,即使区间大小不是操作系统I/O缓冲区大小的整倍数,也只需要很少的附加读操作(如果上面的640KB和80KB的差异)。

·          设置DB_FILE_MULTIBLOCK_READ_COUNT以充分利用操作系统I/O缓冲区的大小。应考虑DB_FILE_MULTIBLOCK_READ_COUNT <= 操作系统I/O缓冲区 / Oracle Block的大小,如果DB_FILE_MULTIBLOCK_READ_COUNT设置的太大,会使优化器认为全表扫描更有效而改变执行计划,然后实际情况并非如此。

·          如果必须创建小的区间,创建其大小是操作系统I/O缓冲区大小的整数倍

转载于:https://www.cnblogs.com/cav5lier/archive/2013/06/13/3134063.html

9i DB_FILE_MULTIBLOCK_READ_COUNT参数和extent大小的设置相关推荐

  1. mysql增加sort_buffer_MySQL数据库之MySQL中的sort_buffer_size参数大小的设置问题

    本文主要向大家介绍了MySQL数据库之MySQL中的sort_buffer_size参数大小的设置问题 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 看到sort_buffer ...

  2. Java 打印PDF文档 - 指定打印机、自定义纸张大小、设置打印参数、显示打印对话框等

    这篇文章介绍如何在Java应用程序中打印PDF文档以及进行一些打印设置,包括指定打印机.自定义纸张大小.设置打印参数.以及显示打印对话框等. 导入jar文件 本文所使用的PDF类库是Spire.PDF ...

  3. 标准logo大小尺寸设置标准是什么? logo大小参数详解。

    标准logo大小尺寸设置标准是什么?其实为了方便网络传播,logo早就有了一整套的标准尺寸大小规定了,目前最标准的logo有三种. 1.88*31 这是互联网上最普遍的LOGO规格. 2.120*60 ...

  4. oracle 10g db_file,oracle 10g的db_file_multiblock_read_count参数

    Oracle 10G下的参数db_file_multiblock_read_count参数,是代表oracle的多块读取一次的IO的block数量,数据库创建初期oracle会默认设置相应额db_fi ...

  5. mysql双一参数_MySQL 的双1设置-数据安全的关键参数(案例分享)

    mysql的"双1验证"指的是innodb_flush_log_at_trx_commit和sync_binlog两个参数设置,这两个是是控制MySQL 磁盘写入策略以及数据安全性 ...

  6. 关于Cocos2d-x节点和精灵节点的坐标、位置以及大小的设置

    1.cocos2d-X中的坐标(0,0),就是运行框的左下角位置,所以运行框看起来就是一个第一象限. 2.节点的锚点就是我们setPosition所设定的位置,默认锚点是在节点的中心,也就是setPo ...

  7. 服务器虚拟内存能否设置小,服务器虚拟内存大小的设置

    服务器虚拟内存大小的设置 内容精选 换一换 根据裸金属服务器的规格ID,查询规格的详细信息,比如规格名称.CPU核数.内存大小等.GET /v2.1/{project_id}/flavors/{fla ...

  8. Seaborn使用set_context函数调整绘图标签和线条的大小、设置不同的模式、例如notebook模式、PPT模式、海报模式等、set_context函数可以指定绘图上下文并自动调整标签和线条

    Seaborn使用set_context函数调整绘图标签和线条的大小.设置不同的模式.例如notebook模式.PPT模式.海报模式等.set_context函数可以指定绘图上下文并自动调整标签和线条 ...

  9. R语言ggplot2可视化设置数据点的大小、设置数据点的颜色、设置数据点边缘线条的厚度(point border thickness)实战

    R语言ggplot2可视化设置数据点的大小.设置数据点的颜色.设置数据点边缘线条的厚度(point border thickness)实战 目录

最新文章

  1. nginc+memcache
  2. 016_Spring中电子邮件
  3. 在Linux上安装nginx时遇到的问题,真的好坑啊!!!!
  4. aix升级openssh_AIX5.3如何安装openssh | 学步园
  5. jzoj4010-Philips and Calculator【搜索,dp】
  6. 运维祈求不宕机_[国庆特辑] 程序员应该求谁保佑才能保证不宕机?
  7. python画离散点_python画散点图
  8. webpack安装_初识webpack
  9. 由南非世界杯想到IDC
  10. matlab中min函数
  11. win7文件夹加密_小编还原win7系统文件夹加密码的步骤
  12. 运营之光2.0 我的互联网运营方法论与自白
  13. 【Note】微信小程序js使用农历(一行代码)
  14. 第13期微生物组-宏基因组分析(线上/线下同时开课,2021.11)
  15. Redis面试题从基础到进阶
  16. plt.pie()参数解释
  17. 史上最全教程没有之一,微信小程序使用云开发解决微信支付问题,我走了几天几夜的弯路啊
  18. 计算机组成原理mips描述,计算机组成原理与接口技术:基于MIPS架构/华中科技大学教学改革建设教材...
  19. unresolved external symbol __imp__timeGetTime@0
  20. GeoTrust通配符证书介绍

热门文章

  1. javascript foreach中获取数组下标/index
  2. signature=8eba57874a1690f9fdaff3572c7cef5f,基于EFI固件文件系统的平台安全策略研究与实现...
  3. iphone照片删掉又出现_两个月前删的IPhone手机照片还有救?很简单,三招帮你轻松恢复...
  4. java 多个类共用属性_java中读写Properties属性文件公用方法详解
  5. g++ linux 编译开栈_Linux下编写C++服务器(配置C++编译调试环境)
  6. arcgis 圈选获取图层下点位_ArcGIS小技巧——提取面要素的质心点
  7. 严格模式 华为_华为千元机虽然好,但是千万别乱选,这三款才是内行人的最爱...
  8. 二十四、TextCNN的原理和实现
  9. 5 种 非传统 的可视化图,也是用Python画的
  10. 万里挑一!北大AI女神每天必看的几个优质公众号