`

(转)数据块BLOCK的解释

 
阅读更多

数据块(DATA BLOCK)是Oracle最小的逻辑组成部分。ORACLE存储数据的最小单位。

 

比Data blocks更高一层的逻辑数据块空间是extent,一个extent是由一系列临近的存储信息的数据块组成。

 

段(segment)由一系列的extent组成。

 

表空间(tablespace)是包含物理数据文件的逻辑实体,存放数据库的所有可用数据,因此表空间的尺寸也是包含数据的数据文件尺寸的总和,是oracle 主要的逻辑存储结构。


data block的大小是操作系统的data block的整数倍,ORACLE默认是8K,还有4K,16K,32k几种。

 

在参数文件里的参数为DB_nK_BLOCK_SIZE,可以通过PCTFREE,PCTUSER,FREELIST进行管理。

 

extent是几个逻辑上相邻的data block组合在一块。


segment通常一张表是一个segment,一个INDEX,BLOB,CLOB各自占用一个segment。(BLOB就是使用二进制保存数据。CLOB使用CHAR来保存数据。 )


tablespace是数据库中数据逻辑存储的地方,一个tablespace可以包含多个数据文件。上面三个的配置如果和tablespace的配置有冲突,以tablespace为准。

 

一个Oracle block由三个部分组成,分别是数据块头、自由空间、实际数据三部份组成。 数据块头:主要包含有数据块地址的一些基本信息和段的类型,以及表和包含有数据的实际行的地址。 自由空间:是指可以为以后的更新和插入操作分配的空间,大小由PCTFREE和PCTUSED两个参数影响。 实际数据:是指在行内存储的实际数据。 当创建或者更改任何表和索引的时候,Oracle在空间控制方面使用两个存储参数: PCTFREE:为将来更新已经存在的数据预留空间的百分比。 PCTUSED:用于为插入一新行数据的最小空间的百分比。这个值决定了块的可用状态。可用的块时可以执行插入的块,不可用状态的块只能执行删除和修改,可用状态的块被放在freelist中。 当表中一行的数据不能在一个数据block中放入的时候,这个时候就会发生两种情况,一种是行链接,另外一种就是行迁移了.。


行链接产生在第一次插入数据的时候如果一个block不能存放一行记录的情况下。这种情况下,Oracle将使用链接一个或者多个在这个段中保留的 block存储这一行记录,行链接比较容易发生在比较大的行上,例如行上有LONG、LONG RAW、LOB等数据类型的字段,这种时候行链接是不可避免的会产生的。 当一行记录初始插入的时候事可以存储在一个block中的,由于更新操作导致行长增加了,而block的自由空间已经完全满了,这个时候就产生了行迁移。在这种情况下,Oracle将会迁移整行数据到一个新的block中(假设一个block中可以存储下整行数据),Oracle会保留被迁移行的原始指针指向新的存放行数据的block,这就意味着被迁移行的ROW ID是不会改变的。 当发生了行迁移或者行链接,对这行数据操作的性能就会降低,因为Oracle必须要扫描更多的block来获得这行的信息。

行链接主要是由于数据库的db_block_size不够大,对于一些大的字段没法在一个block中存储下,从而产生了行链接。对于行链接我们除了增大db_block_size之外没有别的任何办法去避免,但是因为数据库建立后db_block_size是不可改变的(在9i之前),对于Oracle9i的数据库我们可以对不同的表空间指定不同的db_block_size,因此行链接的产生几乎是不可避免的,也没有太多可以调整的地方。

行迁移则主要是由于更新表的时候,由于表的pctfree参数设置太小,导致block中没有足够的空间去容纳更新后的记录,从而产生了行迁移。对于行迁移来说就非常有调整的必要了,因为这个是可以调整和控制清除的。

 

原文地址:http://blog.csdn.net/u011492628/article/details/19004481

分享到:
评论

相关推荐

    Oracle数据块结构分析说明BLOCK结构详解

    Oracle是业界广泛使用的大型关系型数据库管理系统,其核心组成部分之一就是数据块结构(Block)。数据块是Oracle数据库中最小的存储单位,是操作系统中读写数据的基本单位,也是数据库实例中逻辑上存储数据的基本...

    oracle数据块(block)结构详解

    Oracle 数据块(Block)是数据库存储的基本单位,它在Oracle数据库管理系统中扮演着至关重要的角色。数据块的设计和管理直接影响到数据库的性能和空间利用率。本文将深入解析Oracle数据块的结构及其相关知识点。 ...

    西门子TIA博图数据块中数据类型的定义.pdf

    TIA博图中数据块(Data Block, DB)的创建和数据类型的定义是自动化项目中非常重要的环节,它关系到自动化程序的运行效率和稳定性。本文将详细介绍在TIA博图中数据块内数据类型定义的相关知识点。 数据块(Data ...

    Oracle数据块原理分析

    Oracle 数据库中,最基本的数据管理单位是数据块(datablock),它是数据库逻辑上最小的数据单位。在操作系统级别,数据是最小物理存储单位是字节(byte),而在数据库级别则是数据块。Oracle 在处理数据时,通常以...

    块(Block)在计算机制图中的应用

    在计算机制图领域中,“块(Block)”技术的应用是提高绘图效率和质量的重要技术手段。在矿图绘制等专业领域,块的应用尤为关键,它可以有效降低绘图文件的大小,提升绘图的速度和精度,从而优化整个设计和绘图过程。 ...

    实验4 在内部RAM的BLOCK开始单元中有一带符号数据块,其长度存入LEN.doc

    实验4 在内部RAM的BLOCK开始单元中有一带符号数据块,其长度存入LEN.doc 本文主要讨论实验4 的内容,涉及到排序算法、子程序设计、多字节有符号数的算术运算等知识点。 首先,实验4 的目的是设计一个子程序,功能...

    hbase和hadoop数据块损坏处理

    当数据块损坏后,DN 节点会执行 directoryscan 操作,然后 blockreport 操作。最后,NN 会收到 blockreport,然后执行恢复操作。 directoryscan 和 blockreport 机制可以自动修复 HDFS损坏的块,从而防止数据丢失。...

    oracle数据块解析

    Oracle 数据块解析是理解 Oracle 数据库内部工作原理的关键部分。数据块是数据库进行最小 I/O 操作的单位,它包含了存储在表、索引和其他数据库对象中的数据。在这个过程中,我们将通过一系列步骤来了解数据块的内部...

    oracle数据块结构分析说明

    一个数据块(Block)是 Oracle 数据库中的最小存储单元,它是数据文件(Datafile)中的一部分。每个数据块的大小可以是 2k、4k、8k 或 16k 等,取决于数据库的设置。 在 Oracle 数据库中,数据块的结构主要包括以下...

    STEP7数据块的作用

    在 STEP7 中,数据块(Data Block, DB)是一种非常重要的数据组织方式,主要用于存储数据,特别是那些需要在多个程序块之间共享的数据。本文将详细介绍 STEP7 中数据块的基本概念、类型以及如何在实际编程中合理利用...

    PLC多重背景数据块

    在PLC编程中,数据块(Data Block,DB)用于存储程序运行过程中的变量和参数。多重背景数据块允许一个数据块在不同的上下文中同时存在,每个上下文都有自己的独立变量状态,这在处理复杂系统或需要隔离不同任务的...

    S7-1200 数据块概述-跟我学 FLASH视频.rar

    数据块可以分为全局数据块(Global Data Block, GDB)、背景数据块(Background Data Block, BDB)、组织块(Organization Block, OB)以及局部数据块(Local Data Block, LDB)等不同类型,每种都有其特定的应用...

    西门子 博途V13SP2 实例 多重背景数据块

    多重背景数据块(Multiple Background Blocks, MBB)是西门子PLC编程中的一种高级特性,它允许在同一个程序中创建多个独立的数据块环境,每个环境都有自己的局部变量和参数,但共享相同的程序逻辑。这样可以实现不同...

    block change tracking和rman通常增量备份方式的比较

    Block Change Tracking是Oracle 10g引入的一项新技术,其主要作用在于记录数据文件中发生更改的数据块的信息。通过这种方式,可以在进行增量备份时仅备份那些已更改的数据块,从而提高备份效率。 - **工作原理**: ...

    step7数据块

    数据块(Data Block)是Step7中用于存储数据的一种结构。它们可以被看作是存储在PLC中的变量集合,这些变量可以是全局的或局部的,具体取决于数据块的类型。数据块的主要优点在于它们能够跨多个功能块或组织块进行...

    BlockStore是一个纯原生JavaScript开发块分配的高速存储键值文件

    总的来说,BlockStore是JavaScript开发中的一个重要工具,它通过块分配的存储策略实现了高效的数据管理,为开发者提供了便捷、高性能的数据存储解决方案。对于想要提升JavaScript应用数据处理能力的开发者来说,深入...

    iiOS之Block夸页面传值

    相比之下,Block提供了更直接的数据传递方式,可以在代码块内部直接调用,简化了调用链,使得代码更加简洁。Block还可以作为参数传递,或者直接赋值给变量,甚至可以作为返回值。 **跨页面传值:从Block出发** 1. ...

    转换块_IEC块_PID块_传递块说明

    - FC94 DB_COPY1:直接参数赋值进行数据块的复制。 - FC95 DB_COPY2:间接参数赋值进行数据块的复制。 数据传递块能够有效帮助程序间的数据交换和处理。 具体到每一个功能块的ID符号,它们各有自己的编号和功能...

Global site tag (gtag.js) - Google Analytics