知识大全 Oracle数据块原理深入剖析

Posted

篇首语:但使书种多,会有岁稔时。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle数据块原理深入剖析相关的知识,希望对你有一定的参考价值。

Oracle数据块原理深入剖析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  数据块(Oracle Data Blocks) 本文简称为 块 是Oracle最小的存储单位 Oracle数据存放在 块 中 一个块占用一定的磁盘空间 特别注意的是 这里的 块 是Oracle的 数据块 不是操作系统的 块

  Oracle每次请求数据的时候 都是以块为单位 也就是说 Oracle每次请求的数据是块的整数倍 如果Oracle请求的数据量不到一块 Oracle也会读取整个块 所以说 块 是Oracle读写数据的最小单位或者最基本的单位

  块的标准大小由初始化参数DB_BLOCK_SIZE指定 具有标准大小的块称为标准块(Standard Block) 块的大小和标准块的大小不同的块叫非标准块(Nonstandard Block) 同一数据库中 Oracle i及以上版本支持同一数据库中同时使用标准块和非标准块 Oracle允许指定 种非标准块(Nonstandard Block)

  操作系统每次执行I/O的时候 是以操作系统的块为单位 Oracle每次执行I/O的时候 都是以Oracle的块为单位     Oracle数据块大小一般是操作系统块的整数倍

  数据块的格式(Data Block Format)

  块中存放表的数据和索引的数据 无论存放哪种类型的数据 块的格式都是相同的 块由块头(header/Common and Variable) 表目录(Table Directory) 行目录(Row Directory) 空余空间(Free Space)和行数据(Row Data)五部分组成 如下图所示  

   

  块头(header/Common and Variable) 存放块的基本信息 如 块的物理地址 块所属的段的类型(是数据段还是索引段) 表目录(Table Directory) 存放表的信息 即 如果一些表的数据被存放在这个块中 那么 这些表的相关信息将被存放在 表目录 中

  行目录(Row Directory) 如果块中有行数据存在 则 这些行的信息将被记录在行目录中 这些信息包括行的地址等

  行数据(Row Data) 是真正存放表数据和索引数据的地方 这部分空间是已被数据行占用的空间

  空余空间(Free Space) 空余空间是一个块中未使用的区域 这片区域用于新行的插入和已经存在的行的更新

  头部信息区(Overhead) 我们把块头(header/Common and Variable) 表目录(Table Directory) 行目录(Row Directory)这三部分合称为头部信息区(Overhead) 头部信息区不存放数据 它存放的整个块的信息 头部信息区的大小是可变的 一般来说 头部信息区的大小介于 字节(bytes)到 字节(bytes)之间

  数据块中自由空间的使用

  当往数据库中插入(INSERT)数据的时候 块中的自由空间会减少 当对块中已经存在的行进行修改(UPDATE)的时候(使记录长度增加) 块中的自由空间也会减少

  DELETE语句和UPDATE语句会使块中的自由空间增加 当使用DELETE语句删除块中的记录或者使用UPDATE语句把列的值更改成一个更小值的时候 Oracle会释放出一部分自由空间 释放出的自由空间并不一定是连续的 通常情况下 Oracle不会对块中不连续的自由空间进行合并 因为合并数据块中不连续的自由空间会影响数据库的性能 只有当用户进行数据插入(INSERT)或者更新(UPDATE)操作 却找不到连续的自由空间的时候 Oracle才会合并数据块中不连续的自由空间

  对于块中的自由空间 Oracle提供两种管理方式 自动管理 手动管理

  行链接和行迁移(Row Chaining and Migrating)

  行链接(Row Chaining) 如果我们往数据库中插入(INSERT)一行数据 这行数据很大 以至于一个数据块存不下一整行 Oracle就会把一行数据分作几段存在几个数据块中 这个过程叫行链接(Row Chaining) 如下图所示  

   

  如果一行数据是普通行 这行数据能够存放在一个数据块中 如果一行数据是链接行 这行数据存放在多个数据块中

  行迁移(Row Migrating) 数据块中存在一条记录 用户执行UPDATE更新这条记录 这个UPDATE操作使这条记录变长 这时候 Oracle在这个数据块中进行查找 但是找不到能够容纳下这条记录的空间 无奈之下 Oracle只能把整行数据移到一个新的数据块 原来的数据块中保留一个 指针 这个 指针 指向新的数据块 被移动的这条记录的ROWID保持不变 行迁移的原理如下图所示  

   

  无论是行链接还是行迁移 都会影响数据库的性能 Oracle在读取这样的记录的时候 Oracle会扫描多个数据块 执行更多的I/O

  块中自由空间的自动管理

  Oracle使用位图(bitmap)来管理和跟踪数据块 这种块的空间管理方式叫 自动管理 自动管理有下面的好处

  ◆易于使用

  ◆更好地利用空间

  ◆可以对空间进行实时调整

  块中自由空间的手动管理

  用户可以通过PCTFREE PCTUSED来调整块中空间的使用 这种管理方式叫手动管理 相对于自动管理 手动管理方式比较麻烦 不容易掌握 容易造成块中空间的浪费

cha138/Article/program/Oracle/201311/17425

相关参考

知识大全 VS2005数据存取层深入剖析高级篇

VS2005数据存取层深入剖析高级篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一扩展表格适配器

知识大全 剖析 ADO.NET 批处理更新(深入研究数据访问)

剖析ADO.NET批处理更新(深入研究数据访问)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 深入解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析

深入解析.NET许可证编译器(Lc.exe)的原理与源代码剖析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 Oracle10g数据库中闪回表特性剖析

Oracle10g数据库中闪回表特性剖析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Orac

知识大全 Oracle数据块体系介绍

Oracle数据块体系介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据块概述Oracle

知识大全 Oracle中并行处理技术原理深入分析1

Oracle中并行处理技术原理深入分析1  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  并行处理

知识大全 深入了解Oracle数据字典

深入了解Oracle数据字典  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先Oracle的字

知识大全 深入分析Oracle数据库的安全策略

深入分析Oracle数据库的安全策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle

知识大全 深入分析Oracle数据库日志文件(2)

深入分析Oracle数据库日志文件(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  四如何利

知识大全 深入分析Oracle数据库日志文件(1)

深入分析Oracle数据库日志文件(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作为Or