一、产生原因:

表产生大量碎片,是因为在delete引起的。delete 删除表并没有回收高水位线
查询表碎片化程度的查语句:
–查找碎片化程度较高的表
SELECT * FROM (
SELECT
TABLE_NAME,
(BLOCKS8192/1024/1024) AS HWH_MB, --已占用大小(高水位线)
(NUM_ROWS
AVG_ROW_LEN/1024/1024) AS USED_MB , --实际大小
ROUND((NUM_ROWSAVG_ROW_LEN/1024/1024)/(BLOCKS8192/1024/1024),3) AS USED_RATE --实际使用率
FROM USER_TABLES WHERE BLOCKS >0
)
WHERE USED_RATE <0.3 (使用率不到30%)

二:演示步骤

1.创建表并插入数据

(1)创建表
create table T3(id int, major varchar(255));

(2)创建插入数据的存储过程 插入100万条数据
CREATE OR REPLACE PROCEDURE P_INSERT_T3 AS
I INT DEFAULT 1;
BEGIN
FOR I IN 1 … 1000000 LOOP
INSERT INTO T3 (ID, MAJOR) VALUES (I, ‘金融学院-’ || I);
END LOOP;
COMMIT;
END;
(3)调用存储过程,插入1亿条数据
BEGIN
P_INSERT_T3;
END;
(4)同时建立索引
create index idx_T3_id on T3( id);

(5)统计表T3的信息
这里的CDM表示用户名 ,T3表示表名
BEGIN
dbms_stats.gather_table_stats(‘CDM’,‘T3’,CASCADE=>TRUE);
END;
analyze table T3 compute statistics;

(6)查看表的数据信息
6.1查询表使用的块、空块、行数
SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name =‘T3’;
– blocks 4150
– empty_blocks 74
– num_rows 1000000

6.2查看表段大小
select sum(bytes)/1024/1024 from USER_segments where segment_name=‘T3’; --33m

6.3 查看表的索引段大小
select sum(bytes)/1024/1024 from USER_segments where segment_name=‘IDX_T3_ID’; --18m

6.4查询表的空间使用情况
SELECT
TABLE_NAME,
(BLOCKS * 8192 / 1024 / 1024) “高水位空间MB”,
(NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) “已用空间MB”,
blocks10/1008192/1024/1024 “预留空间MB(pctfree)”,
(BLOCKS * 8192 / 1024 / 1024)-(NUM_ROWS * AVG_ROW_LEN / 1024 / 1024)-(blocks10/1008192/1024/1024) “浪费空间MB”
FROM USER_TABLES
WHERE table_name = ‘T3’;

(7)执行执行计划,查看查询语句的CPU消耗情况
explain plan for select * from T3 ;
commit;
select * from table(dbms_xplan.display);

2.删除表之后

(1).删除表:
delete from T3 where id>3000;
commit;
select count(*) from T3; --3000
(2)统计表信息并查看
–执行删除操作之后分析表
BEGIN
dbms_stats.gather_table_stats(‘CDM’,‘T3’,CASCADE=>TRUE);
END;
analyze table T3 compute statistics;

–执行下面语句发现,已使用的块和空块都没有变少,跟删除之前一样,只是行数变少了
SELECT blocks, empty_blocks, num_rows FROM user_tables WHERE table_name =‘T3’;
– blocks 4150
– empty_blocks 74
– num_rows 3000

–执行下面语句发现,高水位线还是跟之前一致,已用空间变少了,但是浪费的空间变多了
SELECT
TABLE_NAME,
(BLOCKS * 8192 / 1024 / 1024) “高水位空间MB”,
(NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) “已用空间MB”,
blocks10/1008192/1024/1024 “预留空间MB(pctfree)”,
(BLOCKS * 8192 / 1024 / 1024)-(NUM_ROWS * AVG_ROW_LEN / 1024 / 1024)-(blocks10/1008192/1024/1024) “浪费空间MB”
FROM USER_TABLES
WHERE table_name = ‘T3’;

(3)查看执行计划的消耗
–删除表之后查看执行计划消耗 经过查实,与删表之前的消耗资源是一样的
explain plan for select * from T3 ;
commit;
select * from table(dbms_xplan.display);

3.表碎片整理的步骤

进行表的碎片整理
alter table T3 enable row movement; --开启行移动执行shrink之前, 必须开启行移动
alter table T3 shrink space cascade; --收缩表
alter table T3 disable row movement; --关闭行移动

4.碎片整理后查看表的信息

(1)统计分析表的信息
BEGIN
dbms_stats.gather_table_stats(‘CDM’,‘T3’,CASCADE=>TRUE);
END;
analyze table T3 compute statistics;

(2)查看表使用的块大小
select blocks,empty_blocks,num_rows from user_tables where table_name=‘T3’;
– blocks 11
– empty_blocks 5
– num_rows 3000

(3)查看表使用的段大小
select sum(bytes)/1024/1024 from user_segments where segment_name=‘T3’; --0.125
select sum(bytes)/1024/1024 from user_segments where segment_name=‘IDX_T1_ID’ --0.125

