与datafile相关的表和视图

dba_data_files:
file_name                 数据文件名及路径
file_id                      数据文件标识
tablespace_name     数据文件对应的表空间名称
bytes                       数据文件大小
bocks                      数据文件大小对应的数据库块数
relative_fno             Tablespace-relative file number  =file_id
autoextensible          数据库文件是否可以自动扩展
maxbytes      
maxblocks               该文件最大可以扩展的字节数,及数据块数。
user_bytes
user_blocks            表示用户所能使用的数据文件大小,通过等于 datafile size-LMT/DMT所使用的空间。
#关于自动扩展属性
alter tablespace ...
datafile '...' size ...
autoextent on 
next ...
maxsize ...

#LML(local management tablespace)
alter tablespace ...
datafile '...' size ...
extent management local autoallocate/uniform size ...;

#DML(dictionary management tablespace)
create tablespace ...
datafile '...' size ...
extent management dictionary
blocksize ...
default storage (initial
                        next
                        minextents
                        maxextents
                        pctincrease     )

v$datafile:描述了数据文件的同步信息。

dba_free_space:
bytes,blocks             表示该表空间空闲空间大小及块数

v$filestat:
phyrds,phywrts         表示物理磁盘读、写的数据库
作用见:http://blog.csdn.net/lunar2000/archive/2004/08/02/58382.aspx
#重点:
如果是全表扫描,那么区间的尺寸大小就有可能导致性能问题。因为全表扫描时,Oracle会一次读取多个Blocks。每次读取的块数将受初始化参数DB_FILE_MULTIBLOCK_READ_COUNT和操作系统的I/O缓冲区大小的限制。比如说,如果Oracle Block的大小是4KB,操作系统I/O缓冲区大小是64KB,那么在全表扫描时每次最多可以读取16各块(Oracle Blocks),所以此时将DB_FILE_MULTIBLOCK_READ_COUNT的值设置为超过16也改变不了全表扫描的性能了。

查询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缓冲区大小的整数倍


user_extents:

user_segments:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值