11.4 BLOCK(数据块)

11.4.1 BLOCK(数据块)的特点:

BLOCK是Oracle进行存储空间IO操作的最小单位,BLOCK的管理方法是区的管理和段管理的具体体现:

1、自动管理方式 如创建表空间时区为本地管理方式,并且将段的存储空间方式设置为AUTO(即ASSM),该表空间的所有块均采用位图自动管理方式。这是系统默认的。

2、空闲列表方式(MSSM) 引入FREELIST概念,以及PCTFREE和PCTUSED两个参数控制可用存储区的大小,避免行迁移现象的发生。这两个参数可在创建表空间时设置,也可在建立数据库的模式对象(表,索引)中设置。模式对象中设置的优先级比表空间的要高。就是说;如表和索引中没有设置,则按表空间的设置,如表空间也没设置,则按自动管理方式管理块。

data block :oracle 11g 标准块:8k,支持2-32k,有block header 、free space 、data 组成

数据块头部:

ITL:事务槽,可以有多个ITL以支持并发事务,每当一个事务要更新数据块里的数据时,必须先得到一个ITL槽,然后将当前事务ID,事务所用的undo数据块地址,SCN号,当前事务是否提交等信息写到ITL槽里。

initrans:初始化事务槽的个数,表默认1, index 默认为2;

maxtrans: 最大的事务槽个数 (默认255)

ROW DIR: 行目录, 指向空闲行起始和结束的偏移量。

考点:使块头增加的可能情况是,row entries增加,增加更多的ITL空间。

空闲列表方式的数据块的管理:

freelist:空闲列表中登记了可以插入数据的可用块,位置在段头,插入表行数据时首先查找该列表。

pctfree:用来为一个块保留的空间百分比,以防止在今后的更新操作中增加一列或多列值的长度。达到该值,从freelist清除该块信息。

pctused:一个块的使用水位的百分比,这个水位将使该块返回到可用列表中去等待更多的插入操作。达到该值,该块信息加入freelist

。这个参数在ASSM下不使用。

行链接:指一行存储在多个块中的情况,这是因为该行的长度超过了一个块的可用空间大小,即行链接是跨越多块的行。

行迁移:指一个数据行由于update语句导致当前块被重新定位到另一个块(那里有充足的空间)中,但在原始块中保留一个指针的情形(PPT-II-470)。原始块中的指针是必需的,因为索引的ROWID项仍然指向原始位置。行迁移是update语句当pctfree空间不足时引起的,它与insert和delete语句无关(考点)。

如何能够知道发生了行链接或行迁移?

查看dba_tables的AVG_ROW_LEN列和CHAIN_CNT列,当CHAIN_CNT有值时,看AVG_ROW_LEN,它表示行的平均长度(byte),如果AVG_ROW_LEN块大小,那么是链接行。

查看发生迁移或连接的行,使用analyze table xx list chained rows; 但命令需要将结果插入chained_rows表,创建此表用utlchained.sql或utlchn1.sql脚本。参见sql referenve中的analyze命令。

SQL> create table t1 (c1 varchar2(20));

SQL>

begin

for i in 1..1000 loop

insert into t1 values(null);

end loop;

end;

/

分析t1表确定无行迁移

SQL> analyze table t1 compute statistics;

SQL> select pct_free,pct_used,avg_row_len,chain_cnt from user_tables where table_name='T1';

AVG_ROW_LEN,它表示行的平均长度(byte)

填充这些空列,再分析t1,有了行迁移

SQL> update t1 set c1='timran is my drt';

SQL> analyze table t1 compute statistics;

SQL> select pct_free,pct_used,avg_row_len,chain_cnt from user_tables where table_name='T1';

move表,再分析t1,行迁移消失。 思考:段重组对于行链接有效吗?

SQL> alter table t1 move;

SQL> analyze table t1 compute statistics;

SQL> select pct_free,pct_used,avg_row_len,chain_cnt,blocks from user_tables where table_name='T1';

