`
renzhelife
  • 浏览: 672113 次
文章分类
社区版块
存档分类
最新评论

如果降低表的HWM

 
阅读更多

(HWM=total_blocks-Unused Blocks+1)
可以在DUMP文件第一个EXTENT的前三个数据块中看到HWM.

释放在HWM之上的空闲BLOCK:
alter table table_name deallocate usused;

在HWM之下的空闲块:
1. 了解一个table在HWM下有多少blocks是不包含数据的.
analyze table &t_name compute statistics;
select (1-a.num/b.num_total)*100 as percent from
(select count(distinct substr(rowid,1,15)) num from &t_name ) a,
(select blocks-empty_blocks num_total from user_tables where table_name='&t_name' )b

在ASSM下,free space分别为0-25%,25-50%..BLOCK使用情况.
create or replace procedure show_space_assm(
p_segname in varchar2,
p_owner in varchar2 default user,
p_type in varchar2 default 'TABLE')
as
l_fs1_bytes number;
l_fs2_bytes number;
l_fs3_bytes number;
l_fs4_bytes number;
l_fs1_blocks number;
l_fs2_blocks number;
l_fs3_blocks number;
l_fs4_blocks number;
l_full_bytes number;
l_full_blocks number;
l_unformatted_bytes number;
l_unformatted_blocks number;

procedure p(p_label in varchar2,p_num in number)
is
begin
dbms_output.put_line(rpad(p_label,40,'.') || p_num );
end;

begin
dbms_space.space_usage(
segment_owner => p_owner,
segment_name => p_segname,
segment_type => p_type,
fs1_bytes => l_fs1_bytes,
fs1_blocks => l_fs1_blocks,
fs2_bytes => l_fs2_bytes,
fs2_blocks => l_fs2_blocks,
fs3_bytes => l_fs3_bytes,
fs3_blocks => l_fs3_blocks,
fs4_bytes => l_fs4_bytes,
fs4_blocks => l_fs4_blocks,
full_bytes => l_full_bytes,
full_blocks => l_full_blocks,
unformatted_blocks => l_unformatted_blocks,
unformatted_bytes => l_unformatted_bytes );
p('free space 0-25% blocks:',l_fs1_blocks);
p('free space 25-50% blocks:',l_fs2_blocks);
p('free space 50-75% blocks:',l_fs3_blocks);
p('free space 75-100% blocks:',l_fs4_blocks);
p('Full Blocks:','l_full_blocks);
p('Unformatted blocks:',l_unformatted_blocks);
end;
/

降低HWM的方法:
(一) MOVE (need rebuild all indexes,有DLL锁,需要两倍空间)
alter table TABLE_NAME move;
alter table TABLE_NAME move tablespace TABLESPACE_NAME;

(二) DBMS_REDEFINITION 联机重定义

Oracle 9i 之后可以进行联机重定义表(Online Redefine Tables,或"在线重定义表").该特性从某种程度上提供了一定的高可用性.通过该功能可以做到:

修改表的存储参数
移动该表到相同 Schema 下的 不同表空间内
添加并行查询支持
添加或删除分区
重建表以便减少碎片
在普通表和索引组织(index-organized)表之间互相转换
添加或删除列
做一个从普通表到分区表之间的转换操作.可以用 DBA 用户操作.如果是普通用户需要有DBMS_REDEFINITION 包的可执行权限以及如下权限:

* CREATE ANY TABLE
* ALTER ANY TABLE
* DROP ANY TABLE
* LOCK ANY TABLE
* SELECT ANY TABLE 下面通过一个例子来简单演练一把.假定目前产品库有一个非分区表 TEST. 准备对把该表联机修改为分区表.

我们的测试表结构(ID列为PK):

SQL> DESC TEST
Name Null? Type
----------------------------------------- -------- -------------------
ID NOT NULL VARCHAR2(16)
USER_NAME VARCHAR2(16)
GMT NOT NULL TIMESTAMP(6)
1) 验证该表是否可以进行联机重定义(如果不可以会给出具体原因):


SQL> exec DBMS_REDEFINITION.can_REDEF_TABLE('SCOTT','TEST',1);

2) 创建中间临时表并划分分区:

CREATE TABLE test_p(
ID VARCHAR2(16) NOT NULL,
user_name VARCHAR2(16),
gmt TIMESTAMP(6) NOT NULL
)
PARTITION BY RANGE (gmt) (
PARTITION test_p200511 VALUES LESS THAN(TO_DATE('2005-12-01','yyyy-mm-dd')) ,
PARTITION test_p200512 VALUES LESS THAN(TO_DATE('2006-01-01','yyyy-mm-dd')) );3) 开始重定义表

BEGIN
DBMS_REDEFINITION.start_redef_table
('SCOTT','TEST','TEST_P',
'ID ID,
USER_name USER_name,
GMT GMT',
DBMS_REDEFINITION.cons_use_pk
);
END;
-- 注意条件 dbms_redefinition.cons_use_pk, 如果是根据 ROWID 做联机重定义,则用 dbms_redefinition.cons_use_rowid .

4) 创建索引限制以及触发器等.注:在10g 中,如果这些定义变化了.可以通过 DBMS_REDEFINITION.REGISTER_DEPENDENT_OBJECT() 来创建.如果这些对象定义不变化,则调用 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS() 即可.

ALTER TABLE test_p
ADD CONSTRAINT test_p_pk PRIMARY KEY (ID)
USING INDEX
TABLESPACE indx;
5) 同步表内容 . 如果需要同步的数据特别大,则可能考虑通过 prebuilt table 的方法先建立物化视图.
EXEC DBMS_REDEFINITION.sync_interim_table ('SCOTT', 'test', 'test_p');
6) 结束重定义过程
EXEC DBMS_REDEFINITION.finish_redef_table ('scott', 'test', 'test_p');
7) 删除临时表 TEST_P.

drop table test_p;
*) 如果想中途停止重定义过程,则通过如下指令退出该过程:

EXEC dbms_redefinition.abort_redef_table('SCOTT', 'test','test_p');
进一步熟悉该过程的机理可以通过查询:

SELECT sql_text FROM v$sqlarea WHERE sql_text LIKE '%TEST_P%';联机重定义表必须考虑的问题: 会占用源表两倍的空间.此外还要考虑物化视图 Log 的空间以及带来的其他开销.

(三)Shrink (10G新特性)
alter table TABLE_NAME enable row movement;
alter table TABLE_NAME shrink space;
优点: 不需要REBUILD INDEX ,不需要更大空间.没有对表LOCK;

分享到:
评论

相关推荐

    HWM14高层大气风场模式

    HWM-14为HWM(水平风场模型)系列模型的最新版本,主要改进在120km以上高度,增加了赤道和极区地基630 nm FPI和GOCE卫星风场测量数据,填补了部分纬度和地方时覆盖范围上的空白。

    Oracle 10g HWM原理及性能优化

    当全表扫描时,Oracle会读取HWM下所有的块,即使这些块中有很多是空块,空块的存在,也即是表中碎片的存在,必将增加全表扫描额外的物理I/O开销及CPU开销,严重降低访问Oracle数据表的性能。通过对Oracle中关于表中...

    如何降低DB2的管理表空间的高水位标记

    如果使用:db2 list tablespaces show detail,看到某个DMS表空间的已用页数低于高水位标记,则有可能通过如下方法降低高水位标记:重组表空间的某个表;或者将某个表中的数据导出,然后将它删除,重新创建该表再将...

    HWM14_风场_中性大气_

    中性大气风场模型(2014):计算中性大气风场速度

    hwm.dll

    hwm

    hwm93:Python和Matlab中的NASA水平风模型HWM93

    Python中的HWM93 Python≥3.6的NASA水平风模型HWM93 ... 如果您没有Fortran编译器,请按以下步骤安装Gfortran: Linux: apt install gfortran Mac: brew install gcc pip install -e。 通过测试 pytest -sv 视

    Oracle Freelist和HWM原理及性能优化

    本文以FreeList为线索对Oracle的存储管理的原理进行较深入的探讨,涉及Oracle段区块管理的原理,FreeList算法等

    62332440_hwm840Dsl

    62332440_hwm840Dsl

    Oracle Freelist和HWM原理探讨及相关性能优化

    而与FreeList密切相关的一个重用特性HWM,与sql性能密切相关,本文也作了原理分析 介绍。在原理探讨的基础上,介绍了常用的存储参数分析方法,并对所涉及的存储优化、HWM的优化和Freelist竞争优化作了说明。

    show hwm sql

    show hwm sql sql script javascript develop

    HWM_MBUS-M13_1.08_EN_mbus_

    MBUS power line communication module

    hwm.task:最小任务库

    hwm.task 这是什么 轻量级线程池实现 特征 仅标题 使用C++标准线程 您可以指定要启动的线程数 您可以使用std::future获取要执行的任务的返回值。 样本 int main () { // ! タスクキュー // ! キューに積まれた関...

    HWM工具「HWM Tool」-crx插件

    游戏“英雄的战争与金钱”(heroeswm.ru)界面的定制和功能的扩展 目前主要特点: - 战斗列表中的人物角色旁边的OA显示,艺术品的数量和制作的存在; - 狩猎名单中的中立人的生命单位总数的图像;...

    Oracle 10g HWM原理及性能优化.pdf

    Oracle 10g HWM原理及性能优化.pdf

    DB2V9.7新特性-降低高水位标记

    内容表空间高水位标记(HWM)为什么要降低高水位标记在9.7以前如何降低高水位标记9.7降低高水位标记的新功能总结参考资料表空间高水位标记(HWM)高水位标记是一个应用广泛的术语,在很多的场合都会使用到,一般用以...

    moeldv_C3HWM2HD

    bot_dev01

    ORACLE表空间的回收脚本

    针对oracle表空间收缩的操作!请仔细查看内部的说明。对于表空间过于庞大的数据库能起到回收剩余空间,并降低高水位HWM的作用

    Oracle 高水位概念(hwm)

    NULL 博文链接:https://teddywang.iteye.com/blog/849735

    自动收缩表空间脚本

    用游标处理查询结果,对需要收缩表空间的表进行shrink命令,之后该脚本对表空间大小和HWM计算出可resize的空间,并进行收缩,计算方法(表空间大小-HWM)*0.8

Global site tag (gtag.js) - Google Analytics