Oracle的Pctfree

1、创建一张表

create table student(
student_id number
);

但是在pl/sql中查看却是以下的建表语句:

-- Create table
create table STUDENT
(
  student_id NUMBER
)
tablespace SYSTEM
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255;

1)其中下面的几个参数是什么意思呢?

2)假如数据块是8k,但是真的全部都拿来存数据吗?

数据块的结构

1)块头
2)数据
3)空闲空间

高水位线概念

当表刚创建时,HWM明显位于这个表的第一个块中,当插入数据后,水位线会升高。
但当我们删除了一些数据后,甚至删除所有的数据。就会出现一种情况:许多块即使不包含了数据,但依然处于水位下下,而且会一直保持。
因为:HWM永远不会下降,除非使用rebuild、truncate或shrunk这个对象(shrunk是10g的新特性,仅ASSM支持)

ASSM:自动段存储管理

高水位线什么作用呢?

Oracle在全表扫描时会扫描HWM下所有块,即使其中不包含数据。
image

pctfree

1、数据块大小
2、参数的含义=20 = 不被使用的空间占20%
为一个块保留空间的百分比,表示数据块在什么情况可以被insert。
当数据块的可硬空间低于10%时,就不能被insert了,只能用于update。
即:当一个block在到达pctfree之前,该block处于上升期,可以被insert
3、为什么要留一些空间?
为了留给insert update等操作预留空间

pctused

指当块数据第一是多少百分比时,又可以重新被insert
=40 = 要使用40%,当低于40%时,oracle认为这个数据块使用率比较低了,可以进行insert操作。
当数据低于40%时,改block处于下降期,可以写入新的数据。

==注意:如果表空间上启用了ASSM,建表的时候只能执行PCTFREE,否则可以执行PCTFREE和PCTUSED

查看表空间是否启动了自动段管理

SELECT d.tablespace_name,
       d.segment_space_management
  FROM dba_tablespaces d
TABLESPACE_NAME                SEGMEN
------------------------------ ------
SYSTEM                         MANUAL
SYSAUX                         AUTO
UNDOTBS1                       MANUAL
TEMP                           MANUAL
USERS                          AUTO
SIM_DATA                       AUTO

posted on 2022-11-17 23:59  兔哥DB  阅读(613)  评论(0编辑  收藏  举报

导航