考点:对于大部分目的而言,应该用DBMS_STATS包中的过程分析表,但要查看行链接或行迁移信息,只能通过ANALYZE命令检测。

11.4.2 表和数据块(block)的关系

1)什么是高水位线?

高水位线(high-water mark,HWM)

在数据库中,如果把表想象成从左到右依次排开的一系列块,高水位线就是曾经包含了数据的最右边的块。原则上HWM只会增大, 即使将表中的数据全部删除,HWM也不会降低。

HWM不是好事,使用全表扫描时通常要读出HWM以下的所有数据块(尽管该表中可能仅有少量数据),这将白白耗费大量IO资源。

2)两个解决办法可降低HWM:

2.1)移动表,move方法, 将表从一个表空间移动到另一个表空间(也可以在本表空间内move)。

语法:alter table t1 move [tablespace users];

优点:可以清除数据块中的碎片,降低高水位线。

缺点:move需要额外(一倍)的空间。

move过程中会锁表,其他用户不能在该表上做DML或DDL操作。

move之后,相关索引都不可用了,表上的索引需要重建(考点)。

2.2)收缩表,shrink 也叫段重组,表收缩的底层实现的是通过匹配的INSERT和DELETE操作。

它分两个不同的阶段:压缩阶段和降低HWM阶段。(PPT-II-491)

语法:alter table t2 shrink space [cascade][compact];

两个前提:1)表所在的表空间段管理是ASSM方式,因为位图方法才记录有关块实际的满度信息(考点)。2)表上启用了row movement。

你发出alter table t2 shrink space compact; 那么只完成了第一阶段。这是压缩阶段。在业务高峰时可以先完成第一阶段 delete insert

高峰过后,再次alter table t2 shrink space; 因压缩阶段工作大部分已完成,将很快进入第二阶段,DML操作会有短暂的锁等待发生。

测试:

create tablespace timran datafile '/u01/oradata/timran11g/timran01.dbf' size 100m;

create table scott.t2 tablespace timran as select * from dba_objects;

scott:

select max(rownum) from t2;

select table_name, blocks, empty_blocks, num_rows from user_tables where table_name='T2';

analyze table t2 compute statistics;

delete t2 where rownum<=40000;

commit;

analyze table t2 compute statistics for table;

select table_name, blocks, num_rows from user_tables where table_name='T2';

这时候,num_rows已经减掉了40000条, 但 blocks 并没有减少, 说明HWM没有下降。

做shrink

alter table t2 enable row movement; //使能行移动

进行第一步----压缩阶段

alter table t2 shrink space compact;

analyze table t2 compute statistics for table;

select table_name, blocks, num_rows from user_tables where table_name='T2';

//HWM不会降低。

进行第二步----降低HWM阶段

alter table t2 shrink space;

analyze table t2 compute statistics for table;

select table_name, blocks, num_rows from user_tables where table_name='T2';

//HWM已经降低。

考点:

1,表收缩操作生成undo和redo数据,索引可以得到维护。

2,收缩分为两个阶段 第一阶段是压缩阶段,第二阶段是降低HWM阶段。SHRINK不占用额外的空间。

3,可以单独完成第一阶段,即SHRINK SPACE COMPACT 此阶段不降低HWM,DML操作几乎不受影响。

4,可以级联相关的段一起收缩,即SHRINK SPACE CASCADE。

5,段必须ASSM管理方式,且使能行移动,否则不能收缩,如果不满足这两个前提,MOVE就是重组表的唯一方式。

6,不能收缩MSSM管理,或有LONG列表或是有refresh_on_commit物化视图的表。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31485142/viewspace-2151295/,如需转载,请注明出处,否则将追究法律责任。

