oracle高水位降低法
1.什么是高水位?(high water mark 简称:HWM)
所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词)都有一个在段内存放数据的上线,那么我们把这个上线成为“high water mark”或 HWM.HWM是一个标记,用来说明已经有多少没有使用的数据块分配给了这个segment。MWM通常增长的幅度为一次5个数据块。原则上
MWM只会增大,不会缩小。即使表中的全部数据都删除了,那么HWM还是原值,不会变,由于这个特点,使得HWM就像一个水库的历史最高水位。
简单的说就像水库里的历史最高水位。 就如刚挖的水库一样里面没有一滴水,那么它的最高水位为0.同理在刚建的新表中
由于没有一条数据,所以的高水位是0,随着不断的往里面添加数据,进行增删操作,那么它的高水位就会上涨。 当然也不是
说你把表的数据删掉一半,它的高水位就会下降,因为高水位代表历史最高水位。 在Oracle中执行delete删除操作不会降低高水位。执行truncate
操作可以降低高水位,通常能把高水位降到0. 所以为了降低高水位,能尽量使用truncate的就不使用delete操作。
---------也就是说进行增删操作只会上涨,不会下跌!!!
2.select 特性和高水位的关系
在Oracle中执行select 操作扫描的是高水位以下的全部数据块。所以不是说数据库中存放了多少数据块,就会扫描多少个数据块。现在回想以下,如果是一个新建的表,里面没有数 据,那么你执行select 扫描操作,那么高水位线基本就在0上,所以就没有数据块被扫描。扫描的时间就会用的很少。但是现在你往表里
插入1000万条数据,然后再执行delete操作,但是由于delete操作不影响高水位线,所以高水位线还是原来的高水位线。
----------所以就有人经常会说我的表中明明没有一条数据,但是执行select扫描怎么会那么慢呢,这个时候里面的奥秘就在于高水位线了!
3.为什么要降低高水位?
就行水库泄洪一样,你会打开水闸把超出最高水位预警线的水消退掉。 那么在Oracle中高水位以下存放的都是数据块,每次全表扫描的时候
都会把高水位以下的全部数据库都扫描一边,如此以来就会很浪会资源,响应时间比较长。 反之,如果我们把高水位降低,那么每次全表扫描的时候
是不是扫描的数据块是不是就少了。
4.为什么出来一个低HWM?
在管理段的时候通常有两种方法:手动管理段空间(Manual Segment Space Management )和自动段空间(Automatic Segment Space Management)。
在手动管理段空间的时候,段中只有一个HWM,但是为什么又会有一个低HWM呢?其实这都是因为自动管理段空间造成的。 在手动管理的时候
数据插入到新的数据块中,数据库块就先会被格式化然后等待数据访问,但是在自动管理中呢,数据插入到新的数据块中,数据块并没有被格式化,而是在第一次访问这个数据 库块的时候才格式化这个块。所以我们又需要一条水位线,用来标示已经被格式化的快。这条线就叫做低HWM.
一般来说,低HWM肯定地狱HWM.
5.HWM数据库的操作有如下影响:
a)全表扫描通常要读出直到hwm标记的所有的属于该表数据块,及时该表中没有任何数据。
b)即使HWM以下有空闲的数据块,键入在插入数据是使用了APPEND关键字,则在插入时用用HWM以上的数据块,此时HWM会自动增大。
6.那么如何降低高水位呢?
降低高水位通常有很多办法。就比如抗洪,你是如何想把洪水消退,可能会想到把水库的水闸打开,把水放掉。。。。。。
但是在Oracle中降低高水位通常有以下办法:
1.能使用truncate的尽量不适用delete操作。
2.新建一个临时表,把数据复制到临时表,然后把源表drop掉,再把临时表重新命名为源表的名字。
3.移动表空间。(或者不移动表空间)
4.执行表重建命令(alter table table_name move;)(在线转移表空间ALTER TABLE 。。。 MOVE TABLESPACE 。。。ALTER TABLE 。。。 MOVE 后面不跟参数也行,不跟 参数表还是在原来的表空间,move后记住重建索引。如果以后还要继续向这个表增加数据,没有必要move,只是释放出来的空间,只能这个表用,其他的表或者segment无法 使用该空间)
5.执行alter table table_name shrink space; 注意,此命令为Oracle 10g新增功能,再执行该指令之前必须允许行移动alter table table_name enable row movement;
查看高水位时先进行分析:
--每次查询各个结果时先分析表 才能得到最新的分析结果
analyze table biu_issuer_info compute statistics; select num_rows, blocks, empty_blocks, owner
from user_tables
where table_name = 'BIU_ISSUER_INFO'; --注意这里查询一定要用大写 select count(distinct dbms_rowid.rowid_block_number(rowid) ||
dbms_rowid.rowid_relative_fno(rowid)) zs
from BIU_ISSUER_INFO; --如果实际用的块数比高水位线低很多的话,则调整高水位可显著改善全表扫描效率 alter table BIU_ISSUER_INFO enable row movement; alter table BIU_ISSUER_INFO shrink space;
oracle高水位降低法的更多相关文章
- Oracle高水位2
--Oracle高水位2---------------------2013/11/24 一.什么是水线(High Water Mark)? 所有的oracle段(segments,在此,为了理解方便, ...
- oracle高水位问题
转自:https://blog.csdn.net/cnham/article/details/5987999 说到HWM,我们首先要简要的谈谈ORACLE的逻辑存储管理.我们知道,ORACLE在逻辑存 ...
- oracle高水位
oracle高水位http://www.cnblogs.com/chuyuhuashi/p/3548260.htmlhttp://blog.csdn.net/wyzxg/article/details ...
- [Oracle]高水位标记(HWM)
(一)高水位标记(High Water Mark,HWM)的概念 所谓高水位标记,是指一个已经分配的段中,已经使用的空间与未使用的空间的分界线.在表的使用过程中,随着数据的不断增多(insert),H ...
- Oracle 高水位说明和释放表空间,加快表的查询速度
高水位的介绍 数据库运行了一段时间,经过一些列的删除.插入.更改操作有些表的高水位线就有可能和实际的表存储数据的情况相差特别多,为了提高检索该表的效率,建议对这些表进行收缩: 查找高水位线的表 查找表 ...
- 探究 Oracle 高水位对数据库性能影响
在开始深入分析之前,让我们先来了解一下高水位线 HWM. 一. HWM 的基本原理 (概念) 在 Oracle 中,高水位线(High-warter mark, HWM)被用来形容数据块的使用位置,即 ...
- Oracle 高水位(HWM: High Water Mark)
http://blog.itpub.net/31397003/viewspace-2137246/ http://blog.itpub.net/12778571/viewspace-582695/ h ...
- Oracle降低高水位先(转载)
Oracle 降低高水位线的方法 高水位(HIGH WARTER MARK,HWM)好比水库中储水的水位,用于描述数据库中段的扩展方式.高水位对全表扫描方式有着至关重要的影响.当使用DELETE删除 ...
- [转]Oracle High Water Level高水位分析
PLSQL_性能优化系列14_Oracle High Water Level高水位分析 http://www.cnblogs.com/eastsea/p/4005814.html 一.摘要 PLSQL ...
随机推荐
- 2019-7-29未命名文件 sdfsdfsdf
2019-7-29未命名文件 sdfsdfsdf 新建模板小书匠 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过设置里的修改模板来改变新建文章的内容.
- pandas分组运算(groupby)
1. groupby() import pandas as pd df = pd.DataFrame([[1, 1, 2], [1, 2, 3], [2, 3, 4]], columns=[" ...
- Java中this和super的用法总结(转)
原文地址:https://www.cnblogs.com/hasse/p/5023392.html 这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正 ...
- Reactjs之Axios、fetch-jsonp获取后台数据
1.新增知识点 /** Axios获取服务器数据(无法跨域,只能让后台跨域获取数据) react获取服务器APi接口的数据: react中没有提供专门的请求数据的模块.但是我们可以使用任何第三方请求数 ...
- React 之form表单、select、textarea、checkbox使用
1.案例如下 import React from 'react'; /** * 非约束性组(类似defaultValue等属性,不可以程序修改): <input type="text& ...
- 我非要捅穿这 Neutron(一)网络实现模型篇
目录 文章目录 目录 前言 传统网络到虚拟化网络的演进 单一平面网络到混合平面网络的演进 Neutron 简述 Neutron 的网络实现模型 计算节点网络实现模型 内外 VID 转换 网络节点网络实 ...
- 针对C++容器类的一个简陋的allocator
参考: https://en.cppreference.com/w/cpp/named_req/Allocator http://www.josuttis.com/libbook/memory/mya ...
- java:LeakFilling(Springmvc)
1.后台可以同时多个对象接收前端页面的值:(如图两个都打印了) 2.参数绑定的注解,通过该注解可以解决参数名称与controller中形参名称不一致的问题: @RequestParam(name=&q ...
- vsftp新建用户及目录时遇到的坑
1.有关vsftp配置及用户权限设置,请参考: http://blog.sina.com.cn/s/blog_3edc5e2e0102vzv8.html 2.需求:公司另一部门要求单独建一目录,来存在 ...
- Revo Uninstaller Pro - 真正彻底卸载软件不留垃圾的强大神器!(清理安装残留文件/注册表)
大家都知道 Windows 在卸载软件时总是不够彻底,系统C盘总会留下大量难以辨别和清理的垃圾文件和临时文件,时间长了注册表也会变得非常臃肿,不仅浪费硬盘空间,而且也会明显拖慢系统响应和启动速度. R ...