Tuning 13 Using oracle blocks Efficiently

image

推进使用自动管理 automatic segment

image

1 个 Blocks = 2的幂次方倍

tablespace 像一块地

segment 像一个房子

extents 向一个装砖头的框

blocks 像砖头

image

segment 一次性最少要分配一个 extents

image

推荐使用 UNIFORM 在创建 extent 时.

image

image

grant connect, resource to mark;

create table t(id int, name char(10));

image

注意, 执行第一个命令时无法得到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.

image

image

image

oracle 的全表扫描会扫描到高水位的地方

image

可以看到高水位是在一个extent里的block 的情况.

image

image

image

image

image

image

image

小块对 OLTP 比较好

image

OLAP 使用大块, 决策支持, 数据仓库 等

image

image

只要记住PCTFREE 就行了, 下边的 PCTUSED 不用考虑

image

Migration: 迁移, 在block中的数据体积变大了, 那么它首先会在本块中寻找空间, 但是如果本块中没找到, 就会将这个信息移动到另一个块里, 并且在原来块里留下指针, 注意这样要读2次I/O, 因为前一个块只读到了一个指针. 所以要尽量避免这个事情发生.

Chaining: 这条记录太大了, 大到整个block 都放不下了, 那没办法了, 只能将这个信息分部分存储在两个或多个块里, 这样也要读2次I/O. 发生这个的原因或者是block小或者是表设计不当

image

image

image

move 的意思是将这个表copy到另一个表, 然后再将这个表删除

image

监控索引, 在恰当的时候对索引进行rebuild 等内容.

image

image

image

image
下边两个过时了, 在10g,11g都不这么用了

image

image

原文地址:https://www.cnblogs.com/moveofgod/p/3640026.html