数据库中表不断的insert,delete,update,导致表和索引出现碎片。这会导致HWM之前有很多的空闲空间,而oracle在做全表扫描的时候会读取HWM一下的所有块,这样会产生更多的IO,影响性能。

oracle提供了shrink space碎片整理的功能,对于索引要采取rebuild online的方式进行碎片整理。

高水位的管理机制

高水位的管理机制在 MSSM 和 ASSM 中不同,在以往的手动段空间管理中(MSSM),高水位标记 HWM,一个段分成三部分,header block,used block(row data),unusedblock,其中 used block 和 unused block 之间的分界线就是高水位标记 HWM,当进行全表扫描的时候,会扫描到 HWM 下的所有数据块,即使 used block 中很多数据被删除了,全表扫描还是以HWM为准。

在自动段管理(ASSM)中,利用位图来代替空闲列表,当会话向表插入数据时,数据库只格式一个单独的位图块,而不是像 MSSM 中那样,会预先格式化一组块。在ASSM表空间中,除了一个 HWM 外,还有一个低 HWM。在 MSSM 中,HWM 推进时,所有的块都会格式化并立即生效,这样 Oracle 就可以安全的读取这些块。但是对于 ASSM,当 HWM推进时,Oracle 并不会立即格式所有的块,只是在第一次使用的时候才会对这些块进行格式化。也就是说,在第一次使用的的时候,即进行 insert 操作时,数据会插入到块中的任意水位线,位于低水位线(LHMW)和高水位线(HHMW)之间。因此在这个区域的许多块就不会被格式化。

背景

生产中这S_OPERATELOG, S_T_RTNRP_STATUS, S_T_SEND_REPORT三张表实际使用量不大(即truncate分区后),表空间数据文件还是占用很高,几个T,现需要释放不用的空间。

生产中遇到的案例

以下是生产中的三张表,且都是按天生成的分区表(不足一个月的数据,一年数据量很大)

select segment_name,round(sum(bytes / 1024 / 1024 / 1024), 2) G

from user_segments

where segment_name in

('S_OPERATELOG', 'S_T_RTNRP_STATUS', 'S_T_SEND_REPORT') group by segment_name;

可以看出使用的并不是很大。

查看表使用的表空间

select owner, table_name, tablespace_name

from dba_tables

where owner = 'SMART'

AND TABLE_NAME in

('S_OPERATELOG', 'S_T_RTNRP_STATUS', 'S_T_SEND_REPORT')

UNION

select TABLE_OWNER,TABLE_NAME,TABLESPACE_NAME

from dba_Tab_Partitions

where

TABLE_OWNER='SMART'

AND TABLE_NAME in

('S_OPERATELOG', 'S_T_RTNRP_STATUS', 'S_T_SEND_REPORT')

查看表空间使用情况:

select tablespace_name,

ROUND(sum(bytes / 1024 / 1024 / 1024),2) G,ROUND(sum(maxbytes / 1024 / 1024 / 1024),2) max_G

from dba_data_files

where file_name like '+FDATADG%'

GROUP BY TABLESPACE_NAME ORDER BY 2 DESC;

可以看出几个表空间占用空间很大,尤其是前三个表空间。

查看表空间数据文件情况:

SELECT a.tablespace_name,

a.file_name,

round(a.bytes/1024/1024/1024,2) AS "current_bytes(GB)",

round(a.bytes/1024/1024/1024 - b.resize_to/1024/1024/1024,2) AS "shrink_by_bytes(GB)",

round(b.resize_to/1024/1024/1024,2) AS "resize_to_bytes(GB)"

FROM   dba_data_files a,

(SELECT file_id, MAX((block_id+blocks-1)*&v_block_size) AS resize_to

FROM   dba_extents

GROUP by file_id) b

WHERE  a.file_id = b.file_id

and a.TABLESPACE_NAME in

(

'SMART_OPLOG01',

'SMART_NRRPSTA01',

'SMART_NRRPSTA02',

'SMART_NSNRP01',

'SMART_NSNRP02'

)

ORDER BY a.tablespace_name, a.file_name;

块大小是16K的。16384

后三列表示当前占用大小,能够收缩大小,最小的resize大小。

处理办法:

1)    Shrink对应的表

注意:由于在线上,不能进行有表锁的操作,所以我并没有采用这种办法

alter table TABLE_NAME enable ROW MOVEMENT;--启动行移动功能

alter table TABLE_NAME shrink space compact;  --只整理碎片 不回收空间

-- 重置高水位,此时不能有DML操作

alter table TABLE_NAME shrink space; --整理碎片并回收空间,并调整水位线。业务少时执行

alter table TABLE_NAME disable ROW MOVEMENT;--关闭行移动

2)    Resize 数据文件

select  ' alter database datafile '''||file_name ||''' resize 43g;' from dba_data_files where tablespace_name

in (

'SMART_NRRPSTA01'

);

收缩前表空间使用如下:

收缩后表空间使用如下:

磁盘组使用如下:

原+FDATADG磁盘中使用达到96%,释放了20%的空间。

ORACLE 11g 生产中高水位线(HWM)处理的更多相关文章

  1. 在Oracle 11g r2中,EXP无法导出个别空的表

    在Oracle 11g r2中,发现传统的exp无法不能导出空的表,上网搜索了一下找到了原因. 主要是Oracle 11g 新增了一个参数:deferred_segment_creation,含义是段 ...

  2. 測试oracle 11g cluster 中OLR的重要性

     測试oracle 11g cluster 中OLR的重要性 called an Oracle Local Registry (OLR): each node in a cluster has a ...

  3. oracle 11g GRID 中 关于 OLR 须要知道的一些内容

     oracle 11g GRID 中 关于 OLR 须要知道的一些内容 1.检查olr 的状态: [root@vmrac1 ~]# ocrcheck -local Status of Oracle ...

  4. Oracle高水位线(HWM)及性能优化

    说到HWM,我们首先要简要的谈谈ORACLE的逻辑存储管理.我们知道,ORACLE在逻辑存储上分4个粒度:表空间,段,区和块.    (1)块:是粒度最小的存储单位,现在标准的块大小是8K,ORACL ...

  5. CentOS6.5 静默安装Oracle 11g过程中提示:Exception in thread “main” java.lang.NoClassDefFoundError

    原来是系统中设置了DISPLAY环境变量,执行: [oracle@qa26 database]$ ./runInstaller  -silent -responseFile /usr/local/or ...

  6. Oracle 11g rac中关于crsctl stop cluster/crs/has的区别

    转载至http://www.oracleplus.net/arch/1203.html,整理后得. 1 通过命令查看cluster/has/crs管理的内容 [root@11rac1 ~]# crsc ...

  7. Oracle数据库入门——高水位线详解

    一.什么是水线(High Water Mark)? 所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称 ...

  8. oracle 高水位线详解

    一.什么是水线(High Water Mark)? 所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称 ...

  9. 一、oracle 高水位线详解

    一.什么是水线(High Water Mark)? 所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称 ...

随机推荐

  1. 使用cookies查询商品浏览记录

    经历了俩个星期,易买网项目如期完工,现在总结一下如何使用cookies实现浏览商品的历史记录. 第一步:创建商品实体类. 第二步:连接oracle数据库. 第三步:创建商品三层架构. 效果图: 在要显 ...

  2. GraphicsMagick在centos环境的安装

    一.需要安装包libpng-1.6.2rc02.tar.gz,libjpeg-6b.tar.gz,GraphicsMagick-1.3.18.tar.gz,GraphicsMagick-1.3.18最 ...

  3. linux挂载ntfs格式的U盘

    1.需要安装一个ntfs-3G工具 工具包下载网站:http://www.tuxera.com/community/ntfs-3g-download/ 根据情况选择要下载的包. 2.上传到Linux服 ...

  4. uni-app强大的前端框架,h5,原生app(两大系统),微信小程序

    最近发现一款强大的前端框架,它叫uni-app 这是一款通用的框架可以打包app,h5,微信小程序, 说说要弄这个工具需要会那些技能吧, 要熟悉vue,微信小程序.这样这个框架用的就是很快上手了 模块 ...

  5. Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)

    多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线 ...

  6. tomcat多实例的部署

    解压部署tomcat程序创建2个实例的工作目录mkdir -p /usr/local/tomcat8_instance/tomcat1mkdir -p /usr/local/tomcat8_insta ...

  7. BZOJ2251 [2010Beijing Wc]外星联络 后缀数组 + Height数组

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in", "r", stdin ...

  8. BZOJ 1426: 收集邮票 数学期望 + DP

    Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且 买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡 ...

  9. 记录:通过SSH远程连接Ubuntu

    一.安装openssh服务器 $ sudo apt-get install openssh-server 二.启动ssh服务 安装完成后,启动服务: $ sudo /etc/init.d/ssh st ...

  10. 如何查看系统的界面,比如费用申请单的序时簿界面引用的是哪一个ListUi.快捷键alt+shift+d 然后选中该ListUI大框框,就可以看到引用的是哪一个了.

    如何查看系统的界面,比如费用申请单的序时簿界面引用的是哪一个ListUi.快捷键alt+shift+d 然后选中该ListUI大框框,就可以看到引用的是哪一个了.