Oracle : block,extent,segmentITeye - 威尼斯人

Oracle : block,extent,segmentITeye

2019年03月24日12时55分32秒 | 作者: 运杰 | 标签: 一个,数据,空间 | 浏览: 1336

 

    先看Data blocks(也叫逻辑块,oracle块,页)吧,oracle存储数据都是在这些数据块中,一个数据块是磁盘上数据库物理空间一系列物理字节的组成。
    比Data blocks更高一层的逻辑数据块空间是extent,一个extent是由一系列接近的存储信息的数据块组成。
    最高一层的逻辑结构是segment,一个segment是同一表空间extents的一个调集。每一个segment有不同的数据结构。如每一个表的数据就存储在自己的data segment,每一个索引存储在自己的索引段,假如表或许索引是
是分区存储的,那么每一个分区都存储在他们各自的segment中。一个segment和他一切的extent都是在一个表空间中,而且一个segment能够跨过几个数据文件。。

    关于数据库来说,data block是oracle数据库中分配和私用的最小存储单元。但这仅仅对数据库来说,在物理层次,操作系统层次,一切的数据仍旧是按字节存储的。每一个操作系统都有自己的块尺度(block size),在oracle数据库中,数据块的巨细都有参数db_block_size在创立数据库的时分来确认,他的数值应该是操作系统块尺度的整数倍。
    数据块都有这么几部分组成,块头部分,表目录,行目录,闲暇空间,数据这几部分组成。块头首要包括两部分信息:块头地址和segment的类型,是数据表仍是索引;表目录首要包括块中有多少行数据。行目录首要包括每一行的物理地址。数据就很显着了,便是这个块包括的数据。这里边最美妙的便是这个闲暇空间,它首要意图便是为varchar这个数据类型预备的,有两个阈值参数pctfree,pctused来操控此数据快移向那一个链表,这两个参数的设定首要意图是为了防止行衔接与行搬迁,详细的又够一篇文章了,今后再写,^_^。
    在来说extent这个由一系列接连的data blocks组成。每逢在数据库中创立一个表,那么分配给表的data segment分配一个包括若干数据库的初始的extent,尽管还没有插进去数据,但初始的extent现已做好了刺进数据的预备。假如初始的extent中的数据块现已满了,或许没有空间刺进数据,那么他将会增量扩展。当然这仅仅关于串行履行的状况,关于并发就不适宜了。一些存储参数操控着oracle如何为每个段分配可用空间。当你运用create table创立一个表的时分,存储参数会将决议分配多少的可用空间或许约束此表最多可包括多少个extents,假如在创立表的时分没有界说这些参数,那么将选用表空间界说的默许的存储参数。关于刺进和删去都很频频的表,DBA能够经过这个句子来回收无用的extent ,aler table table_name deallocate unused;


    下面来说segment,每一个segment都是一个表空间下有一系列extent组成的逻辑存储结构。如:当数据库用户创立一个表,那么oracle将分配一个或多个extent来组成表的数据段,创立一个索引,oracle也会纷繁extent给索引数据。一般能够分为data segment,index segment,temporary segment。
    当你创立一个非分区而且非聚集表的时分,或许一个分区表的一个分区,多个表合用的一个聚簇,都将是一个oracle将处理数据的单个data segment。
    而一个index segment ,关于非分区索引,便是create index创立的索引就会分配一个segment来处理数据;分区索引则对每一个分区分配一个segment来处理数据。
    当一个进程查询的时分,oracle常常需求一个暂时的作业区寄存sql的解析和履行的中间状态,oracle主动分配的磁盘空间temporary segment。特别当内存的排序区缺乏时,oracle将会分配一个temporary segment。有时分,下面一些句子有时分需求用到temporary segment:
    create index  ....
    select    .... order by ;
    select distinct ....
    select ...... group by 
    select ...... union 
    select ...... intersect
    select ...... minus
    还有便是对一个子查询来说也会用到temporary segment。假如一个查询包括distinct 子句,一个order by ,一个group by,那么就需求两个temporary segment。当创立一个暂时表或索引,oracle也会分配一些temporary segment。
    关于temporary segment,oracle仅仅在一个用户的会话(session)中分配,但sql句子履行完毕或许会话断开,将开释一切的temporary segment。分配这些temporary segment的磁盘空间都是在暂时表空间,假如没有界说暂时表空间,那么默许的暂时表空间将是system表空间。关于DBA来说,因为分配和开释这些temporary segment将十分频频,所以至少要界说一个temporary segment,这样能够防止system表空间的碎片。关于暂时表来说,假如多个会话共用一个暂时表,那么知道一切的会话悉数完毕,那才会开释这个暂时表分配的temporary segment。

 

 

        区段,当相邻的几个块组合在一起时,就成为一个区段(extent). 段为一组区段构成,能够是不接连的。 表空间,oracle表空间是包括物理数据文件的逻辑实体。表空间存储数据库一切可用数据,而且表空间中的数据都被物理寄存在一个或多个文件里。数据文件是oracle格局的操作系统文件。 转自: 感谢作者 天风海雨

 

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章