在Oracle数据库中,数据块(Data Block)是最小的物理存储和I/O单位,它是Oracle数据库管理系统组织和管理数据的基本元素。
-
定义与作用:
- 数据块是Oracle数据库在磁盘上进行数据存储和检索的基本单位,也是数据库执行I/O操作的最小粒度。
- 数据块负责承载表、索引和其他数据库对象的实际数据内容,确保数据以高效的方式存储和读取。
-
大小配置:
- 数据块的大小由初始化参数
DB_BLOCK_SIZE
设置,一般为2KB、4KB、8KB、16KB或32KB等,具体大小在创建数据库时确定,并且在同一数据库实例中所有数据文件的一致性要求所有数据块具有相同的大小。 - 不同版本的Oracle数据库可能支持多种大小的数据块,但是同一数据库实例中的所有表空间必须使用相同大小的数据块。
- 数据块的大小由初始化参数
-
结构组成:
- 一个数据块通常包含若干部分,如表目录区(Block Header)、行目录区(Row Directory)、行数据区、自由空间区(Free Space)和空闲空间(Overhead for Block Footer)等。
- 表目录区存储关于块中各行的信息,行目录区记录行的位置和大小,行数据区存储实际的行数据,自由空间则是可供新增或更新数据使用的区域。
-
块的填充与管理:
- 数据块在填充数据时遵循
PCTFREE
和PCTUSED
等参数设定的空间管理策略,确保既有足够的空间供行扩展,又能有效利用空间。 - 当行因更新导致大小增加超出当前块可容纳范围时,可能出现行链接(Row Chaining)或行迁移(Row Migration)现象。
- 数据块在填充数据时遵循
-
读写操作:
- Oracle在执行SQL语句时,每次从磁盘读取或写入数据都是以完整数据块为单位进行的,即使实际请求的数据量小于一个块的大小,也要读取整个块。
- 数据块的内容会在内存中缓存在Buffer Cache(数据库缓冲区高速缓存)中,以减少直接对磁盘的I/O次数,提高性能。
-
块头与一致性读:
- 每个数据块头部包含用于维护数据一致性的SCN(System Change Number)以及其他控制信息,确保在并发环境下读取的数据是一致的。
- Oracle的多版本并发控制(MVCC)和回滚段机制依赖于块头部的信息来实现读一致性。