免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4097 | 回复: 3
打印 上一主题 下一主题

oracle HWM试验 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-17 00:04 |只看该作者 |倒序浏览
创建表
create table my_object as select * from dba_objects;
分析my_object表咱用块数
analyze table my_object compute statistics;
select table_name,tablespace_name,blocks  from user_tables where table_name='MY_OBJECT';

TABLE_NAME                     TABLESPACE_NAME                    BLOCKS
------------------------------ ------------------------------  ------------------------------ ------------------------------
MY_OBJECT                        SYSTEM                                          685
占用数据库685
set autotrace traceonly;
SQL> select count(*) from my_object;


执行计划
----------------------------------------------------------
Plan hash value: 3447259112

------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Cost (%CPU)| Time     |
------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |           |     1 |   154   (2)| 00:00:02 |
|   1 |  SORT AGGREGATE    |           |     1 |            |          |
|   2 |   TABLE ACCESS FULL| MY_OBJECT | 49874 |   154   (2)| 00:00:02 |
------------------------------------------------------------------------


统计信息
----------------------------------------------------------
        124  recursive calls
          0  db block gets
        700  consistent gets
        690  physical reads
          0  redo size
        410  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
          1  rows processed
可以看到有690  physical reads
删除一部分数据
delete my_object where rownum<15000;
从新分析该表
analyze table my_object compute statistics;
select table_name,tablespace_name,blocks  from user_tables where table_name='MY_OBJECT';
TABLE_NAME                     TABLESPACE_NAME                    BLOCKS
------------------------------ ------------------------------ ----------
MY_OBJECT                      SYSTEM                                685
会发现该表还是685块
再次运行
SQL> select count(*) from my_object;


执行计划
----------------------------------------------------------
Plan hash value: 3447259112

------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Cost (%CPU)| Time     |
------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |           |     1 |   154   (2)| 00:00:02 |
|   1 |  SORT AGGREGATE    |           |     1 |            |          |
|   2 |   TABLE ACCESS FULL| MY_OBJECT | 49874 |   154   (2)| 00:00:02 |
------------------------------------------------------------------------


统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
        690  consistent gets
          0  physical reads
          0  redo size
        410  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
从以上的试验看到,虽然我们删除了15000行数据,可是在查询该表的时候还是会查询690个块。
我们苏要手工回收删除的空间。
手工回收方法很多,我现在用ORACLE 9I以上版本手工回收空间
alter table my_object enable row movement;
alter table my_object shrink space;
然后执行
SQL> select count(*) from my_object;


执行计划
----------------------------------------------------------
Plan hash value: 3447259112

------------------------------------------------------------------------
| Id  | Operation          | Name      | Rows  | Cost (%CPU)| Time     |
------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |           |     1 |   105   (1)| 00:00:02 |
|   1 |  SORT AGGREGATE    |           |     1 |            |          |
|   2 |   TABLE ACCESS FULL| MY_OBJECT | 31950 |   105   (1)| 00:00:02 |
------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        480  consistent gets
        469  physical reads
          0  redo size
        410  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
可以看到       469  physical reads
analyze table my_object compute statistics;
select table_name,tablespace_name,blocks  from user_tables where table_name='MY_OBJECT';
TABLE_NAME                     TABLESPACE_NAME                    BLOCKS
------------------------------ ------------------------------ ----------
MY_OBJECT                      HWM                                   468

论坛徽章:
0
2 [报告]
发表于 2008-08-18 15:33 |只看该作者
相当清晰!!!!!!!!!!!!!!

论坛徽章:
0
3 [报告]
发表于 2008-10-07 10:15 |只看该作者
不错。。。。。。。。。。。

论坛徽章:
0
4 [报告]
发表于 2009-03-09 23:09 |只看该作者

回复 #1 imtj 的帖子

我测试了这个做了analyze 后,dba_tables 已经改变了,和此文章不符!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP