• Oracle 对数据段的管理有一个高水位(HWM, High Water Mark)的概念。高水位是数据段中使用过和未使用过的数据块的分界线。高水位以下的数据块是曾使用过的,以上的是从未被使用或初始化过的。
  • 当 Oracle 进行全表扫描(FTS, Full table scan)的操作时,它会读高水位下的所有数据块。如果高水位下还有很多空闲空间(碎片),读取这些空闲数据块会降低操作的性能。
  • 当针对一个表的删除操作很多时,表会产生大量碎片。删除操作释放的空间不会被插入操作立即重用,甚至永远也不会被重用,这被称之为高水位问题;

如何检查表是否有高水位问题?

  1. 收集表的统计信息
SQL> exec dbms_stats.gather_table_stats(ownname=>'SCHEMA_NAME',tabname=> 'TABLE_NAME');
  1. 查询高水位表信息
/* Formatted on 2017/9/21 14:14:37 (QP5 v5.240.12305.39476) */
SELECT TABLE_NAME,ROUND((BLOCKS * 8), 2) "高水位空间 k",ROUND((NUM_ROWS * AVG_ROW_LEN / 1024), 2) "真实使用空间 k",ROUND((BLOCKS * 10 / 100) * 8, 2) "预留空间(pctfree) k",ROUND((BLOCKS * 8 - (NUM_ROWS * AVG_ROW_LEN / 1024) -BLOCKS * 8 * 10 / 100),2) "浪费空间 k"FROM USER_TABLESWHERE TEMPORARY = 'N'ORDER BY 5 DESC;
  1. 查看上次收集的统计时间
select table_name,last_analyzed from dba_tables where owner = 'SCHEMA_NAME'
  1. 收集整个 Schema 中对象的统计信息
SQL> exec dbms_stats.gather_schema_stats(ownname=>'SCHEMA_NAME');

高水位问题会产生什么不好的影响?

  • 查询响应时间(尤其是全表扫描)变慢
  • 产生大量行迁移
  • 浪费空间

如何解决高水位问题?

10g之前有两种方式

  1. 导出表,删除表,再导入表
  2. alter table move (一般选择第二种,但是不能在线进行而且需要重建索引)

10g之后

提供 shrink 命令,需要表空间是基于自动段管理的,分两步走:

  • 第一步:整理表,不影响DML操作
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;--关闭行移动

也可以一步到位:

alter table TABLE_NAME shrink space;

shrink 的优势:不需要重建索引。可以在线操作。

注意 :segment shrink执行的两个阶段:

  1. 数据重组(compact):通过一系列insert、delete操作,将数据尽量排列在段的前面。在这个过程中需要在表上加RX锁,即只在需要移动的行上加锁。由于涉及到rowid的改变,需要enable row movement.同时要disable基于rowid的trigger.这一过程对业务影响比较小。
  2. HWM调整:第二阶段是调整HWM位置,释放空闲数据块。此过程需要在表上加X锁,会造成表上的所有DML语句阻塞。在业务特别繁忙的系统上可能造成比较大的影响。
  • 注意:shrink space语句两个阶段都执行。shrink space compact只执行第一个阶段。如果系统业务比较繁忙,可以先执行shrink space compact重组数据,然后在业务不忙的时候再执行shrink space降低HWM释放空闲数据块。

转载于:https://www.cnblogs.com/fubinhnust/p/9925731.html

