■ 概述
Oracle是通过数据文件存储数据库内所有数据的,存储的最小单位是:数据块
在物理层面上,操作系统以字节为单位存储数据,每个操作系统都有一个block size
Oracle请求数据时,它请求的是Oracle的数据块,而不是物理层面上操作系统的数据块
标准块大小(standard block size)是通过初始化参数DB_BLOCK_SIZE设定的
此外,也可指定5个非标准块大小
数据块的大小应为操作系统的块大小的倍数,但同时也要确保其不要超过最大限制,以确保出现不必要的I/O
Oracle数据块是Oracle使用和分配存储的最小单位
■ 数据块格式(Data Block Format)
不管数据块内存储的是什么内容,包括表,索引,簇等数据内容,它们的格式都是相似的
□ 头(Header)(Common and Variable)
包含了块的一般信息,例如块的地址和段的类型(例如,数据或索引)
□ 表目录(Table Directory)
包含了块中包含行的表的信息
□ 行目录(Row Directory)
包含了块中实际行的信息(包括行数据区域中每个行段的地址)
□ 块开销(Overhead)
数据块的头、表目录和行目录统称为开销
一些块开销的大小是固定的,总的块开销大小是可变的
平均而言,数据块开销的固定和可变部分总计84到107字节
□ 行数据(Row Data)
包含了表或索引的数据
数据是可以跨块的,比如一个数据库表的数据量较大,它的数据在一个块内不能全部存储,剩下的部分可以存储在其他数据块里
□ 空闲空间(Free Space)
空闲空间用于插入新行和更新行数据时,所需要的额外空间(例如,当行中的null更新为非null值时)
在为表或集群的数据段或索引的索引段分配的数据块中,可用空间还可以保存事务条目(transaction entry)
当在块内进行增删改查操作时,需要访问一条或多条记录的,此时是需要一个事务条目的
事务条目所需空间的大小取决于所在的操作系统,大多数操作系统中的事务条目大约需要23个字节
□ 空闲空间管理
空闲空间管理既可以自动,也可以手动
空闲空间可以在数据库段内被自动管理
段内空闲/已用空间使用位图跟踪,而不是空闲列表
段内空间自动管理有以下好处:
方便使用
更好的空间利用率,特别是对于行大小变化很大的对象
对并发访问中的变化进行更好的运行时调整
在性能/空间利用率方面有更好的多实例行为
在创建本地管理的表空间时,可以将段内空间管理方式为设为自动,这样在此表空间中创建的所有段都会使用该设置