- 论坛徽章:
- 0
|
创建表
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 |
|