PCTFREE
-
全称: Percentage Free
-
原理:
PCTFREE 参数是用来设定数据块内部预留多少比例的空间以备将来更新操作时使用。当数据块在插入新行时,Oracle会确保块内至少保留PCTFREE
指定的百分比空间。这样做的目的是为了在行大小可能增加的情况下,不需要进行行迁移或行链接操作,避免因为空间不足导致的性能损耗。 -
优化方法:
- 设定合理的
PCTFREE
值,需根据业务特点和数据更新模式来调整。频繁更新的表应设置较高的PCTFREE
值,以减少因更新导致的数据块碎片和行迁移。反之,如果表更新较少,可以适当减小PCTFREE
以充分利用数据块空间。
- 设定合理的
PCTUSED
-
全称: Percentage Used
-
原理:
PCTUSED 参数控制了数据块何时从Freelist中移除和重新加入的标准。当数据块的使用空间百分比下降到PCTUSED
设置的阈值以下时,Oracle会将该块重新放回到Freelist中,使其成为可插入新数据的候选块。 -
优化方法:
- 适当的
PCTUSED
设置可以帮助数据库更快地重用已删除数据所释放的空间。对于频繁删除和插入操作的表,可适当降低PCTUSED
值,加快空闲空间的回收速度。但如果设置得过低,可能导致数据块频繁进出Freelist,增加系统负担。反之,对于稳定且不太变动的表,可以设置较高的PCTUSED
值,减少不必要的Freelist维护操作。
- 适当的
Freelist
-
原理:
在非ASSM(Automatic Segment Space Management)的传统表空间中,Freelist是一种管理数据块空闲空间的数据结构。它是一个列表,记录了哪些数据块已经变为可用(即使用空间低于PCTUSED
设置的阈值),当有新的插入操作需要分配空间时,会先尝试从Freelist中获取空闲块。 -
优化方法:
- 对于高并发和大量DML操作的系统,可以通过设置多个Freelist组(使用
INITRANS
参数和FREELISTS
或FREELIST GROUPS
参数)来分散不同事务间的争用,降低buffer busy waits事件发生的可能性。 - 使用ASSM(Local or Uniform extent management)代替传统的Freelist管理方式,可以简化空间管理,减少争用,并且在大多数情况下提供了更高效的存储空间分配和回收机制。
- 对于高并发和大量DML操作的系统,可以通过设置多个Freelist组(使用