Oracle pctfree 和 pctused 详解

文章目录

1 概述

1. 说明
   (1) pctfree 和 pctused 是 create table 时设置的参数
    -- 可在创建表时指定,也可在创建表后修改,但请注意,修改后的值,仅对修改后的数据有影响
   (2) 在 Oracle 11g 中,表空间默认使用 ASSM(自动段空间管理) -- 推荐
       此时仅能指定 pctfree, -- 默认 10,一般不做修改
       除非设置为 MANUAL(手动),pctfree 和 pctused 才能都设置   
2. 举个例子:若一个块的 pctfree = 10,pctused = 40
   (1) 当一个块的使用率达到 90% 及以上(即 pctfree <= 10)时
       Oracle 将该块从 freelist 中移除,并停止使用该块来 insert 数据(但可 update(2) 之后该块发生了 delete,使该块的使用率下降,
       当使用率下降到 40% 及以下(pctused <= 40)时
       Oracle 重新将该块加入 freelist,此时,又可使用 insert

 
 
解释默认大小(%)预留操作
pctfree块中 可用空间 的最小百分比
(Minimum percentage of free space in a block)
10update
pctused块中 已使用空间 的最小百分比
(Minimum percentage of used space in a block)
40insert

2 管理

2.1 查询 pctfree 和 pctused 大小

select t.owner,
       t.table_name,
       t.pct_free,
       t.pct_used
  from dba_tables t
 order by 1,2;
-- 修改
alter table <tablename> pctfree <values>;

 
 

2.2 表空间:assm(自动段空间管理)

select t.tablespace_name,
       t.segment_space_management -- auto(自动) | manual(手动) 
  from dba_tablespaces t;

 
 

3 扩展

3.1 行链接 row chaining

1. 当一行数据被 insert 时,可能造成数据块 '无法容纳' 的情况
2. oracle 会将这行数据存储在一个 '数据块链' 之中
3. 比如 insert 一个数据类型为 long 或者 long raw 列的数据行

 
 

3.2 行迁移 row migrating

1. 当一行数据被 update 时,可能导致 '长度变长',
   原数据块的可用空间 '无法容纳' 增长后的数据行。
2. oracle 会将这行数据 '迁移' 到新的数据块中,
   并在原来所在位置保存一个指向新数据块的 '指针',被迁移的数据行 rowid 保持不变
3. 结论:当发生 '行链接' or '行迁移'时,I/O性能将下降。
        因为这将访问超过 1 个以上的数据块

 
 
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值