(Oracle管理)oracle高水位_第1页
(Oracle管理)oracle高水位_第2页
(Oracle管理)oracle高水位_第3页
(Oracle管理)oracle高水位_第4页
(Oracle管理)oracle高水位_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、现在解释下什么是高水位”:oracle的逻辑存储结构:表空间段区块块:是粒度最小的存储单位,现在标准的块大小是 8KQRACLE每一次I/O操作也是按块 来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行区:由一系列相邻的块而组成,这也是ORACLE空间分配的基本单位,举个例子来说,当我 们创建一个表 A时,首先ORACLE会分配一区的空间给这个表,随着不断的INSERT数据到A,原来的这个区容不下插入的数据时ORACLE是以区为单位进行扩展的,也就是说再分配多少个区给A,而不是多少个块.?不明白,怎么看区?段:是由一系列的区所组成,一般来说,当创建一个对象时(表

2、,索引),就会分配一个段给这 个对象所以从某种意义上来说,段就是某种特定的数据如CREATE TABLE PM_USER,这个 段就是数据段,而CREATE INDEX ON PM_USER(NAME),ORACLE同样会分配一个段给这个索引,但这是一个索引段了 查询段的信息可以通过数据字典:SELECT * FROMUSER_SEGMENTS 来获得,表空间:包含段,区及块表空间的数据物理上储存在其所在的数据文件中一个数据库至少要有一个表空间所有的oracle段都有一个在段内容纳数据的上限,我们把这个上限称为high watermark或HWM。这个HWM是一个标记,用来说明已经有多少没有使

3、用的数据块分配给这 个 segment。HWM通常增长的幅度为一次 5个数据块,原则上 HWM只会增大,不会缩小,即使将 表中的数据全部删除,HWM还是为原值,由于这个特点,使 HWM很象一个水库的历史最高水位,这也就是 HWM的原始含义,当然不能说一个水库没水了,就说该水库的历史 最高水位为0。但是如果我们在表上使用了truncate命令,则该表的HWM会被重新置为0。如何知道一个表的 HWM ?a)首先对表进行分析:ANALYZE TABLE table nameESTIMATE/COMPUTE STATISTICS;b)查看相关信息:SELECT blocks,empty_blocks,

4、n um_rows FROM user_tables WHERE table_ name=select segme nt_n ame,segme nt_type,blocks from dba_segme nts where segme nt_n ame=A;SEGMENT_NAME SEGMENT_TYPE BLOCKSATABLE 8可得到A表分配了 8个blocks。TEST1orcl SQLa nalyze table a compute statistics;表已分析。TEST1orcl SQLselect num _rows,blocks,empty_blocks from use

5、r_tables where table_name=A:来源:考试大-Oracle认证考试NUM_ROWS BLOCKS EMPTY_BLOCKS1 53BLOCKS列代表该表中曾经使用过得数据库块的数目,即水线。EMPTY_BLOCKS表分配给该表,但是在水线以上的数据库块,即从来没有使用的数据块TEST1orcl SQLdelete from a;TEST1orcl SQLa nalyze table a compute statistics;表已分析。TEST1orcl SQLselect num _rows,blocks,empty_blocks from user_tables wh

