推进使用自动管理 automatic segment
1 个 Blocks = 2的幂次方倍
tablespace 像一块地
segment 像一个房子
extents 向一个装砖头的框
blocks 像砖头
segment 一次性最少要分配一个 extents
推荐使用 UNIFORM 在创建 extent 时.
grant connect, resource to mark;
create table t(id int, name char(10));
注意, 执行第一个命令时无法得到empty blocks 的数值, 需要执行 analyze table t compute statistics 才能得到 empty block (在 dba_tables)
alter table t allocate extent; -- 增加 extent
alter table t allocate extent (size 10m); -- 直接扩充10M, 因为这个环境一个extent是1m, 这样就扩充了10个extent.
oracle 的全表扫描会扫描到高水位的地方
可以看到高水位是在一个extent里的block 的情况.
小块对 OLTP 比较好
OLAP 使用大块, 决策支持, 数据仓库 等
只要记住PCTFREE 就行了, 下边的 PCTUSED 不用考虑
Migration: 迁移, 在block中的数据体积变大了, 那么它首先会在本块中寻找空间, 但是如果本块中没找到, 就会将这个信息移动到另一个块里, 并且在原来块里留下指针, 注意这样要读2次I/O, 因为前一个块只读到了一个指针. 所以要尽量避免这个事情发生.
Chaining: 这条记录太大了, 大到整个block 都放不下了, 那没办法了, 只能将这个信息分部分存储在两个或多个块里, 这样也要读2次I/O. 发生这个的原因或者是block小或者是表设计不当
move 的意思是将这个表copy到另一个表, 然后再将这个表删除
监控索引, 在恰当的时候对索引进行rebuild 等内容.