设为首页 加入收藏

TOP

分析HWM(二)
2015-07-24 11:11:06 来源: 作者: 【 】 浏览:2
Tags:分析 HWM
) ---------- 327680

t是用户hr里的一张比较大的表。
我们在列id上建索引index_t:(下面有用)
SQL> create index index_t on t(id);


索引已创建。

分析一下表:
SQL> exec dbms_stats.gather_table_stats('HR','T'); oracle提供了这个分析包

PL/SQL 过程已成功完成。
当然你也可以使用之前版本提供的工具:
SQL> analyze table t1 compute statistics;

表已分析。
删除分析: SQL> analyze table t1 delete statistics;

表已分析。



Total Blocks 表示分配给表的总的blocks 数。 Unused Blocks 表示位于高水位线以上的从未使用的数据块个数。
上面的参数不一一介绍,感兴趣的可以研究。

通过执行计划分析:
SQL> set autotrace traceonly;
SQL> select * from t;(执行了两次,此为第二次结果)


已选择327680行。

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


--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 327K| 2240K| 172 (2)| 00:00:03 |
| 1 | TABLE ACCESS FULL| T | 327K| 2240K| 172 (2)| 00:00:03 |
--------------------------------------------------------------------------


统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
22418 consistent gets
0 physical reads
0 redo size
6379306 bytes sent via SQL*Net to client
240710 bytes received via SQL*Net from client
21847 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
327680 rows processed
执行计划
----------------------------------------------------------
Plan hash value: 1601196873

从上面可以看出,逻辑读了22418次。

我们此时delete表t,但是不会降低HWM:



表t虽然被delete的那部分被删除,但是被占用的那部分内空间存仍然没被释放,可以通过alter table t move来释放存储空间:
alter table move 主要有两方面的作用: 1、用来移动table 到其他表空间。 2、用来减少table 中的存储碎片,优化存储空间和性能。
SQL> alter table t move (tablespace users) online;(此时别的会话可以正常访问此表)
表已更改。
此时rows的rowid也会改变。
SQL> select * from t; (执行了两次,此为第二次结果)


已选择131072行。




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


--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 327K| 2240K| 172 (2)| 00:00:03 |
| 1 | TABLE ACCESS FULL| T | 327K| 2240K| 172 (2)| 00:00:03 |
--------------------------------------------------------------------------



统计信息
----------------------------------------------------------
1 recursive calls
0 db block gets
9274 consistent gets
0 physical reads
0 redo size
4020151 bytes sent via SQL*Net to client
96533 bytes received via SQL*Net from client
8740 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
131072 rows processed

此时的逻辑读已经降低为9274。
但是此时造成建立在id上的索引不可用:

此时我们可以通过重建索引来解决:
alter index index_t rebuild (tablespace users) online;(此时如果不加online,则不能进行delete,update,insert操作,对于大表来说,很慢)
SQL> alter index index_t rebuild online;


索引已更改。
索引重新可以使用:?
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hadoop2.2、hbase0.94.18集群安装 下一篇取得一张表的数据不在另一张表中..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)