6、ere table_ name=A:NUM_ROWS BLOCKS EMPTY_BLOCKS053TEST1orcl SQLselect cou nt(disti net dbms_rowid.rowid_block_ nu mber(rowid)|2 dbms_rowid.rowid_relative_fno(rowid) used from a;used0 注:Used = 0这表名没有任何数据库块容纳数据,即表中无数据TEST1orcl SQLtru ncate table a;表被截断。TEST1orcl SQLa nalyze table a compute statistics;表

7、已分析。TEST1orcl SQLselect table_ name,blocks,empty_blocks from user_tables where table_name=A:来源:考试大-Oracle认证考试TABLE_NAME BLOCKS EMPTY_BLOCKSA08注意:TRUNCATE命令回收了由delete命令产生的空闲空间。假如表原有1024块,使用TRUNCATE后该表分配的空间降为 512块。为了保留由delete命令产生的空闲空间,可以使用TRUNCATE TABLE TEST REUSE STORAGE用此命令后,该表还会是原先的1024块。HWM的一些特性1

8、oracle用HWM来界定一个段中使用的块和未使用的块。当我们创建一个表:A时ORACLE就会为这个对象分配一个段在这个段中,即使我们未插入任何记录,也至少有一个区(64bit,也就是8个块)被分配,第一个区的第一个块就称为段 头(SEGMENT HEADE),段头中就储存了一些信息,基中HWM的信息就存储在此此时,因为 第一个区的第一块用于存储段头的一些信息,虽然没有存储任何实际的记录,但也算是被使用,此时HWM是位于第2个块.当我们不断插入数据到 A后,第1个块已经放不下后面新插入 的数据,此时ORACLE将高水位之上的块用于存储新增数据,同时,HWM本身也向上移也就是说,当我们不断插入数

9、据时,HWM会不断上移,这样,在HWM之下的,就表示使用过的 块,HWM之上的就表示已分配但从未使用过的块2 HWM在插入数据时,当现有空间不足而进行空间的扩展时会向上移,但删除数据时不会往下移这就好比是水库的水位,当涨水时,水位往上移,当水退出后,最高水位的痕迹还是清淅可删除数据后便存在浪费的空间,ORACLE不会释放空间以供其他对象使用,有一条简单的理由:由于空间是为新插入的行保留的,并且要适应现有行的增长。被占用的最高空间称为最高使用标记(HWM)。3 HWM的信息存储在段头当中.HWM本身的信息是储存在段头在段空间是手工管理方式时 ORACLE是通过 FREELIST( 个单向链表)来

10、管理段内的空间分配在段空间是自动管理方式时 (ASSM),ORACLE是通过BITMAP来管理段内的空间分配4 ORACLE的全表扫描是读取高水位标记(HWM)以下的所有块当用户发出一个全表扫描时,ORACLE始终必须从段一直扫描到HWM,即使它什么也没有发现。该任务延长了全表扫描的时间。采用TRUNCATE语句删除一个表的数据的时候,类似于重新建立了表,不仅把数据都删除了,还把HWM给清空恢复为0。5当用直接路径插入行时一例如,通过直接加载插入(用 APPEND提示插入)或通 过SQL*LOADER 直接路径一数据块直接置于 HWM 之上。它下面的空间就浪费掉了在手动段空间管理(Manual

11、 Segment Space Management)中,段中只有一个 HWM,但 是在 Oracle 9i Release1 才添加的自动段空间管理( Automatic Segment Space Management) 中,又有了一个低 HWM的概念出来。为什么有了HWM还又有一个低 HWM呢,这个是因为自动段空间管理的特性造成的。在手段段空间管理中,当数据插入以后,如果是插入到新的数据块中,数据块就会被自动格式化等待数据访问。而在自动段空间管理中,数据插入到新的数据块以后,数据块并没有被格式化,而是在第一次访问这个数据块的时候才格式化这个块。所以我们又需要一条水位线,用来标示已经被格式化

12、的块。这条水位线就叫做低 HWM。一般来说,低 HWM肯定是低于等于 HWM的。来源:考试大-Oracle认证考试额外扩展:TEST1orcl SQLdelete from c;TEST1orcl SQLalter table c shrink space;alter table c shri nk space*第1行出现错误:ORA-10636: ROW MOVEMENT is n ot en abledTEST1orcl SQLalter table c en able row moveme nt;表已更改。TEST1orcl SQLalter table c shrink space;表

13、已更改。TEST1orcl SQLa nalyze table c compute statistics;TEST1orcl SQLselect table_ name,blocks,empty_blocks from user_tables where table_ name=C;TABLE_NAME BLOCKS EMPTY_BLOCKSC176修正ORACLE表的高水位线在ORACLE中,执行对表的删除操作不会降低该表的高水位线。而全表扫描将始终读 取一个段(extent)中所有低于高水位线标记的块。如果在执行删除操作后不降低高水位线标 记,则将导致查询语句的性能低下。下面的方法都可以降

14、低高水位线标记。(1) .执行表重建指令 alter table table_name move;在线转移表空间 ALTER TABLE . MOVE TABLESPACE .当你创建了一个对象如表以后,不管你有没有插入数据,它都会占用一些块ORACLE也 会给它分配必要的空间.同样,用 ALTER TABLE MOVE 释放自由空间后,还是保留了一些空 间给这个表.ALTER TABLE . MOVE后面不跟参数也行,不跟参数表还是在原来的表空间,Move后记住重建索引。如果以后还要继续向这个表增加数据,没有必要move,只是释放出来的空间,只能这个表用,其他的表或者segme nt无法使用该空间。(2) . 执行 alter table table_name shrink space;注意,此命令为 Oracle 10g新增功能,再执行该指令之前必须允许行移动alter tabletable_ name en able row moveme nt;女口果要同时压缩表的索弓I :ALTER TABL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论