Oracle 高水位问题相关推荐

  1. oracle的高水位和低水位实验,Oracle 高水位问题

    Oracle 对数据段的管理有一个高水位(HWM, High Water Mark)的概念.高水位是数据段中使用过和未使用过的数据块的分界线.高水位以下的数据块是曾使用过的,以上的是从未被使用或初始化 ...

  2. oracle hwm的位置,Oracle 高水位(HWM)教程(2)

    4. 用逻辑导入导出: Emp/Imp 5. Alter table table_name deallocate unused 注:这证明,DEALLOCATE UNUSED为释放HWM上面的未使用空 ...

  3. [Oracle]高水位标记(HWM)

    (一)高水位标记(High Water Mark,HWM)的概念 所谓高水位标记,是指一个已经分配的段中,已经使用的空间与未使用的空间的分界线.在表的使用过程中,随着数据的不断增多(insert),H ...

  4. Oracle 高水位(HWM: High Water Mark) 说明

    一. 准备知识:ORACLE的逻辑存储管理.        ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块.        1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K ...

  5. ORACLE 高水位(HWM)

    在9I中: (1)如果MINEXTENT 可以使ALTER TABLE TABLENAME DEALLOCATE UNUSED将HWM以上所有没使用的空间释放 (2)如果MINEXTENT >H ...

  6. Oracle 删除数据后释放数据文件所占磁盘空间(表空间降高水位)

    测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle "高水位"所致,那么怎么把这些数据文件的 ...

  7. MySQL 高水位update_Oracle delete 高水位线处理问题

    最近遇到oracle 表中数据量很大查询和更新比较慢 需要删除,发现删除后查询速度还是很慢,原来是delete oracle 高水位没有下降的 最近遇到Oracle 表中数据量很大查询和更新比较慢 需 ...

  8. oracle lob 字段清理,Oracle数据库高水位释放——LOB字段空间释放

    在Oracle数据库中表随着数据增长,所占磁盘容量也会增长,当表中数据不再需要时,对表进行delete操作,表中代表所占空间的标志-高水位,不会随着数据删除而下降,高水位没有变化,即使删除了数据库,表 ...

  9. Oracle—deallocate unused释放高水位空间(二)

    deallocate unused :仅适用于释放HWM高水位以上的空间,而无法释放高水位以下的空间:比如对表预分配的空间 使用说明和方法,官方文档有说明,如下: Use the deallocate ...

最新文章

  1. NR 5G RLC无线链路控制
  2. 下拉框联动_058-ajax之三级联动案例分析
  3. Securing Spring Cloud Microservices With OAuth2
  4. 南开大学20春计算机应用基础,南开大学-2020春学期《计算机应用基础》在线作业.txt.pdf...
  5. 安装freetds小记
  6. php redis 定时任务,利用redis实现定时任务,完全不需要crontab
  7. 【扩频通信】基于matlab扩频通信系统仿真【含Matlab源码 968期】
  8. 素材解析程序源代码,用thinkphp开发的 支持12大网站,其他需要定制
  9. Cesium加载OSGB数据
  10. 织梦(dedecms)标签大全(非常全面)
  11. 用linux云服务器搭建自己的网站
  12. 爱征信,就是爱自己 | 个人征信怎么查?攻略在这里!
  13. 核芯基站_更新CLE版本
  14. 性能第二讲:性能优化-每个程序员都应该知道的数字
  15. 初识C语言 | C语言零基础入门(第一天)
  16. Mybati从持久层到大气层
  17. 单片机之时钟工作原理
  18. 2020计算机科学与技术考研大纲,2020东华大学计算机考研大纲
  19. JavaScript基础第02天—运算符(操作符)—流程控制—循环—代码规范
  20. 服务器usb驱动安装系统安装失败怎么办,win7系统安装USB3.0驱动程序失败的解决方法...

热门文章

  1. 运维学习之进程的定义及其命令的使用
  2. iOS 正确选择图片加载方式
  3. no nlsxbe in java.library.path
  4. Table 'barfoo_datacenter_config.parttemplates' doesn't exist------Mysql
  5. Fiddler 跟踪数据包
  6. Spring MVC之表单标签
  7. vs2005中关于masterpage,Theme,skin的一点总结
  8. mysql启动集群报连接本地失败_启动本地安装的pxc集群失败,前面的步骤都检查没错了...
  9. 新疆自考大专计算机应用专业,新疆大学2017年新疆自考计算机信息管理(专科)考试计划...
  10. 签约 计算机英语,签约协议时的英文表达