Alter index coalesce VS shrink space
SQL> conn maclean/maclean
Connected./* 测试使用版本10.2.0.4 * /SQL> select * from v$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production/* 建立测试用表YOUYUS,高度为3 */SQL> drop table YOUYUS;
Table dropped.SQL> create table YOUYUS as select rownum t1,rpad('A',20,'B') t2 from dual connect by level<=999999;
Table created.SQL> create index ind_youyus on youyus(t1,t2) nologging;
Index created.SQL> analyze index IND_YOUYUS validate structure;
Index analyzed./*
大家因该很熟悉 analyze index .. validate structure 命令 ,实际上该命令存在一个兄弟:
analyze index IND_YOUYUS validate structure online,
加上online子句后validate structure可以在线操作,但该命令不会填充index_stats临时视图
*/SQL> set linesize 200;
SQL> set linesize 200;
SQL> select height,2 blocks,3 lf_blks,4 lf_rows_len,5 lf_blk_len,6 br_blks,7 br_rows,8 br_rows_len,9 br_blk_len,10 btree_space,11 used_space,12 pct_used13 from index_stats;HEIGHT BLOCKS LF_BLKS LF_ROWS_LEN LF_BLK_LEN BR_BLKS BR_ROWS BR_ROWS_LEN BR_BLK_LEN BTREE_SPACE USED_SPACE PCT_USED
---------- ---------- ---------- ----------- ---------- ---------- ---------- ----------- ---------- ----------- ---------- ----------3 5376 5154 36979767 7996 9 5153 61784 8028 41283636 37041551 90/* 可以看到IND_YOUYUS索引的基本结构,在初始状态下其block总数为5376,其中页块共5154 *//* 我们在表上执行删除操作,均匀删除三分之一的数据 */SQL> delete YOUYUS where mod(t1,3)=1;
333333 rows deleted.SQL> commit;
Commit complete.SQL> conn maclean/maclean
Connected.SQL> select vs.name, ms.value2 from v$mystat ms, v$sysstat vs3 where vs.statistic# = ms.statistic#4 and vs.name in ('redo size','consistent gets');NAME VALUE
---------------------------------------------------------------- ----------
consistent gets 45
redo size 0SQL> alter index ind_youyus coalesce;Index altered.SQL> select vs.name, ms.value2 from v$mystat ms, v$sysstat vs3 where vs.statistic# = ms.statistic#4 and vs.name in ('redo size','consistent gets');NAME VALUE
---------------------------------------------------------------- ----------
consistent gets 788
redo size 70649500/* coalesce 操作产生了大约67MB的redo数据 */SQL> analyze index IND_YOUYUS validate structure;
Index analyzed.SQL> set linesize 200;
SQL> select height,2 blocks,3 lf_blks,4 lf_rows_len,5 lf_blk_len,6 br_blks,7 br_rows,8 br_rows_len,9 br_blk_len,10 btree_space,11 used_space,12 pct_used13 from index_stats;HEIGHT BLOCKS LF_BLKS LF_ROWS_LEN LF_BLK_LEN BR_BLKS BR_ROWS BR_ROWS_LEN BR_BLK_LEN BTREE_SPACE USED_SPACE PCT_USED
---------- ---------- ---------- ----------- ---------- ---------- ---------- ----------- ---------- ----------- ---------- ----------3 5376 3439 24653178 7996 9 3438 41188 8028 27570496 24694366 90/* 可以看到执行coalesce(合并)操作后页块数量下降到3439,
而branch枝块和root根块的结构是不会变化的,同时coalesc命令并不释放索引上的多余空间,
但索引结构实际占用的空间BTREE_SPACE下降到了27570496 bytes *//* 以下为此时ind_youyus索引的treedump * /[maclean@rh2 ~]$ cat /s01/10gdb/admin/YOUYUS/udump/youyus_ora_5104.trc| \grep "level:";cat /s01/10gdb/admin/YOUYUS/udump/youyus_ora_5104.trc|grep leaf|wc -lbranch: 0x130787c 19953788 (0: nrow: 8, level: 2)branch: 0x1308c41 19958849 (-1: nrow: 450, level: 1)branch: 0x1308eea 19959530 (0: nrow: 447, level: 1)branch: 0x1309195 19960213 (1: nrow: 447, level: 1)branch: 0x130943e 19960894 (2: nrow: 447, level: 1)branch: 0x13096e7 19961575 (3: nrow: 447, level: 1)branch: 0x130××× 19962258 (4: nrow: 447, level: 1)branch: 0x1309c3b 19962939 (5: nrow: 447, level: 1)branch: 0x1309e0f 19963407 (6: nrow: 307, level: 1)
3439/* 清理测试现场 */SQL> drop table YOUYUS;
Table dropped.SQL> create table YOUYUS as select rownum t1,rpad('A',20,'B') t2 from dual connect by level<=999999;
Table created.SQL> create index ind_youyus on youyus(t1,t2) nologging;
Index created.SQL> delete YOUYUS where mod(t1,3)=1;
333333 rows deleted.SQL> commit;
Commit complete.SQL> conn maclean/maclean
Connected.
SQL> select vs.name, ms.value2 from v$mystat ms, v$sysstat vs3 where vs.statistic# = ms.statistic#4 and vs.name in ('redo size','consistent gets');NAME VALUE
---------------------------------------------------------------- ----------
consistent gets 45
redo size 0SQL> alter index ind_youyus shrink space;Index altered.SQL> select vs.name, ms.value2 from v$mystat ms, v$sysstat vs3 where vs.statistic# = ms.statistic#4 and vs.name in ('redo size','consistent gets');NAME VALUE
---------------------------------------------------------------- ----------
consistent gets 2951
redo size 90963340/* SHRINK SPACE操作产生了86MB的redo数据,多出coalesce时的28% */SQL> analyze index IND_YOUYUS validate structure;Index analyzed.SQL> set linesize 200;
SQL> select height,2 blocks,3 lf_blks,4 lf_rows_len,5 lf_blk_len,6 br_blks,7 br_rows,8 br_rows_len,9 br_blk_len,10 btree_space,11 used_space,12 pct_used13 from index_stats;HEIGHT BLOCKS LF_BLKS LF_ROWS_LEN LF_BLK_LEN BR_BLKS BR_ROWS BR_ROWS_LEN BR_BLK_LEN BTREE_SPACE USED_SPACE PCT_USED
---------- ---------- ---------- ----------- ---------- ---------- ---------- ----------- ---------- ----------- ---------- ----------3 3520 3439 24653178 7996 9 3438 41188 8028 27570496 24694366 90/* 以下为此时ind_youyus索引的treedump * /[maclean@rh2 ~]$ cat /s01/10gdb/admin/YOUYUS/udump/youyus_ora_5125.trc|grep "level:"; \
cat /s01/10gdb/admin/YOUYUS/udump/youyus_ora_5125.trc|grep leaf|wc -lbranch: 0x1309efc 19963644 (0: nrow: 8, level: 2)branch: 0x130b2c1 19968705 (-1: nrow: 450, level: 1)branch: 0x130b56a 19969386 (0: nrow: 447, level: 1)branch: 0x130b815 19970069 (1: nrow: 447, level: 1)branch: 0x130babe 19970750 (2: nrow: 447, level: 1)branch: 0x130bd67 19971431 (3: nrow: 447, level: 1)branch: 0x130b919 19970329 (4: nrow: 447, level: 1)branch: 0x130b3bf 19968959 (5: nrow: 447, level: 1)branch: 0x1309efe 19963646 (6: nrow: 307, level: 1)
3439/* 索引结构与coalesce命令维护后相同,但shrink space操作释放了索引上的空闲空间 *//* 再次清理测试现场 */SQL> drop table YOUYUS;
Table dropped.SQL> create table YOUYUS as select rownum t1,rpad('A',20,'B') t2 from dual connect by level<=999999;
Table created.SQL> create index ind_youyus on youyus(t1,t2) nologging;
Index created.SQL> delete YOUYUS where mod(t1,3)=1;
333333 rows deleted.SQL> commit;
Commit complete.SQL> conn maclean/maclean
Connected.SQL> select vs.name, ms.value2 from v$mystat ms, v$sysstat vs3 where vs.statistic# = ms.statistic#4 and vs.name in ('redo size','consistent gets');NAME VALUE
---------------------------------------------------------------- ----------
consistent gets 45
redo size 0SQL> alter index ind_youyus shrink space compact;Index altered.SQL> select vs.name, ms.value2 from v$mystat ms, v$sysstat vs3 where vs.statistic# = ms.statistic#4 and vs.name in ('redo size','consistent gets');NAME VALUE
---------------------------------------------------------------- ----------
consistent gets 3208
redo size 90915424SQL> analyze index IND_YOUYUS validate structure;Index analyzed.SQL> set linesize 200;
SQL> select height,2 blocks,3 lf_blks,4 lf_rows_len,5 lf_blk_len,6 br_blks,7 br_rows,8 br_rows_len,9 br_blk_len,10 btree_space,11 used_space,12 pct_used13 from index_stats;HEIGHT BLOCKS LF_BLKS LF_ROWS_LEN LF_BLK_LEN BR_BLKS BR_ROWS BR_ROWS_LEN BR_BLK_LEN BTREE_SPACE USED_SPACE PCT_USED
---------- ---------- ---------- ----------- ---------- ---------- ---------- ----------- ---------- ----------- ---------- ----------3 5376 3439 24653178 7996 9 3438 41188 8028 27570496 24694366 90/* shrink space compact 起到了和coalesce完全相同的作用,但其产生的redo仍要多于coalesce于28% */
coalesce与shrink space命令对比重建索引(rebuild index)有一个显著的优点:不会导致索引降级。从以上测试可以看到coalesce与shrink space compact功能完全相同;在OLTP环境中,大多数情况下我们并不希望回收索引上的空闲空间,那么coalesce或者shrink space compact(not shrink space)可以成为我们很好的选择,虽然实际操作过程中2者消耗的资源有不少差别。
并不是说coalesce就一定会消耗更少的资源,这需要在您的实际环境中具体测试,合适的才是最好的!
转载于:https://blog.51cto.com/maclean/1277558
Alter index coalesce VS shrink space相关推荐
- alter table move与shrink space
http://www.xifenfei.com/1051.html 都知道alter table move 或shrink space可以收缩段,用来消除部分行迁移,消除空间碎片,使数据更紧密,但mo ...
- 【skill】收缩表段(shrink space)
收缩表段(shrink space) CREATE OR REPLACE PROCEDURE show_space ( p_segname IN VARCHAR2, p_owner IN VARCHA ...
- 收缩表段(shrink space)
--==================== -- 收缩表段(shrink space) --==================== 一.表的增长方式 当表被创建后,随着记录的不断插入,组成 ...
- oracle rebuild online,alter index rebuild
Oracle alter index rebuild 说明[日期:2011-06-12]来源:Linux社区 作者:tianlesoftware[字体:大中小] 一.官网说明 在MOS 上的一篇文章讲 ...
- oracle 段空间收缩,Oracle10g用Shrink Space收缩Oracle数据段
在oracle中可以使用alter table table_name shrink space收缩表,使用shrink有两个前提条件: 1.表必须启用row movement 2.表段所在表空间的段空 ...
- Shrink space合并表的碎片
Shrink space合并表的碎片 一般表里有碎片我们都采用alter table table_name move tablespace_name,或者exp,drop table table_na ...
- Oracle中shrink space命令
shrink_clause: http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_3001.htm#i2192484 ...
- Oracle中shrink space命令详解
从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理(ASSM),就可以使用这个特性缩小段,即降低HWM.这里需要强调一点,10g的这个新特性,仅对ASSM表空间 ...
- oracle shrink space compact,oracle 学习笔记 Shrink 参数 compact
alter table t shrink space 与 alter table t shrink space compact 区别在于compact 只对空间进行紧缩,高水位不下降. SQL> ...
最新文章
- Windows XP下vs2010中配置OpenCV2.4.3
- 阅读笔记: 凸包的例子(一)
- 服务器信息安全策略,信息安全工程师考试重点之定制Web服务器的安全策略和安全机制...
- 前端参数无法转为后端实体内部类_Java学到什么程度才能叫精通?
- Android Application 对象介绍
- ffmpeg ffplay ffprobe使用说明
- linux命令network,Linux network config
- Mysql跨表更新 多表update sql语句总结
- js文件里获取路由 vue_纯js文件中,怎么使用vue的路由
- 抖音检测注入框架分析
- Objective-c 开发环境
- 少有人走的路---心智成熟的旅程
- 基于内容的图像检索技术
- unix常用操作命令
- mysql dump 10.13 下载_mysqldump.exe 文件下载
- c++中sqrt函数的使用
- 星球壁纸android,Planets pack
- c#学习第16课,迭代(循环)语句 跳转语句
- 保护气体在焊接中的作用和特征
- 推荐一款Mac 上好用的视频格式转换软件-Permute