HWM的实验
HWM是数据段中使用空间和未使用空间之间的界限,假如现有自由链表上的数据块不能满足需求,Oracle把HWM指向的数据块加入到自由链表上,HWM向前移动到下一个数据块。简单说,一个数据段中,HWM左边是使用的数据块,右边是目前还没有被使用的数据块。
一个表在表空间中创建以后,会先分配一些初始的数据区。随着表中行数的增加,区也会相应的扩展,DBA_SEGMENTS试图的BLOCKS和EXTENTS列记录了相应的数据区块的信息。
SQL> create table test(id number);
Table created.
SQL> select blocks, extents from dba_segments where segment_name='TEST' and owner='HR';
BLOCKS EXTENTS
---------- ----------
8 1
现在对表进行分析,以查看HWM。
SQL> analyze table test compute statistics;
Table analyzed.
SQL> select blocks, empty_blocks, num_rows from dba_tables where table_name='TEST' and wner='HR';
BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
0 8 0
现在我们往表中插入一些数据,再来查看HWM。
SQL> insert into test select object_id from user_objects;
142 rows created.
SQL> commit;
Commit complete.
SQL> analyze table test compute statistics;
Table analyzed.
SQL> select blocks, empty_blocks, num_rows from dba_tables where table_name='TEST' and wner='HR';
BLOCKS EMPTY_BLOCKS NUM_ROWS
---------- ------------ ----------
5 3 142
可以看出此时的HWM应该在blocks=6的位置,虽然这里分配了5个数据块,但数据不一定占据了5个块的位置。
要想获取该表使用的确切的数据块,可以使用下面的查询。
SQL> select count(distinct dbms_rowid.rowid_block_number(rowid)||'-'||
dbms_rowid.rowid_relative_fno(rowid)) used_blocks
from test;
used blocks
-----------
1
从这里可以看出test表占用了8个数据块,有5个被格式化以准备接收数据,但实际存储数据的只有一个数据块。
我们把这几个块导出来查看一下。
SQL> select distinct dbms_rowid.rowid_relative_fno(rowid), dbms_rowid.rowid_block_number(rowid) from test;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------ ------------------------------------
4 4348
SQL> alter system dump datafile 4 block min 4348 block max 4350;
System altered.
相应的trace文件中,可以发现下面的信息。
data_block_dump,data header at 0xeb19464
===============
tsiz: 0x1f98
hsiz: 0x12e
pbl: 0x0eb19464
bdba: 0x010010fc
76543210
flag=--------
ntab=1
nrow=142
......
data_block_dump,data header at 0xeb19464
===============
tsiz: 0x1f98
hsiz: 0xe
pbl: 0x0eb19464
bdba: 0x010010fe
76543210
flag=--------
ntab=0
nrow=0
可以看到,142行只存在于 bdba: 0x010010fc 这个块中,也就是datafile=4,block=4348的数据块。
说到HWM就不能不提如何的降低一个表的HWM,因为如果一个表插入了大量的数据然后又被删除其中的一部分,表的HWM是不会下降的。在全表扫描的时候仍然会扫描到HWM的位置,这样必然导致IO资源的浪费。
删除记录不会降低HWM,因此,删除记录不会导致EMPTY_BLOCKS块的增加,即使使用'alter table test deallocate unused;'命令也不行。改变表的HWM可以使用truncate table test;和alter table test move tablespace xxx;等方法。当然,10g中也可以使用alter table test shrink space;。
现在使用具体的实例来说明各种方法对HWM的影响。
首先采用移动表空间的方法。
SQL> create table t(a number, b number, c number, d number, e number, f number);
Table created.
SQL> create or replace procedure populate (numrows in number) is
fa number; fb number; fc number; fd number; fe number; ff number;
begin
dbms_random.Initialize(1234567);
for i in 1..numrows loop
fa:=mod(abs(dbms_random.random),10)+1991;
fb:=mod(abs(dbms_random.random),2);
fc:=mod(abs(dbms_random.random),20);
fd:=mod(abs(dbms_random.random),30);
fe:=mod(abs(dbms_random.random),40);
ff:=mod(abs(dbms_random.random),10);
insert into t values(fa,fb,fc,fd,fe,ff);
if mod(i,100)=0 then commit; end if;
end loop;
dbms_random.Terminate;
end;
/
Procedure created.
SQL> set serveroutput on
SQL> execute populate(200000);
PL/SQL procedure successfully completed.
SQL> delete from t where a=1991 and b=0;
9991 rows deleted.
SQL> commit;
Commit complete.
SQL> delete from t where f=9;
13911 rows deleted.
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select num_rows,blocks,empty_blocks from dba_tables where table_name='T';
NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
171270 684 84
SQL> alter table t move tablespace users;
Table altered.
SQL> select num_rows,blocks,empty_blocks from dba_tables where table_name='T';
NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
171270 684 84
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select num_rows,blocks,empty_blocks from dba_tables where table_name='T';
NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
171270 569 71
可以看到,重新分析后,表的HWM下降了。说明移动表空间的方法是可以降低HWM的,即使移动前后的表空间是相同的。
接下来,再来看看export/import对HWM的影响。
首先导出T表中的所有数据,
$ exp hr/hr tables='t'
......
About to export specified tables via Conventional Path ...
. . exporting table T 171270 rows exported
SQL> delete from t;
171270 rows deleted.
SQL> commit;
Commit complete.
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select num_rows, blocks, empty_blocks from dba_tables where table_name='T';
NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
0 569 71 --虽然行数变了,但是HWM仍然没有改变
$ imp hr/hr ignore=y file=expdat.dmp full=y
......
. importing HR's objects into HR
. . importing table "T" 171270 rows imported
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select num_rows, blocks, empty_blocks from dba_tables where table_name='T';
NUM_ROWS BLOCKS EMPTY_BLOCKS
---------- ---------- ------------
171270 569 71
可以看出import之后,表的HWM没有改变。
HWM的实验的更多相关文章
- MOVE降低高水位 HWM
MOVE降低高水位 HWM --创建实验表空间SQL> create tablespace andy03 datafile '/home/oracle/app/oradata/orcl/andy ...
- Oracle中HWM与数据库性能的探讨
Oracle中HWM与数据库性能的探讨 一.什么是高水位 HWM(high water mark),高水标记,这个概念在segment的存储内容中是比较重要的.简单来说,HWM就是一个segment中 ...
- Oracle中 HWM与数据库性能的探讨
链接:http://www.eygle.com/archives/2011/11/oracle_hwm_tuning.html 本文讨论的是oracle中关于table的HWM的内容,主要包括这样几个 ...
- [原] 利用 OVS 建立 VxLAN 虚拟网络实验
OVS 配置 VxLAN HOST A ------------------------------------------ | zh-veth0(10.1.1.1) VM A | | ---|--- ...
- Android中Activity的四大启动模式实验简述
作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...
- SEED实验系列文章目录
美国雪城大学SEEDLabs实验列表 SEEDLabs是一套完整的信息安全实验,涵盖本科信息安全教学中的大部分基本原理.项目组2002年由杜文亮教授创建,目前开发了30个实验,几百所大学已采用.实验楼 ...
- 物联网实验4 alljoyn物联网实验之手机局域网控制设备
AllJoyn开源物联网协议框架,官方描述是一个能够使连接设备之间进行互操作的通用软件框架和系统服务核心集,也是一个跨制造商来创建动态近端网络的软件应用.高通已经将该项目捐赠给了一个名为“AllSee ...
- (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)
一. HTTP请求的数据流总结#上传数据, yeelink的数据流如下POST /v1.0/device/4420/sensor/9089/datapoints HTTP/1.1Host: api. ...
- (原创) alljoyn物联网实验之手机局域网控制设备
AllJoyn开源物联网协议框架,官方描述是一个能够使连接设备之间进行互操作的通用软件框架和系统服务核心集,也是一个跨制造商来创建动态近端网络的软件应用.高通已经将该项目捐赠给了一个名为“AllSee ...
随机推荐
- PhyreEngine3.8 MSAA resolution
There is something wrong in PhyreEngine 3.8 to fullfill MSAA, actually, I think it is eqaa You have ...
- 当IIS挂的网站出现选 图片文件, 静态文件都打不开时, 可以试试新建一个应用程序池试试看...
当IIS挂的网站出现选 图片文件, 静态文件都打不开时, 可以试试新建一个应用程序池试试看...
- 基于HOOK和MMF的Windows密码渗透技术
随着计算机与网络的普及,信息安全越来越成为人们所普遍关心的大事.密码的渗透与反渗透在此领域表现的愈演愈烈.本文深入分析了各个版本Windows密码的特点,尤其是针对windws2K/XP安全性提高的情 ...
- Apache代理和反向代理
服务器上安装了多个服务,包括apache的80端口,以及tomcat的8080和8090,为了访问使用方便,尝试了代理和反向代理.下面是部分配置以备参考: NameVirtualHost *:80 & ...
- 微信变声器(WeChat Voice)会是营销新利器吗
微信变声器(WeChat Voice)2.0 Android版开始内测了,时间从2015年5月20日 - 2015年6月20日,使用微信变声器改变你的声音,并分享给好友! 无论你是想装可爱还是恶搞,微 ...
- Google 网站打不开
http://209.116.186.246/ http://91.213.30.153/ (2014年6月30日 新增) https://wen.lu/ (2014年6月30日 新增,注意下是ht ...
- 暑假集训单切赛第二场 UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(字符串处理)
一开始不懂啊,什么Home键,什么End键,还以为相当于括号,[]里的东西先打印出来呢.后来果断百度了一下. 悲催啊... 题意:给定一个字符串,内部含有'['和']'光标转移指令,'['代表光标移向 ...
- HDU 1227 Fast Food (DP)
题目链接 题意 : 有n个饭店,要求建k个供应点,要求每个供应点一定要建造在某个饭店的位置上,然后饭店都到最近的供应点拿货,求出所有饭店到最近的供应点的最短距离. 思路 : 一开始没看出来是DP,后来 ...
- CAS(Compare and Swap)理解
什么叫CAS(Compare and Swap)? 硬件同步原语!! 什么蛋疼的名字,一般人很难理解.根据英文全称翻译==比较与交换,这个名字大致还能理解一点,目前先暂且这么理解吧. 有啥用处? 对 ...
- 开源入侵检测系统OSSEC搭建之三:Web界面安装
注意:以下操作需在OSSEC服务端进行设置 一.下载analogi,存放于/var/www/html/下并赋予权限 [root@localhost ~]# wget https://github.co ...