oracle数据block默认是,oracleBLOCK(数据块)相关推荐

  1. R语言head函数和tail函数获取dataframe、列表list、向量vector的头部和尾部数据:tail提取数据对象的尾部数据、head提取数据对象的头部数据、默认6条数据、自定义设置返回条数

    R语言head函数和tail函数获取dataframe.列表list.向量vector的头部和尾部数据:tail提取数据对象的尾部数据.head提取数据对象的头部数据.默认6条数据.自定义设置返回条数 ...

  2. 解析oracle的dump文件,读懂数据块dump文件信息

    尊重作者著作,转自http://blog.csdn.net/guoyjoe/article/details/8567076 -------------------------------------- ...

  3. Oracle corrupt block(坏块) 详解

    转自:http://blog.csdn.net/tianlesoftware/article/details/5024966 一. 坏块说明 1.1 相关链接 在看坏块之前,先看几个相关的链接,在后面 ...

  4. oracle 042 第八章:管理数据和并发处理

    SQL INSERT 一次创建一行. INSERTINTOemployees VALUES (9999,'Bob','Builder','bob@abc.net',NULL,SYSDATE, 'IT_ ...

  5. ORACLE 常用的SQL语法和数据对象

    一.数据控制语句 (DML) 部分 1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, --) VALUES ( 值1, 值2, --); INSE ...

  6. Oracle 11g_管理表空间和数据文件(7)

    1. 表空间和数据文件的关系 在Oracle数据库中,表空间和数据文件之间的关系非常密切,这二者之间相互依存,也就是说,创建表空间时必须创建数据文件,增加数据文件时也必须指定表空间. Oracle磁盘 ...

  7. oracle取每日固定时间,Oracle查询每天固定时间段的数据

    select * from GPS_LOG t where to_char(t.gps_time,'hh24:mm:ss')>='15:30:00'and to_char(t.gps_time, ...

  8. Hadoop SequenceFile BLOCK压缩类型写入数据机制

    2019独角兽企业重金招聘Python工程师标准>>> 最近测试Hadoop数据一致性,发现Hadoop SequenceFile BLOCK压缩类型(io.seqfile.comp ...

  9. 区块链相关数据报表_重磅|京东云区块链数据服务(BDS)正式开源

    今天,"区块链+京东云 大有可为"战略合作媒体沟通会在北京国家会议中心召开.会上,京东云与京东数科宣布在区块链技术服务领域深度合作,重磅发布了智臻链"云"建设规 ...

最新文章

  1. 【ACM】杭电OJ 1002
  2. 学术 | DeepMind最新研究:使用更简单的环境就能检测AI是否安全
  3. 源码级深挖AQS队列同步器
  4. ML_SVM的菜鸟实现
  5. HDU 2084 数塔 DP
  6. CentOS7中离线安装Docker与卸载
  7. thinkphp5 消息队列thinkphp-queue扩展
  8. C# 根据中文得到全拼
  9. ROS 基础: 在同一个节点里订阅和发布消息
  10. unity3D ——自带寻路Navmesh入门教程(一)(转)
  11. 武汉理工计算机专考研专业课,2017武汉理工大学考研计算机专业课真题
  12. 高响应比优先调度算法的模拟(非抢占式C++)
  13. 实验楼与蓝桥网站合并 FAQ
  14. 【重要】股票收益互换
  15. 假定系统四个进程,p1、p2、p3、p4三种资源r1、r2、r3数量分别为9、3、6在T0时刻资源分配为下表:
  16. 双阈值检测阈值选择_通过阈值进行计算机视觉高级车道检测
  17. unity中射线碰撞检测总结
  18. 如何搭建一套有价值的团队知识管理体系?
  19. MAX31856 高精度热电偶至数字输出转换器开发笔记
  20. Latex常用公式总结

热门文章

  1. 设计模式的理解 : 门面模式、外观模式 (Facade)
  2. python三种基本控制结构_Python学习手册之控制结构(一)
  3. C/Cpp / STL / vector 释放内存的方案
  4. OS / 理论 / 什么是原子操作?
  5. Openwrt系统初始时间
  6. 启动oracle00119,oracle启动报ORA-00119错误
  7. oracle insert 数组,oracle 数组 批量insert
  8. button theme
  9. jquery 操作字符串、数组、对象常用方法
  10. 编译原理——语言处理程序