Oracle 高水位问题
- Oracle 对数据段的管理有一个高水位(HWM, High Water Mark)的概念。高水位是数据段中使用过和未使用过的数据块的分界线。高水位以下的数据块是曾使用过的,以上的是从未被使用或初始化过的。
- 当 Oracle 进行全表扫描(FTS, Full table scan)的操作时,它会读高水位下的所有数据块。如果高水位下还有很多空闲空间(碎片),读取这些空闲数据块会降低操作的性能。
- 当针对一个表的删除操作很多时,表会产生大量碎片。删除操作释放的空间不会被插入操作立即重用,甚至永远也不会被重用,这被称之为高水位问题;
如何检查表是否有高水位问题?
- 收集表的统计信息
SQL> exec dbms_stats.gather_table_stats(ownname=>'SCHEMA_NAME',tabname=> 'TABLE_NAME');
- 查询高水位表信息
/* 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;
- 查看上次收集的统计时间
select table_name,last_analyzed from dba_tables where owner = 'SCHEMA_NAME'
- 收集整个 Schema 中对象的统计信息
SQL> exec dbms_stats.gather_schema_stats(ownname=>'SCHEMA_NAME');
高水位问题会产生什么不好的影响?
- 查询响应时间(尤其是全表扫描)变慢
- 产生大量行迁移
- 浪费空间
如何解决高水位问题?
10g之前有两种方式
- 导出表,删除表,再导入表
- 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执行的两个阶段:
- 数据重组(compact):通过一系列insert、delete操作,将数据尽量排列在段的前面。在这个过程中需要在表上加RX锁,即只在需要移动的行上加锁。由于涉及到rowid的改变,需要enable row movement.同时要disable基于rowid的trigger.这一过程对业务影响比较小。
- HWM调整:第二阶段是调整HWM位置,释放空闲数据块。此过程需要在表上加X锁,会造成表上的所有DML语句阻塞。在业务特别繁忙的系统上可能造成比较大的影响。
- 注意:shrink space语句两个阶段都执行。shrink space compact只执行第一个阶段。如果系统业务比较繁忙,可以先执行shrink space compact重组数据,然后在业务不忙的时候再执行shrink space降低HWM释放空闲数据块。
转载于:https://www.cnblogs.com/fubinhnust/p/9925731.html
Oracle 高水位问题相关推荐
- oracle的高水位和低水位实验,Oracle 高水位问题
Oracle 对数据段的管理有一个高水位(HWM, High Water Mark)的概念.高水位是数据段中使用过和未使用过的数据块的分界线.高水位以下的数据块是曾使用过的,以上的是从未被使用或初始化 ...
- oracle hwm的位置,Oracle 高水位(HWM)教程(2)
4. 用逻辑导入导出: Emp/Imp 5. Alter table table_name deallocate unused 注:这证明,DEALLOCATE UNUSED为释放HWM上面的未使用空 ...
- [Oracle]高水位标记(HWM)
(一)高水位标记(High Water Mark,HWM)的概念 所谓高水位标记,是指一个已经分配的段中,已经使用的空间与未使用的空间的分界线.在表的使用过程中,随着数据的不断增多(insert),H ...
- Oracle 高水位(HWM: High Water Mark) 说明
一. 准备知识:ORACLE的逻辑存储管理. ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块. 1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K ...
- ORACLE 高水位(HWM)
在9I中: (1)如果MINEXTENT 可以使ALTER TABLE TABLENAME DEALLOCATE UNUSED将HWM以上所有没使用的空间释放 (2)如果MINEXTENT >H ...
- Oracle 删除数据后释放数据文件所占磁盘空间(表空间降高水位)
测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle "高水位"所致,那么怎么把这些数据文件的 ...
- MySQL 高水位update_Oracle delete 高水位线处理问题
最近遇到oracle 表中数据量很大查询和更新比较慢 需要删除,发现删除后查询速度还是很慢,原来是delete oracle 高水位没有下降的 最近遇到Oracle 表中数据量很大查询和更新比较慢 需 ...
- oracle lob 字段清理,Oracle数据库高水位释放——LOB字段空间释放
在Oracle数据库中表随着数据增长,所占磁盘容量也会增长,当表中数据不再需要时,对表进行delete操作,表中代表所占空间的标志-高水位,不会随着数据删除而下降,高水位没有变化,即使删除了数据库,表 ...
- Oracle—deallocate unused释放高水位空间(二)
deallocate unused :仅适用于释放HWM高水位以上的空间,而无法释放高水位以下的空间:比如对表预分配的空间 使用说明和方法,官方文档有说明,如下: Use the deallocate ...
最新文章
- NR 5G RLC无线链路控制
- 下拉框联动_058-ajax之三级联动案例分析
- Securing Spring Cloud Microservices With OAuth2
- 南开大学20春计算机应用基础,南开大学-2020春学期《计算机应用基础》在线作业.txt.pdf...
- 安装freetds小记
- php redis 定时任务,利用redis实现定时任务,完全不需要crontab
- 【扩频通信】基于matlab扩频通信系统仿真【含Matlab源码 968期】
- 素材解析程序源代码,用thinkphp开发的 支持12大网站,其他需要定制
- Cesium加载OSGB数据
- 织梦(dedecms)标签大全(非常全面)
- 用linux云服务器搭建自己的网站
- 爱征信,就是爱自己 | 个人征信怎么查?攻略在这里!
- 核芯基站_更新CLE版本
- 性能第二讲:性能优化-每个程序员都应该知道的数字
- 初识C语言 | C语言零基础入门(第一天)
- Mybati从持久层到大气层
- 单片机之时钟工作原理
- 2020计算机科学与技术考研大纲,2020东华大学计算机考研大纲
- JavaScript基础第02天—运算符(操作符)—流程控制—循环—代码规范
- 服务器usb驱动安装系统安装失败怎么办,win7系统安装USB3.0驱动程序失败的解决方法...
热门文章
- 运维学习之进程的定义及其命令的使用
- iOS 正确选择图片加载方式
- no nlsxbe in java.library.path
- Table 'barfoo_datacenter_config.parttemplates' doesn't exist------Mysql
- Fiddler 跟踪数据包
- Spring MVC之表单标签
- vs2005中关于masterpage,Theme,skin的一点总结
- mysql启动集群报连接本地失败_启动本地安装的pxc集群失败,前面的步骤都检查没错了...
- 新疆自考大专计算机应用专业,新疆大学2017年新疆自考计算机信息管理(专科)考试计划...
- 签约 计算机英语,签约协议时的英文表达