存储和关系支柱
Segments类型
存储条款优先级
1. 如果存储参数被改变,新的选项只适用于尚未分配的区段。
2. 某些参数不能在表空间级别指定。这些参数只能在段级别指定。
3.如果为表空间指定了最小区段大小,则此大小适用于将来为表空间中的段分配的所有区段。
Extent Alloc & Dealloc
区段是表空间内的Segment使用的一块空间。
当Segment为以下情况时,将分配范围:
- Created
- Extendend
- Altered
当Segment处于以下状态时,将解除分配范围:
- Dropped
- Altered
- Truncated
已使用和空闲区段
数据库块
- I/O的最小单位
- 由一个或多个操作系统块组成
- 在表空间创建时设置
- DB_BLOCK_SIZE是默认的块大小
多块大小支持
一个数据库可以用一个标准块大小和最多四个非标准块大小创建。
块大小可以是任意的2次幂值介于 2 KB 和 32 KB 之间。
标准块大小
在数据库创建时使用DB_BLOCK_SIZE参数设置;在不重新创建数据库的情况下不能更改
用于SYSTEM和TEMPORARY表空间DB_CACHE_SIZE
指定标准块大小的默认缓冲区缓存的大小:
- 最小大小= 1粒(4 MB或16 MB)
- 默认值= 48 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。
每个cache的最小大小为一个颗粒。
创建非标准块大小表空间
CREATE TABLESPACE tab_1
DATAFILE 'tbs_1.dbf'
SIZE 10M BLOCKSIZE 4K;
DESCRIBE dba_tablespaces
Name Null? Type
---------------------------------------------
TABLESPACE_NAME NOT NULL VARCHAR2(30)
BLOCK_SIZE NOT NULL NUMBER
...
多个块大小规则
一个分区对象的所有分区必须驻留在相同块大小的表空间中。
所有临时表空间,包括作为默认临时表空间的永久表空间表空间必须具有标准块大小。
索引组织的表溢出和脱行LOB段可以存储在一个块大小与基表不同的表空间中。
数据库块内容
块空间使用参数
- INITRANS和MAXTRANS:指定在索引或数据块中创建的初始和最大事务槽数。事务槽用于存储在某个时间点对块进行更改的事务的信息。一个交易只使用一个交易槽,即使它正在改变多个行或索引条目。
- INITRANS:保证最低级别的并发性。数据段默认为1,索引段默认为2,保证了最低并发级别。例如,如果设置为3,INITRANS确保至少有三个事务可以并发地对块进行更改。如果有必要,可以从块中的空闲空间中分配额外的事务槽,以允许更多的并发事务修改块中的行。
- MAXTRANS:默认值为255,设置可以更改数据或索引块的并发事务数量的限制。设置时,该值限制事务槽的空间使用,从而保证块中有足够的空间供行或索引数据使用。
- PCTFREE:该参数为数据段指定每个数据块中为由于数据块中行更新而导致增长而保留的空间百分比。PCTFREE的默认值是10%。
- PCTUSED:对于一个数据段,该参数表示Oracle服务器试图为表的每个数据块维护的最小已用空间百分比。当一个块的使用空间低于PCTUSED时,它就被放回到空闲列表中。段的空闲列表是一个块的列表,这些块是用于容纳未来插入的候选块。默认情况下,创建一个段时只有一个空闲列表。通过设置存储子句的FREELISTS参数,可以创建具有更多空闲列表的段。
PCTUSED的默认值是40%。PCTFREE和PCTUSED都是按可用数据空间的百分比计算的,即从总块大小中扣除报头空间后剩余的块空间。
注:这些参数对索引的使用在“管理索引”一课中有详细的讨论。
在Oracle9i:性能调优课程中详细讨论了指定FREELISTS。
数据块管理
管理数据块有两种方法:
- 自动segment-space管理
- 手动的管理
自动segment-space管理
它是一种管理数据库段内空闲空间的方法。
跟踪in-segment的空闲空间和已用空间是使用位图来完成的,而不是使用空闲列表。
这个方法提供了:
- 易于管理
- 更好的空间利用率
- 更好的并发INSERT操作性能
位图段包含一个位图,它描述了段中每个块相对于其可用空间的状态。
该图包含在一组单独的块中,称为位图块(BMBs)。
当插入新行时,服务器在地图中搜索一个有足够空间的块。
当块中可用的空间量发生变化时,它的新状态就会反映在位图中。
配置ASSM
对于本地管理的表空间,只能在表空间级别启用自动段空间管理。
CREATE TABLESPACE data02
DATAFILE '/u01/oradata/data02.dbf' SIZE 5M
EXTENT MANGEMENT LOCAL UNIFORM SIZE 64K
SEGMENT SPACE MANAGEMENT AUTO;
表空间创建后,该规范适用于该表空间中创建的所有段。
手动的管理
允许您使用如下参数手动配置数据块:
- PCTFREE
- PCTUSED
- FREELIST
在以前的Oracle版本中唯一可用的方法
HWM(High-Water Mark)
块空间使用情况
您可以考虑以下内容(请记住“高”和“低”是相对术语,并且在使用ASSM时仅适用PCTFREE):
- 高PCTFREE,低PCTUSED:此设置适用于插入大量将要更新的数据,并且更新将频繁地增加行大小的情况。这个设置在插入之后在块上保留了大量空间(高PCTFREE),并且使得块在返回到自由列表之前必须几乎是空的(低PCTUSED)。
- 低PCTFREE,高PCTUSED:如果您倾向于只从表中插入或删除,或者如果您执行UPDATE, UPDATE倾向于缩小行大小,则此设置适用。
获取存储信息
可以通过查询以下视图获取存储信息:
- DBA_EXTENTS
- DBA_SEGMENTS
- DBA_TABLESPACES
- DBA_DATA_FILES
- DBA_FREE_SPACE