查看: 14103|回复: 32

Oracle10g新特性shrink segment来降低HWM

[复制链接]
论坛徽章:
17
ITPUB元老
日期:2005-02-28 12:57:00ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB9周年纪念徽章
日期:2010-10-08 09:28:532010新春纪念徽章
日期:2010-03-01 11:05:01祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:222009新春纪念徽章
日期:2009-01-04 14:52:28奥运会纪念徽章:射击
日期:2008-10-24 13:23:42
跳转到指定楼层
1#
发表于 2004-3-19 15:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过oracle10g的文档我们知道可以通过使用alter table <table_name> shrink space来减低表的HWM,以前必须要使用truncate来降低表的HWM,下面是操作的过程:

SQL> create table demo as select * from dba_source;

Table created.

Elapsed: 00:00:05.83
SQL> select count(*) from demo;

  COUNT(*)
----------
    210992

Elapsed: 00:00:01.06
SQL> insert into demo select * from demo;

210992 rows created.

Elapsed: 00:00:59.83
SQL> commit;

Commit complete.

//得到一个40万条记录的表,下面来查看这个表空间分布情况。

SQL> exec show_space('demo','auto');

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.07
SQL> set serveroutput on
SQL>  exec show_space('demo','auto');
Total Blocks............................9216
Total Bytes.............................75497472
Unused Blocks...........................768
Unused Bytes............................6291456
Last Used Ext FileId....................4
Last Used Ext BlockId...................8328
Last Used Block.........................256

一共有9216个数据块,HWM在9216-768=8448这个块.
也可以通过查看extents得到HWM=8*16+128*63+256=8192+256=8448

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.01
SQL> delete from demo where rownum<220000;

219999 rows deleted.

Elapsed: 00:00:40.99
SQL> commit;

Commit complete.

Elapsed: 00:00:00.01
SQL>  exec show_space('demo','auto');
Total Blocks............................9216
Total Bytes.............................75497472
Unused Blocks...........................768
Unused Bytes............................6291456
Last Used Ext FileId....................4
Last Used Ext BlockId...................8328
Last Used Block.........................256

PL/SQL procedure successfully completed.

//删除操作后表的HWM没有变化,还是在第8448块这个位置。
Elapsed: 00:00:00.00
SQL> alter table demo shrink space;
alter table demo shrink space
*
ERROR at line 1:
ORA-10636: ROW MOVEMENT is not enabled

//先要enable row movement才能shrink
Elapsed: 00:00:00.09
SQL> alter table demo enable row movement;

Table altered.

Elapsed: 00:00:00.10
SQL>  alter table demo shrink space;

Table altered.

Elapsed: 00:01:35.51
SQL>  exec show_space('demo','auto');
Total Blocks............................3656
Total Bytes.............................29949952
Unused Blocks...........................0
Unused Bytes............................0
Last Used Ext FileId....................4
Last Used Ext BlockId...................3720
Last Used Block.........................72

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.02

//可以看到HWM降到了3656这个块上面!
论坛徽章:
117
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主7段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32紫蛋头
日期:2013-03-04 17:00:07优秀写手
日期:2013-12-18 09:29:09
2#
发表于 2004-3-19 16:27 | 只看该作者
类似于Windows上的磁盘碎片整理

首先必须允许移动记录

Oracle终于实现了它


补充一点:仅对ASSM表空间有效

否则会报 ORA-10635: Invalid segment or tablespace type

使用道具 举报

回复
论坛徽章:
30
ITPUB元老
日期:2005-10-06 13:25:212011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52马上有车
日期:2014-02-19 11:55:14
3#
发表于 2004-3-19 16:31 | 只看该作者
最初由 eygle 发布
[B]补充一点:仅对ASSM表空间有效

[/B]


ASSM 指的是segment吧?

使用道具 举报

回复
论坛徽章:
117
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主7段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32紫蛋头
日期:2013-03-04 17:00:07优秀写手
日期:2013-12-18 09:29:09
4#
发表于 2004-3-19 16:38 | 只看该作者
最初由 dlinger 发布
[B]

ASSM 指的是segment吧? [/B]


对,我说在一起了
ASSM只能在表空间一级设置,什么时候你见能对单独的segment设置?



使用道具 举报

回复
论坛徽章:
30
ITPUB元老
日期:2005-10-06 13:25:212011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52马上有车
日期:2014-02-19 11:55:14
5#
发表于 2004-3-19 17:13 | 只看该作者
怎样才能确定一个segment是ASSM的呢?

使用道具 举报

回复
论坛徽章:
16
2010数据库技术大会纪念徽章
日期:2010-05-13 10:04:27ITPUB技术丛书作者
日期:2010-09-26 15:24:562011新春纪念徽章
日期:2011-01-25 15:41:01管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:18马自达
日期:2014-01-27 11:47:11
6#
发表于 2004-3-19 17:24 | 只看该作者
查这个segment所在的表空间是否是assm的就可以了

使用道具 举报

回复
论坛徽章:
30
ITPUB元老
日期:2005-10-06 13:25:212011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52马上有车
日期:2014-02-19 11:55:14
7#
发表于 2004-3-19 17:27 | 只看该作者
我查v$user_tables中发现freelist和free list group为空是怎么回事?

使用道具 举报

回复
论坛徽章:
16
2010数据库技术大会纪念徽章
日期:2010-05-13 10:04:27ITPUB技术丛书作者
日期:2010-09-26 15:24:562011新春纪念徽章
日期:2011-01-25 15:41:01管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:18马自达
日期:2014-01-27 11:47:11
8#
发表于 2004-3-19 17:33 | 只看该作者
assm中已经不用freelist了啊

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
9#
发表于 2004-3-19 17:36 | 只看该作者
最初由 dlinger 发布
[B]我查v$user_tables中发现freelist和free list group为空是怎么回事? [/B]


LMT管理的表空间,
这些属性都已经不需要了,LMT是通过BITMAP
来管理free block的。

使用道具 举报

回复
论坛徽章:
30
ITPUB元老
日期:2005-10-06 13:25:212011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52马上有车
日期:2014-02-19 11:55:14
10#
发表于 2004-3-19 17:41 | 只看该作者
最初由 coolyl 发布
[B]assm中已经不用freelist了啊 [/B]

呵呵,刚才没看清楚,只有在SEGMENT_SPACE_MANAGEMENT=auto的tablespace上的table的freelist才为空

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表