oracle表段区块的简述,Oracle存储结构-段区块

一个段建立以后首先会分配一个区,区中包括含8个块,这时执行insert插入数据,当这个区写满后,会在分配一个区

1.一个段建立以后,Oracle如何给段分配区?

2.段分配到区以后,有了空闲空间,应该如何进行使用和管理呢?

段与区的管理方式

1.区的管理方式

数据字典

本地--------自动

手动CREATE SMALLFILE TABLESPACE "DATA1" DATAFILE '/ora/oracle/oradata/orcl/data1_01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

区管理---- 本地

2.段管理方式

手工管理方式

自动管理方式

段管理---- 自动

分析表:

SQL> analyze table T2 compute statistics;

SQL> select segment_name,blocks,extents,bytes,segment_type,tablespace_name from dba_segments where segment_name='T2';

6fb5c52e77e169dd39106ba4a8235b12.png

对表进行统计分析1

SQL> exec dbms_stats.gather_table_stats('SYS','T2');

bb3f2c4171cf85b273af9ea84f718b1b.png

bd561999bf8bec18b18dfbfca0e7fbc1.png

SQL> select table_name,NUM_ROWS,BLOCKS,EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT,AVG_ROW_LEN FROM user_tables where table_name='T2';

5a9bdced13c853262245e5e42224f4c2.png

索引列的统计信息的SQL语句

SQL>select BLEVEL ,LEAF_BLOCKS,DISTINCT_KEYS,AVG_LEAF_BLOCKS_PER_KEY,AVG_DATA_BLOCKS_PER_KEY,CLUSTERING_FACTOR from USER_INDEXES

3583173c6d96547546b25b83c469a9de.png

57d68c98caf8e667ee8e42bcda2a23a5.png

列的统计信息

SQL> select NUM_DISTINCT,LOW_VALUE,HIGH_VALUE,DENSITY,NUM_NULLS,NUM_BUCKETS,HISTOGRAM from USER_TAB_COLUMNS;

33f2d7ecad4fc1fe3bb853695579141d.png

区管理:本地  段管理:自动

查看表dba_extents的结构

b9510e1e705d87abd30e9a989dfe09f1.png

SQL> select * from dba_extents where segment_name='T2';

36acc12a25933651e5c41a0d91c0ca39.png

区的自动管理:当连续的分配了很多区后,Oracle会认为目前处理的数据较大,一次性的分配大的区。

高水位线:一段建立了,分配一个区,区有很多块,在有数据表时,段会使用区中的块,高水位线指的是段使用的最后一个块

高水位线的意义:是Oracle数据库对表进行扫描时,代表最后一个位置

问题:在将数据删除后,高水位线还是在原来的位置,并没有随着数据的删除而下降

例子:假如一共有10万个块,高水位线在1000,删除1000块中保存的数据,高水位线还是在1000的位置。

高水位线影响得是全表扫描(对高水位线以下的)

例子:

先对表进行分析,在查询表相关信息

4d31dba5d2086fbbb014b2e2757184a8.png

将表中数据删除后,在进行分析以及查看

9e2ea8dd04fc3dba8fda580cebcd3845.png

6274d4169a3cd8e7191d5f57ad11b378.png

f66138e9fe1042ef745fc5c887d190b1.png

降低高水位线

SQL> truncate table T2;

027714e933ae963097a995dcb74045f2.png

块头部信息 8K  块:物理地址

块属于哪个空间

事务槽 ZTL

行目录

块是从底下开始用的

块头是从上面开始用的

中间是空闲空间

行与行之间是串起来用的(所有行是连在一起的)

第一行头部连接第二行尾部,整体看起来貌似是一行,其实是多行

假如需要查找块中3行4列的数据,这是就需要用到块头部的行目录了

首先在行目录中找到第三行的起点,起点后面跟的是第一列的列宽,跳过列宽,就可以找到第四列。

数据库默认大小8k show parameter block;

37e101ed1ced652932d944d0be38fda3.png

行链接与行迁移

正常情况下:一个块里放多行,不允许行跨块

PCT_free空间是为了在进行update,增加空间的时候,不至于使块溢出

行链接:一个行10k,一个块8k,块是存不下这一 行,所以一个块存8k另一个块存2k,第一个块儿上写上第二个块的地址,行链接。

行迁移:由于PCT_free空间过小,update在更新的时候,空间不够用,将整个刚迁移出来,在迁移的位置上写上迁移的地址

如果行迁移过多的话,就会导致分为一个数据块实际上访问了两个数据块

如何判断行链接与行迁移?

行的平均长度>块长度---- 块大小的问题

行的平均长度

这需要对表进行重新的整理,将表导出再导入。

SELECT table_name,NUM_ROWS,BLOCKS, EMPTY_BLOCKS,AVG_SPACE,CHAIN_CNT, AVG_ROW_LEN

FROM USER_TABLES where table_name='TEST2';

d0e1498af2e052592388cc4c715f33df.png

从结果看目前

CHAIN_CNT 的值是 0

就是行迁移行链接数量值是0

说明在这方面做得比较好

91d912f818aa7dc4bd3c8c05da14f643.png

标签:存储,AVG,BLOCKS,name,水位,SQL,Oracle,table,区块

来源: https://www.cnblogs.com/KAJIA1/p/12084631.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值