(4)查看表水位线和占用空间
–高水位线明显变小了, 浪费空间也变小了
SELECT
TABLE_NAME,
(BLOCKS * 8192 / 1024 / 1024) “高水位空间MB”,
(NUM_ROWS * AVG_ROW_LEN / 1024 / 1024) “已用空间MB”,
blocks10/1008192/1024/1024 “预留空间MB(pctfree)”,
(BLOCKS * 8192 / 1024 / 1024)-(NUM_ROWS * AVG_ROW_LEN / 1024 / 1024)-(blocks10/1008192/1024/1024) “浪费空间MB”
FROM USER_TABLES
WHERE table_name = ‘T3’;

(5)查看执行计划的消耗:
查看消耗很少,同时可以看到,经过shrink 碎片整理,所以也没有丢失
explain plan for select * from T3 where id=1001 ;
commit;
select * from table(dbms_xplan.display);

oracle中表的碎片化演示和整理步骤相关推荐

  1. oracle 表的碎片化整理

    数据库在日常的使用过程中,不断的insert,delete,update,导致表和索引出现碎片.这会导致HWM之前有很多的空闲空间,而oracle在做全表扫描的时候会读取HWM一下的所有块,这样会产生 ...

  2. 如何整理碎片化的知识?

    如何整理碎片化的知识? 首先感叹一句:知识管理,真是经久不衰的话题啊!因为网页阅读的增多.大部头阅读的减少,导致目前获取的大部分知识属于碎片化的知识.这些碎片化的知识,因为体量小,阅读容易,有快速知道 ...

  3. oracle 数据库碎片化管理

    ******************************************************************************** 1.表空间碎片 *********** ...

  4. oracle 表碎片化处理,oracle数据库碎片化管理

    ******************************************************************************** 1.表空间碎片 *********** ...

  5. 我为什么放弃Pocket使用Pinbox来整理收藏碎片化知识

    我为什么放弃Pocket使用Pinbox来整理收藏碎片化知识 在收藏这一块,Pocket可以说是算得上老大了,也是我用了好多年的一款收藏App,pocket 主要是用作稍后阅读,但我为什么放弃pock ...

  6. mysql 整理磁盘空间_mysql 数据库磁盘满了,进行碎片化整理的相关问题

    一.进行碎片化整理的步骤: 1,进行磁盘碎片化整理.原因是datafree占据的空间太多啦.具体可以通过这个sql查看. SELECT CONCAT(TRUNCATE(SUM(data_length) ...

  7. oracle 碎片超过1000有啥危害,碎片化带来的坏处作文1000字

    如今的时代是碎片化的时代,如今的生活是碎片化的生活.一切的一切都被冠以碎片化. 的确,从字面上看,我们的一切确实被碎片化了.诸如上学在车上,我们拿出碎片化的工具---手机,上面镶嵌着玲琅满目的软件,我 ...

  8. oracle 碎片高的表,表的碎片化-oracle狂热分子-ChinaUnix博客

    表的碎片和文件系统的碎片化的是不一样的,当随着在一个表上的DML的上 操作越来越多时,HWM之前可能有很多空闲空间,而在读取表时HWM以下的块都会被 读进来,这样会产生更多的IO,从而影响性能.只有在 ...

  9. MySQL表碎片化(Table Fragmentation)以及处理

    关于MySQL中表碎片化(Table Fragmentation)产生的原因: 简单总结一下,MySQL Engine不同,碎片化的原因可能也有所差别.这里没有深入理解.分析这些差别.此文仅以Inno ...

最新文章

  1. android 比较两个list,比较两个List的内容是否相等
  2. javaee_SSH
  3. 微信小程序 保存持久化cookie
  4. ibatise 没有大于等于吗_库里+杜兰特并没有大于等于2!或许他和库里搭配将更强...
  5. Fragment 和 FragmentActivity的使用(二)
  6. Cocos2d-x学习笔记(十一)动作
  7. Java类加载信息的顺序:包括静态代码快、静态类变量、非静态代码快、构造方法、普通方法...
  8. 西北农林科技大学计算机考研难吗,西北农林科技大学考研难吗?一般要什么水平才可以进入?...
  9. excel 日期格式 mysql_EXCEL和MySQL日期格式之间的转换
  10. 仿微信app项目流程
  11. js表单验证 - 数字
  12. 孙玄:分布式系统选主怎么玩
  13. 教育培训机构屡遭投诉?湖南中创教育给出三点建议
  14. 酒店数据泄露门后万豪会员计划遭重创
  15. Repository “http://xxx@git.xxx.net/xxx/xxx.git”not found 解决
  16. 通俗易懂解释汉明码(附MATLAB实现代码)
  17. PIC单片机之PWM PWM原理
  18. 密态数字经济:用密码去“深海淘珍珠”
  19. 在微信公众号中添加外部的链接图文教程
  20. 血拼2011中国移动开发者大会门票超低价团购!(已结束)

热门文章

  1. Linux实用技巧之screen(离线使用服务器训练模型的神器)
  2. 【MySQL】PDD数据分析笔试题
  3. 技术名词:Q-in-Q
  4. 利用贝壳物联远程控制树莓派或windows关机、重启
  5. php调用父类构造,php调用父类构造方法是什么
  6. 浅谈水下声速剖面及声线追踪算法
  7. java做校园一卡通技术_基于JAVACARD校园一卡通设计及实现.doc
  8. nacos 官方以及社区文档
  9. Java @Bean 概念和使用
  10. 常用JavaScript控制结构语句,绝对值,累加,阶乘,循环