shrink合并数据块--解决数据块碎片问题
来源:互联网 发布:淘宝摄影布光 编辑:程序博客网 时间:2024/05/16 01:04
合并数据块的概念及命令
在Oracle 数据块中,删除数据后不会降低HWM,造成大量空间的浪费。
自行手动合并碎片空间可以采用的方法有:重建表、move、shrink等等,其实底层实现都是通过匹配的insert和delete操作,重新构造表中的行。move操作,不支持在线读/写,表在移动的过程中是锁定状态不能操作,表在移动后表上索引会失效,必须rebuild重建。
shrink命令可以避免move的产生的问题,shrink命令要求操作的表所在表空间必须为ASSM---自动段空间管理.
shrink_clause的限制条件---alter table sr_log shrink space;========================================
1. 对cluster,cluster table,或具有Long类型列的对象 不起作用。
2. 不支持具有function-based indexes 或 bitmap join indexes的表
3. 不支持mapping 表或index-organized表。
4. 不支持compressed 表
实验:使用shrink命令合并数据块
SQL> select * from v$version;BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
select tablespace_name,segment_space_management from dba_tablespaces where tablespace_name='USERS';
TABLESPACE_NAME SEGMEN
------------------------------ ------
USERS AUTO
User is "bys"
SQL> create table test6 as select * from dba_objects;
Table created
SQL> analyze table test6 compute statistics;
Table analyzed
SQL> select pct_free,pct_used,blocks,avg_row_len,chain_cnt from tabs where table_name='TEST6';
PCT_FREE PCT_USED BLOCKS AVG_ROW_LEN CHAIN_CNT
---------- ---------- ---------- ----------- ----------
10 1051 100 0
SQL> delete test6 where owner='SYS';
30870 rows deleted
SQL> select pct_free,pct_used,blocks,avg_row_len,chain_cnt from tabs where table_name='TEST6';
PCT_FREE PCT_USED BLOCKS AVG_ROW_LEN CHAIN_CNT
---------- ---------- ---------- ----------- ----------
10 1051 100 0
SQL> commit;
Commit complete
SQL> analyze table test6 compute statistics;
Table analyzed
删除数据并重新分析表后,可以查询到表占用的BLOCK并未减少。
PCT_FREE PCT_USED BLOCKS AVG_ROW_LEN CHAIN_CNT
---------- ---------- ---------- ----------- ----------
10 1051 100 0
SQL> alter table test6 shrink space;
alter table test6 shrink space
ORA-10636: ROW MOVEMENT is not enabled -----需要先开启ROW MOVEMENT
shrink合并数据块后,表所占用的数据块明显减少。仅为原来一半。
SQL> alter table test6 enable row movement;
Table alteredSQL> alter table test6 shrink space;
Table altered
SQL> analyze table test6 compute statistics;
Table analyzed
SQL> select pct_free,pct_used,blocks,avg_row_len,chain_cnt from tabs where table_name='TEST6';
PCT_FREE PCT_USED BLOCKS AVG_ROW_LEN CHAIN_CNT
---------- ---------- ---------- ----------- ----------
10 590 101 0
- shrink合并数据块--解决数据块碎片问题
- 数据块
- 数据块
- mongo集群合并空的数据块
- 超级块 i节点 数据块 目录块 间接块
- 超级块 i节点 数据块 目录块 间接块
- 超级块 i节点 数据块 目录块 间接块
- png IDAT数据块还原问题
- 数据块分析
- 数据块更名
- 数据块dump
- Oracle数据块原理
- 数据块移动
- 数据块dump
- Ext2数据块分配
- ORACLE数据块
- oracle 数据块结构
- 读取磁盘块数据
- 发布软件
- 复杂网络分析库NetworkX学习笔记3:网络演化模型
- leetcode之Longest Substring Without Repeating Characters
- Java中的ThreadLocal
- Compiler
- shrink合并数据块--解决数据块碎片问题
- java调用c# com组件编码过程笔记
- IOS详解TableView——对话聊天布局的实现
- SQL Server 2008过期导致MSSQLSERVER服务无法启动
- PropertyGrid中的枚举显示为中文
- 复杂网络分析库NetworkX学习笔记(4):统计指标计算
- Linker (computing)
- mongoDB insert save 区别
- IOS对战卡牌《梦回水浒》抢先体验