oracle中表的碎片化演示和整理步骤
一、产生原因:
表产生大量碎片,是因为在delete引起的。delete 删除表并没有回收高水位线
查询表碎片化程度的查语句:
–查找碎片化程度较高的表
SELECT * FROM (
SELECT
TABLE_NAME,
(BLOCKS8192/1024/1024) AS HWH_MB, --已占用大小(高水位线)
(NUM_ROWSAVG_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中表的碎片化演示和整理步骤相关推荐
- oracle 表的碎片化整理
数据库在日常的使用过程中,不断的insert,delete,update,导致表和索引出现碎片.这会导致HWM之前有很多的空闲空间,而oracle在做全表扫描的时候会读取HWM一下的所有块,这样会产生 ...
- 如何整理碎片化的知识?
如何整理碎片化的知识? 首先感叹一句:知识管理,真是经久不衰的话题啊!因为网页阅读的增多.大部头阅读的减少,导致目前获取的大部分知识属于碎片化的知识.这些碎片化的知识,因为体量小,阅读容易,有快速知道 ...
- oracle 数据库碎片化管理
******************************************************************************** 1.表空间碎片 *********** ...
- oracle 表碎片化处理,oracle数据库碎片化管理
******************************************************************************** 1.表空间碎片 *********** ...
- 我为什么放弃Pocket使用Pinbox来整理收藏碎片化知识
我为什么放弃Pocket使用Pinbox来整理收藏碎片化知识 在收藏这一块,Pocket可以说是算得上老大了,也是我用了好多年的一款收藏App,pocket 主要是用作稍后阅读,但我为什么放弃pock ...
- mysql 整理磁盘空间_mysql 数据库磁盘满了,进行碎片化整理的相关问题
一.进行碎片化整理的步骤: 1,进行磁盘碎片化整理.原因是datafree占据的空间太多啦.具体可以通过这个sql查看. SELECT CONCAT(TRUNCATE(SUM(data_length) ...
- oracle 碎片超过1000有啥危害,碎片化带来的坏处作文1000字
如今的时代是碎片化的时代,如今的生活是碎片化的生活.一切的一切都被冠以碎片化. 的确,从字面上看,我们的一切确实被碎片化了.诸如上学在车上,我们拿出碎片化的工具---手机,上面镶嵌着玲琅满目的软件,我 ...
- oracle 碎片高的表,表的碎片化-oracle狂热分子-ChinaUnix博客
表的碎片和文件系统的碎片化的是不一样的,当随着在一个表上的DML的上 操作越来越多时,HWM之前可能有很多空闲空间,而在读取表时HWM以下的块都会被 读进来,这样会产生更多的IO,从而影响性能.只有在 ...
- MySQL表碎片化(Table Fragmentation)以及处理
关于MySQL中表碎片化(Table Fragmentation)产生的原因: 简单总结一下,MySQL Engine不同,碎片化的原因可能也有所差别.这里没有深入理解.分析这些差别.此文仅以Inno ...
最新文章
- android 比较两个list,比较两个List的内容是否相等
- javaee_SSH
- 微信小程序 保存持久化cookie
- ibatise 没有大于等于吗_库里+杜兰特并没有大于等于2!或许他和库里搭配将更强...
- Fragment 和 FragmentActivity的使用(二)
- Cocos2d-x学习笔记(十一)动作
- Java类加载信息的顺序:包括静态代码快、静态类变量、非静态代码快、构造方法、普通方法...
- 西北农林科技大学计算机考研难吗,西北农林科技大学考研难吗?一般要什么水平才可以进入?...
- excel 日期格式 mysql_EXCEL和MySQL日期格式之间的转换
- 仿微信app项目流程
- js表单验证 - 数字
- 孙玄:分布式系统选主怎么玩
- 教育培训机构屡遭投诉?湖南中创教育给出三点建议
- 酒店数据泄露门后万豪会员计划遭重创
- Repository “http://xxx@git.xxx.net/xxx/xxx.git”not found 解决
- 通俗易懂解释汉明码(附MATLAB实现代码)
- PIC单片机之PWM PWM原理
- 密态数字经济:用密码去“深海淘珍珠”
- 在微信公众号中添加外部的链接图文教程
- 血拼2011中国移动开发者大会门票超低价团购!(已结束)