暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片
ORACLE高水位问题处理方式.docx
580
6页
9次
2022-07-04
5墨值下载
Oracle
高水位问题解决
最近遇到
Oracle
表中数据量很大查询和更新比较慢 需要删除,发现删除后查询速度
还是很慢,原来是
delete oracle
高水位没有下降的原因。
oracle
,
使用
delete
删除数据以后,数据库的存储容量不会减少,而且使用
delete
删除某个表的数据以后,查询这张表的速度和删除之前一样,不会发生变化。
因为
oralce
有一个
HWM
高水位,它是
oracle
的一个表使用空间最高水位线。当插
入了数据以后,高水位线就会上涨,但是如果你采用
delete
语句删除数据的话,数据虽然
被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。除非使用
truncate
删除数据。那么,这条高水位线在日常的增删操作中只会上涨,不会下跌,所以
数据库容量也只会上升,不会下降。而使用
select
语句查询数据时,数据库会扫描高水位
线以下的数据块,因为高水位线没有变化,所以扫描的时间不会减少,所以才会出现使用
delete
删除数据以后,查询的速度还是和
delete
以前一样
解决方案:
1.
首先导出表,然后
truncate
这张表,最后导入这张表。
2.
在存储空间当中移动表,但是由于
rowid
会被打乱,所以需要重建索引
.
3.
如果是
oracle 10g.
可是直接更新表的高水位线。
对应的
SQL
9i
中:
create table aa_bak as select * from aa where record_time > sysdate -
10;
truncate table aa;
insert into aa select * from aa_bak;
drop table aa_bak;
10g
版本
(
也适用于
11G)
alter tablename enable row movement;
alter tablename shrink space;
实战:
select count(*) from wlkp_fp_kj
查询结果显示
2301245
条记录
我们需要删除一部分数据
删除之前我们先查看表的高水位线
(wlkp_fp_kj
是张分区表)
SELECT segment_name, segment_type, blocks FROM dba_segments
WHERE segment_name = 'WLKP_FP_KJ'
删除数据
SQL
select count(*) from wlkp_fp_kj where kprq'2011-12-01 14:00:00', 'yyyy-
mm-dd,hh24:mi:ss')
and kprq>to_date('2011-11-01 14:00:00', 'yyyy-mm-dd,hh24:mi:ss')
记录条数
54802
删除语句
delete from wlkp_fp_kj where kprq'2011-12-01 14:00:00', 'yyyy-mm-
dd,hh24:mi:ss')
and kprq>to_date('2011-11-01 14:00:00', 'yyyy-mm-dd,hh24:mi:ss')
删除后查询
WLKP_FP_KJ
表的高水位
发现查询结果和上面没有删除之前一样没有变化。说明
DELETE
语句高水位不会下
我数据库
10G
直接用方法二实现
执行如下语句:
of 6
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