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下所有块,即使其中不包含数据。
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?