PCTFREE、PCTUSED 

本文详细解析了PCTFREE与PCTUSED两个参数的含义及其在数据库中的作用,包括如何通过调整这两个参数来提高数据库性能及空间利用率。
PCTFREE:块中保留用于UPDATE操作的空间百分比,当数据占用的空间达到此上限时,新的数据将不能再插入到此块中; 
PCTUSED:指定块中数据使用空间的最低百分比;当一个块在达到PCTFREE,之后经历了一些DELETE操作,在其空间使用下降到PCTUSED 后便可以重新被用于INSERT数据;这就是PCTFREE/PCTUSED参数的含义; 
  

调整PCTFREE、PCTUSED参数的目标一方面是提高性能,另一方面则主要是提高空间使用效率,避免出现块中存在有许多未用的空间,但却无法找到一个块可以被用于插入新数据行的情况发生。


PCTFREE的默认值为:10
PCTUSED的默认值为:40


PCTFREE参数是控制freelist un-links的(即将块由freelists中移除)。
设置PCTFREE=10 意味着每个块都保留10%的空间用作行扩展。
PCTUSED参数是控制freelist re-links的。
设置PCTUSED=40意味着只有在块的使用低于40%时才会回到表格的freelists中。
CREATE TABLE "XMC_PMNT_TERM" ( "PMNT_TERM" VARCHAR2(20),      "PMNT_DESC" VARCHAR2(255),      "FINAL_ACP_FLAG" VARCHAR2(3),      "LC_ACP_FLAG" VARCHAR2(3),      "BALANCE" NUMBER(10,3),      "PO_FLAG" VARCHAR2(3),      "OWE_FLAG" CHAR(1),      PRIMARY KEY ("PMNT_TERM")          USING INDEX              TABLESPACE "SUPPLY_DATA"  ENABLE ) SEGMENT CREATION IMMEDIATE     PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255     NOCOMPRESS LOGGING     STORAGE(INITIAL 24576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645             PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1             BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)     TABLESPACE "SUPPLY_DATA" ; -- 字段注释 COMMENT ON COLUMN "XINSPADM"."SP_PMNT_TERM"."PMNT_TERM" IS '支付条款代码(主键)'; COMMENT ON COLUMN "XINSPADM"."SP_PMNT_TERM"."PMNT_DESC" IS '支付条款描述信息'; COMMENT ON COLUMN "XINSPADM"."SP_PMNT_TERM"."FINAL_ACP_FLAG" IS '最终确认标志(YES/NO)'; COMMENT ON COLUMN "XINSPADM"."SP_PMNT_TERM"."LC_ACP_FLAG" IS '信用证确认标志(YES/NO)'; COMMENT ON COLUMN "XINSPADM"."SP_PMNT_TERM"."BALANCE" IS '账户余额(保留3位小数)'; COMMENT ON COLUMN "XINSPADM"."SP_PMNT_TERM"."PO_FLAG" IS '采购订单关联标志(YES/NO)'; COMMENT ON COLUMN "XINSPADM"."SP_PMNT_TERM"."OWE_FLAG" IS '欠款标志(Y/N)';  根据新表名修改
最新发布
08-30
-- 创建采购订单明细表 XMC_LCDP_ITEM CREATE TABLE "XMC_LCDP_ITEM" ( "ID" NUMBER NOT NULL ENABLE, -- 明细项唯一标识 "REQ_ID" NUMBER, -- 关联的采购请求ID "LCDP_NO" VARCHAR2(6), -- 采购请求编号(6位短码) "PO_NO" VARCHAR2(10), -- 采购订单编号(关联SP_PO_MAST) "PO_ITEM_NO" VARCHAR2(10), -- 采购项号(订单内序号) "ITEM_QTY" NUMBER(16,3), -- 采购数量(含小数精度) "ITEM_AMOUNT" NUMBER(23,4), -- 项目金额(含税金额) "SHIPMENT_DATE" DATE, -- 发货日期(计划交货时间) "CDATE" DATE, -- 创建时间(记录创建时间戳) "UDATE" DATE -- 更新时间(最后修改时间戳) ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) TABLESPACE "SUPPLY_DATA"; -- 主键约束(自动创建唯一索引) ALTER TABLE "XINSPADM"."SP_LCDP_ITEM" ADD CONSTRAINT "PK_SP_LCDP_ITEM" PRIMARY KEY ("ID"); -- 外键约束(关联采购请求主表) ALTER TABLE "XINSPADM"."SP_LCDP_ITEM" ADD CONSTRAINT "FK_SP_LCDP_ITEM_REQ" FOREIGN KEY ("REQ_ID") REFERENCES "XINSPADM"."SP_LCDP_MAST" ("ID"); -- 创建索引(保留必要索引) CREATE INDEX "XINSPADM"."IX_LCDP_ITEM_REQ" ON "XINSPADM"."SP_LCDP_ITEM" ("REQ_ID"); CREATE INDEX "XINSPADM"."IX_LCDP_ITEM_PONO" ON "XINSPADM"."SP_LCDP_ITEM" ("PO_NO"); -- 删除冗余索引: -- SYS_C0021042(主键索引已通过PRIMARY KEY约束自动创建) -- FK7C99C22D8FDFF87C(外键约束无需重复索引) -- 权限授予 GRANT SELECT ON "XINSPADM"."SP_LCDP_ITEM" TO "OEREAD"; GRANT SELECT ON "XINSPADM"."SP_LCDP_ITEM" TO "XINSPREAD"; -- 字段注释定义 COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.ID IS '明细项唯一标识(主键)'; COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.REQ_ID IS '关联的采购请求ID(外键)'; COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.LCDP_NO IS '采购请求编号(6位短码)'; COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.PO_NO IS '采购订单编号(关联主表)'; COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.PO_ITEM_NO IS '采购项号(订单内序号)'; COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.ITEM_QTY IS '采购数量(含小数精度)'; COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.ITEM_AMOUNT IS '项目金额(含税金额)'; COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.SHIPMENT_DATE IS '发货日期(计划交货时间)'; COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.CDATE IS '创建时间(记录创建时间戳)'; COMMENT ON COLUMN XINSPADM.SP_LCDP_ITEM.UDATE IS '更新时间(最后修改时间戳)'; 这个也一样  改掉错误的位置 然后全部返回给我不要省略
08-22
<think>我们正在讨论Oracle数据库中的存储参数:PCTFREEPCTUSED、INITRANS和MAXTRANS。这些参数用于控制数据块(block)的存储行为,影响数据的存储效率和并发访问性能。下面我将逐一解释这些参数的含义和作用。 ### 1. PCTFREE - **含义**:指定在数据块中**保留的空间百分比**,用于将来更新现有行时可能增加的数据量(如更新操作导致行长度增加)。 - **作用**: - 当数据块的空闲空间比例低于PCTFREE设置的值时,该数据块将被移出空闲列表(FREELIST),不再用于插入新行[^2]。 - 例如,PCTFREE=10默认值)表示数据块中保留10%的空间用于更新,剩余90%的空间可用于插入新行。 - **适用场景**: - 如果表中数据经常被更新且更新后数据长度增加,应设置较高的PCTFREE(如20%~30%)[^3]。 ### 2. PCTUSED - **含义**:指定数据块**可重新插入新行**的阈值。当数据块的使用空间比例低于PCTUSED时,该块会被重新加入空闲列表(FREELIST)。 - **作用**: - 与PCTFREE协同工作:当块中已用空间降至PCTUSED以下时,Oracle会重新将该块加入空闲列表,允许插入新行。 - 例如,PCTFREE=10PCTUSED=40(默认组合): - 插入数据直到块使用率达到90%(即保留10%空闲空间)。 - 删除数据后,当块使用率降至40%以下时,该块重新开放插入。 - **注意**:在Oracle 10g及以上版本中,自动段空间管理(ASSM)已取代FREELIST机制,PCTUSED参数不再生效[^3]。 ### 3. INITRANS - **含义**:指定数据块**初始事务槽(ITL)数量**。ITL用于记录并发事务修改块中数据的信息。 - **作用**: - 每个并发事务需要一个ITL槽位。INITRANS定义了块创建时预分配的ITL数量(默认为1~2)。 - 若并发事务数超过INITRANS,Oracle会动态分配额外ITL槽位(受MAXTRANS限制)[^4]。 - **适用场景**: - 高并发写入场景(如OLTP系统)需增加INITRANS(如5~10),避免事务等待ITL槽位。 ### 4. MAXTRANS - **含义**:指定数据块**最大事务槽(ITL)数量**上限。 - **作用**: - 限制一个数据块可同时处理的最大事务数(默认255)。当ITL需求超过INITRANS时,Oracle会扩展ITL数量直至MAXTRANS值[^4]。 - 若块空间不足,即使未达MAXTRANS也可能无法分配更多ITL。 - **注意**:Oracle 10g后MAXTRANS默认为255且不可修改,实际ITL数量受块空间限制。 ### 参数关系示意图 ```plaintext 数据块空间管理流程: 1. 插入数据 → 块使用率 < (100% - PCTFREE) → 保持空闲状态 2. 使用率 ≥ (100% - PCTFREE) → 移出空闲列表 3. 删除数据 → 块使用率降至PCTUSED以下 → 重新加入空闲列表 ``` ### 典型配置示例 | 场景 | PCTFREE | PCTUSED | INITRANS | MAXTRANS | |---------------------|---------|---------|----------|----------| | 频繁更新的OLTP表 | 20 | 40 | 5 | 255 | | 只读的数据仓库表 | 5 | 无效 | 1 | 255 | | 高并发插入/删除的表 | 10 | 40 | 10 | 255 | > **关键总结** > - PCTFREEPCTUSED共同控制块的空间重用(ASSM下仅PCTFREE有效) > - INITRANS和MAXTRANS控制并发事务处理能力 > - 参数设置需结合实际业务负载调整[^1][^4] §§相关问题§§ 1. 在自动段空间管理(ASSM)下,PCTUSED参数是否还有效? 2. 如何查看和修改现有表的存储参数? 3. ITL竞争(ITL Waits)的表现和解决方法是什么? 4. 为什么高并发场景需要增加INITRANS值?</think>### Oracle 存储参数详解 以下是对 PCTFREEPCTUSED、INITRANS、MAXTRANS 参数的作用和含义的完整解析: --- #### 1. **PCTFREE** - **含义**:数据块中**保留的空闲空间百分比**(默认 10%) - **作用**: - 为现有行的**更新预留空间**(如字段值变大) - 当数据块的空闲空间 ≤ PCTFREE 时,该块会被移出空闲列表(FREELIST),不再插入新数据[^2] - **应用场景**: - 高更新频率的表需增大 PCTFREE(如 20%~30%) - 只读表可设为 0(无更新需求)[^3] > **示例**:PCTFREE=10 表示块中 10% 空间留给更新,90% 用于初始插入 --- #### 2. **PCTUSED** - **含义**:数据块**可重新插入新行的使用率阈值**(默认 40%) - **作用**: - 当块中已用空间 ≤ PCTUSED 时,块会**重新加入空闲列表** - 与 PCTFREE 协同管理空间重用: $$ \text{插入停止点} = 100\% - \text{PCTFREE} $$ $$ \text{插入重启点} = \text{PCTUSED} $$ - **注意**:在自动段空间管理(ASSM)中此参数失效[^3] > **工作流程**: > 1. 插入数据直到使用率 = 90%PCTFREE=10) > 2. 删除数据使使用率 ≤ 40%PCTUSED=40) > 3. 块重新开放插入 --- #### 3. **INITRANS** - **含义**:数据块**初始事务槽数量**(默认 1~2) - **作用**: - 控制可**并发修改块的事务数** - 每个事务需占用 1 个 ITL(事务槽) - **场景**: - 高并发写入表需增大(如 OLTP 系统设为 5~10) - 避免事务等待 ITL 槽位[^4] --- #### 4. **MAXTRANS** - **含义**:数据块**最大事务槽数量**(默认 255) - **作用**: - 当并发事务超过 INITRANS 时,**动态扩展 ITL 槽的上限** - 实际扩展受块空间限制(可能无法达到 255)[^4] - **注意**:Oracle 10g+ 中此参数已过时,默认固定为 255 --- ### 参数关系图解 ```plaintext 数据块空间管理流程: 1. 插入数据 → 块使用率 < (100% - PCTFREE) → 保持空闲状态 2. 使用率 ≥ (100% - PCTFREE) → 移出空闲列表 3. 删除数据 → 块使用率降至 PCTUSED 以下 → 重新加入空闲列表 ``` ### 典型配置示例 | 场景 | PCTFREE | PCTUSED | INITRANS | MAXTRANS | |---------------------|---------|---------|----------|----------| | 频繁更新的 OLTP 表 | 20 | 40 | 5 | 255 | | 只读的数据仓库表 | 5 | - | 1 | 255 | | 高并发插入/删除的表 | 10 | 40 | 10 | 255 | > **关键总结** > - PCTFREEPCTUSED 控制**空间重用**(ASSM 中仅 PCTFREE 有效) > - INITRANS 和 MAXTRANS 控制**并发事务能力** > - 参数优化需结合数据操作特征(更新/插入/删除比例)[^1][^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值