日期:2014-05-16  浏览次数:20430 次

OracleDBA之路Storage Structure(三)

数据库的快
I/O的最小单位,由一个或多个操作系统块组成,在创建表空间的时候设置,DB_BLOCK_SIZE指定了缺省的块大小
DB_CACKE_SIZE 指定了标准快的 DEFAULT buffer cache 的daxiao
Minimun size = one granule (4M or 16M)
Default value = 48M
DB_BLOCK_SIZE 初始化参数用于指定数据库的标准块大小。该块大小用于SYSTEM表空间,以及任何临时表空间。除非进行指定,否则,标准块大小还用作表空间的缺省块大小Oracle 最多支持四种附加的非标准块大小。
应该将最常用的块大小设置为标准块大小。在很多情况下,这是唯一需要指定的块大小。通常,将DB_BLOCK_SIZE 设置为 4 KB 或8 KB。如果未指定,则使用缺省数据块大小缺省数据块大小取决于所用的操作系统,并且通常是合适的块大小。
除非重新创建数据库,否则在创建数据库后将不能更改块大小。
DB_CACHE_SIZE 初始化参数替代以前版本中使用的DB_BLOCK_BUFFERS 初始化参数。
DB_CACHE_SIZE 参数用于指定标准块大小缓冲区的高速缓存大小,其中的标准块大小是由 DB_BLOCK_SIZE 指定的。
注:granule是一个连续虚拟内存分配单位。granule的大小取决于估算的SGA 的总大小,这个总大小是根据 SGA_MAX_SIZE 的参数值计算的:如果估算的SGA 的大小< 128 MB,则为 4 MB;否则为16 MB。
非标准块大小
– DB_2K_CACHE_SIZE 用于 2 KB 块
– DB_4K_CACHE_SIZE 用于 4 KB 块
– DB_8K_CACHE_SIZE 用于 8 KB 块----缺省标准块大小
– DB_16K_CACHE_SIZE 用于 16 KB 块
– DB_32K_CACHE_SIZE 用于 32 KB 块
如果 nK 是标准块大小,则不允许使用DB_nK_CACHE_SIZE
数据库缓冲区高速缓存初始化参数决定了SGA 数据库缓冲区高速缓存组件的大小。可以使用这些参数为数据库使用的各种块大小指定高速缓存大小。如果要在数据库中使用多种块大小,则必须设置 DB_CACHE_SIZE 和至少一个 DB_nK_CACHE_SIZE 参数。每个参数为相应的块大小指定了缓冲区高速缓存大小。DB_nK_CACHE_SIZE 参数的缺省值为零。
如果存在块大小为n KB 的联机表空间,则不要将此参数设置为零。平台特定的块大小具有一些限制。例如,如果平台上的最大块大小小于32 KB,则不能设置 DB_32K_CACHE_SIZE。此外,如果最小块大小大于2 KB,则不能设置DB_2K_CACHE_SIZE。

创建非标准块大小的表空间
CREATE TABLESPACE tbs_1 DATAFILE 'tbs_1.dbf' SIZE 10M BLOCKSIZE 4K;
查看系统中各个表空间的块大小
select tablespace_name,block_size from dba_tablespaces;
不能为临时表指定非标准块大小
Oracle 数据块包含:
? 块头:块头包含数据块地址、表目录、行目录和事务处理对块中的行进行更改时所的事务位置。块头从上往下增长。
? 数据空间:行数据从下往上插入到块中。
? 空闲空间:块内空闲空间位于块的中部。因此,必要时块头和行数据空间可以增长最初,块内的空闲空间是连续的。但是,删除和更新会使块内的空闲空间产生碎片Oracle 服务器可以在需要时合并块内的空闲空间。
块空间使用参数
INITRANS,MAXTRANS,PCTFREE,PCTUSED
INITRANS 和 MAXTRANS:指定初始的和最大的事务位置数,这些事务位置在索引块或者数据块内创建。事务位置用来存储在某一时间点对块进行更改的事务处理的有关信息。一个事务处理只占用一个事务位置,即使它正在更改多行或者多个索引条目。

INITRANS:保证最低级别的并发性。对于数据segment和索引segment,INITRANS 的缺省值分别为1 和2,以保证最低级别的并发性。例如,如果INITRANS 设为3,则保证至少有 3 个事务处理可以同时对块进行更改。如果需要,也可以从块空闲空间内分配更多事务位置,以允许更多的事务处理并发修改块内的行。

MAXTRANS:缺省值为 255,它用于设置可更改数据块或者索引块的并发事务处理数的限制。进行设置后,该值将限制事务位置对空间的使用,从而保证块内有足够的空间供行或者索引数据使用。

PCTFREE:对于数据segment而言,此参数用于指定每个数据块中保留空间所占的百分比,保留空间用于因更新块内的行而导致的增长。PCTFREE的缺省值为10%。

PCTUSED:对于数据segment而言,此参数表示Oracle 服务器试图为表内每个数据块所保持的已用空间的最低百分比。如果一个块的已用空间低于 PCTUSED,则将该块放回到空闲列表中。segment的空闲列表是容纳将来所插入内容的候选块的列表。缺省情况下,每个segment在创建时都有一个空闲列表。通过设置存储子句的FREELISTS 参数,可以创建有更多空闲列表的segment。PCTUSED 的缺省值为 40%。

PCTFREE 和 PCTUSED都按可用数据空间百分比来计算,可用数据空间是从整个块大小减去块头空间后剩余的块空间。