关于pctincrease与空间碎片回收的几点看法
1.PCTINCREASE>0 的时候SMON 会自动合并表空间中的碎片,等于0的时候只能手工回收
2.PCTINCREASE>0 造成extent不一致甚至可能因为几何增长的缘故造成一个next需要的空间太大
3.固定的next且较小可能造成表的存储段太离散,对查询很不利
我的意见是碎片能合并(回收)但是并不等于能利用:
而造成碎片的原因是表的存储段离散而extent不一致
一旦PCTINCREASE>0 ,如果next很大则会造成很多问题
你就算能合并碎片,但是这些空间也不能很好的利用,甚至很可能利用率比较低
很简单的一个例子:
3+4=7 这是smon合并相临碎片 ,但是这时由于PCTINCREASE>0 的原因,有可能的话,
next extent已经为5了, 那么,7-5=2这部分就几乎永远浪费了(除非重建表空间)
所以,尽量保持在表空间所有表的next一致,然后PCTINCREASE=0
这样,就算smon不自动合并临近的碎片,这些碎片也能重复利用
如果能定期的手工合并,那当然也是可以的
注意: 这里所说的碎片完全是指表truncate或者drop后释放出来的空间
不是delete后留下来的空间,smon是不能解决delete所浪费的空间
能让表释放空间只有3种情况:
1)drop table.........
2)truncate table .....
3)alter table ..... deallocate unused 改变表的高水位
如果在表里删除一些行,然后往这个表里insert,当然会利用delete出来那些空间
为什么delete不能释放空间?
道理很简单,oracle下为对象分配存储空间是以extent作单位的,你删除的行可能是梅花插竹互相隔离的,如果每个block都有一些行删除了,也有一些没删除的,你要oracle怎么释放(块是操作最小单位)?如果每次delete的时候都要oracle去检查一下有没有一个完整的范围可以释放,这又要消耗额外的性能,而且是没必要的(因为能释放的机会太低了)
SMON 合并相邻碎片只针对tablespace的default storage。不针对table storage .
pctused =40 , 实际使用空间<40%时才加入空闲列表。
pctfree =10 , 插入数据到剩余空间只有10%时 , 不能在该块插入数据。
许多新手对于一个块重新回到freelists后的处理都有些误解。其实,一旦由于一个删除的操作而令块被重新加入到freelist中,它将会一直保留在freelist中即使空间的使用超过了60%,只有在到达pctfree时才会将数据块由freelist中移走。
有效地使用空间和高性能之间是有矛盾的,而表格的存储参数就是控制这个方面的矛盾:
. 对于需要有效地重新使用空间,可以设置一个高的pctused值,不过副作用是需要额外的I/O。一个高的pctused值意味着相对满的块都会放到freelist中。因此,这些块在再次满之前只可以接受几行记录,从而导致更多的I/O。
. 追求高性能的话,可以将pctused设置为一个低的值,这意味着Oracle不会将数据块放到freelists中直到它几乎是空的。那么块将可以在满之前接收更多的行,因此可以减少插入操作的I/O。要记住Oracle扩展新块的性能要比重新使用现有的块高。对于Oracle来说,扩展一个表比管理freelists消耗更少的资源。
行链接: 行链接产生在第一次插入数据的时候如果一个block不能存放一行记录的情况下。
、这种情况下,Oracle将使用链接一个或者多个在这个段中保留的block存储这一行记录,
比较容易发生在比较大的行上。比如Long, LOB等。
只能增大 db_block_size 来清除行链接 。
行迁移: 当一行记录初始插入的时候事可以存储在一个block中的,由于更新操作导致行长增加了
,而block的自由空间已经完全满了,这个时候就产生了行迁移。在这种情况下,Oracle将会迁移整
行数据到一个新的block中(假设一个block中可以存储下整行数据),Oracle会保留被迁移行的原始
指针指向新的存放行数据的block,这就意味着被迁移行的ROW ID是不会改变的。
pctfree设置过小是导致行迁移的一个原因。设置太大可能导致空间利用率低下 。
让我们来回顾一下设置对象存储参数的一些常见规则:
.经常将pctused设置为可以接收一条新行(足够小)。对于不能接受一行的free blocks对于我们来说是没有用的。如果这样做,将会令Oracle的性能变慢,因为Oracle将在扩展表来得到一个空的块之前,企图读取5个"dead"的free block。
.表格中chained rows的出现意味着pctfree太低。在很多情况下,RAW和LONG RAW列都很巨大,以至超过了Oracle的最大块的大小,这时chained rows是不可以避免的。
.freelist参数应该设置为表格同时更新的最大值。例如,如果在任何时候,某个表最多有20个用户执行插入的操作,那么该表的参数应该设置为freelists=20。
应记住的是freelist groups参数的值只是对于Oracle Parallel Server和Real Application Clusters才是有用的。对于这类Oracle,freelist groups应该设置为访问该表格的Oracle Parallel Server实例的数目。
发表评论
-
Oracle ITL(事务槽)
2013-07-10 10:14 2424ITL描述: ITL(Interested Transac ... -
【转】Oracle TM锁 TX锁
2013-05-12 23:42 1444转自RuleV5:http://blog.csdn.net/ ... -
【转】Oracle: sqlnet.ora、listener.ora、tnsnames.ora的配置
2013-05-07 22:29 902转自 http://blog.csdn.net/wenlel ... -
v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparamete
2013-05-07 15:05 1322转自:http://blog.csdn.net/huang_ ... -
SQL 连接(左连接,右连接,全连接,内连接,交叉连接,自连接) (转)
2013-02-02 23:10 1032最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连 ... -
Oracle 回收站 (转)
2013-02-01 17:19 816我们都比较熟悉windows中的回收站,文件删除后放到回收 ... -
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
2011-03-13 14:02 747近日在配置Oracle 10G的 ... -
ORA-28000: the account is locked
2011-03-12 19:36 1805迁移项目,一切弄完后启动服务器,Hibernate报错:OR ... -
ORA-01578: ORACLE 数据块损坏 一种解决方案 (转)
2011-03-11 15:32 31472os: winxp db: 10g r2 错误提 ... -
oracle的备份与恢复 (转)
2011-03-11 14:28 1191oracle中的不使用rman的备 ... -
oracle 存储结构
2011-03-10 13:33 1838总体来说oracle的逻辑结构和物理结构是由块、区、段 ... -
表空间管理 用户管理 日志文件管理
2011-03-08 14:09 8001、表空间管理和用户管理 --创建数据表 ... -
oracle initrans maxtrans
2011-03-07 10:35 4014initrans用于对数据块的行级并行操作的控制。首先介绍事 ... -
oracle analyze table(转)
2011-03-04 16:19 1539首先创建四个临时表t1 ... -
oracle 高水位线(转)
2011-03-04 14:30 2544高水位线实验: -- 创建test3表 SQL> cre ... -
Oracle SQL 优化 (转)
2011-03-03 15:16 705Oracle SQL的优化规则: 尽量少用IN操作符,基本上所 ... -
EXECUTE IMMEDIATE用法小解(转)
2011-03-03 14:33 666EXECUTE IMMEDIATE 代替了以前Oracle8i ... -
Oracle distinct的用法(转)
2011-03-03 09:37 833distinct这个关键字来过滤掉多余的重复记录只 ... -
oracle float(b)(转)
2011-03-02 14:48 1174今天有人问我,他把字段类型设计成float(2)后,插入数 ... -
oracle10g PGA 管理(转)
2011-02-24 09:59 1612一、概述 SGA,PGA,UGA都是Oracle管理的 ...
相关推荐
### Oracle行链接和行迁移详解 #### 一、概述 Oracle数据库中,行链接和行迁移是两种可能影响数据库...例如,可以通过合理设置`PCTFREE`和`PCTUSED`参数,或者重新设计表结构等方式来减少行迁移和行链接的发生概率。
《Oracle8i行链接和行迁移探析》这篇文章主要探讨了Oracle数据库中行迁移和行链接的概念、影响以及如何识别和处理这两种现象。行迁移和行链接是Oracle数据库在处理数据更新时可能出现的问题,对数据库性能产生显著...
本教程对 Oracle 数据库的逻辑结构进行了详细的介绍,涵盖了数据块、块空间的使用及存储参数、行链接和行迁移、表空间及其管理等方面的知识点,为学习 Oracle 数据库逻辑结构提供了系统的指导。
行链接和行迁移 行链接发生于插入时,行太长,数据块放不下,该行数据存放在该段的多个数据块中。行迁移发生于修改时,修改后行变长,空闲空间不够,该行数据被整个迁移到另一个数据块中。 扩展区 扩展区是一组...
数据库逻辑结构是数据库管理系统设计中的核心部分,...在实际应用中,根据不同的工作负载和需求,合理设置如`PCTFREE`和`PCTUSED`这样的参数,可以有效避免行链接和行迁移带来的额外开销,提高数据库的效率和响应速度。
一旦发生行链接或行迁移,可以通过查询数据字典视图来检测并采取措施修复。例如,使用`DBMS_SPACE`包提供的功能来进行空间优化。 #### 五、预防空间碎片 空间碎片是指数据库中未被充分利用的小块空间。过多的空间...
本文主要探讨了Oracle中表数据的存储原理,包括数据块、数据段、行和片段的概念,以及PCTFREE和PCTUSED两个关键参数的使用。 在Oracle数据库中,当创建一个表时,系统会自动在相应的表空间内为这个表分配数据段以...
3. **优化存储参数**:初始创建表时,DBA需预估多个存储参数,如PCTFREE、PCTUSED、INITRANS、MAXTRANS、INITIAL、NEXT、MINEXTENTS、MAXEXTENTS及PCTINCREASE等。随着数据的实际使用情况变化,这些参数可能需要调整...
参数如PCTFREE、PCTUSED、INITRANS、MAXTRANS、INITIAL、NEXT、MINEXTENTS、MAXEXTENTS和PCTINCREASE等,都直接影响着数据块的更新行为和空间利用率。随着数据的增删,这些参数可能需要调整以适应实际性能需求,此时...
3. **存储优化**:根据目标系统硬盘特性,调整表的存储参数,如PCTFREE、PCTUSED等。 4. **网络带宽限制**:大数据量迁移可能受网络带宽影响,可选择合适的时间窗口进行迁移。 5. **安全策略**:确保迁移过程中的...
### Oracle中表数据的存储原理浅析 #### 1. 引言 在Oracle数据库中,当用户创建一个表时,...合理的设置`PCTFREE`和`PCTUSED`参数、理解行的存储方式以及利用簇表等技术手段,都能够有效地提升Oracle数据库的性能。
pctfree 5 storage ( initial 2M next 1M minextents 1 maxextents unlimited pctincrease 0 ) tablespace tsp_comm ) pctfree 5 pctused 90 storage ( initial ...
- **PCTFREE** 和 **PCTUSED**:PCTFREE设置块的预留空闲空间,避免行迁移;PCTUSED则定义何时将块放回freelist。 - **INITIAL, NEXT, PCTINCREASE**:定义段的扩展策略,但在局部管理表空间中,通常设置INITIAL=...
本文将对Oracle Forms的基本概念、组件、配置文件、报表记录组、LOV、绑定变量、动态SQL、pctused和pctfree参数、表空间和数据文件之间的关系等进行详细的解释和分析。 一、Oracle Forms的基本概念 Oracle Forms是...
PCTFREE 10 PCTUSED 60 STORAGE(INITIAL 5M NEXT 5M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0) AS SELECT * FROM username.source_tablename WHERE 条件; ``` 这里需要注意的是,新建的表不会继承源...
- 行连接和行迁移由于参数pctfree和pctused设置不当引起,导致数据分布在不同数据块中,影响查询效率。创建表时,应准确预估数据变化,合理设置这些参数,减少行链接和行迁移。 4. **控制碎片**: - 碎片是数据库...
4. **消除行链接和行迁移**:行链接和行迁移现象会影响数据一致性与查询速度。通过在线重组,可以解决因数据块大小限制导致的这些问题,改善数据存储结构,增强数据访问效率。 #### 忠于行业“最佳实践” 自Oracle...