下面这两段SQL,本意是用循环造数据用作压力测试用的,脚本的效率不高,大家不要吐槽。
在执行了这两句后,能够造出一百万左右的数据。
后来测试完了,把fcs_cls_app表清空,只留几条数据或者没有数据的时候,增删改查这个表就会变得非常的慢,哪怕几条数据都会要很长时间,几乎一分钟吧,十分的诡异。
我后来把fcs_cls_app这个表drop掉重新创建,就好了,增删改查都是正常的速度。
请问这会是什么原因呢?
本来没有考虑过这个脚本引起的问题的,然后今天有个同事也需要造数据做压测,我就把我写的这个脚本发给他改一下用了,然后出现了和我一样的情况:测试完了,表里面数据只有6条都要查询很长的时间!
(操作都是在PLSQL11客户端上进行的,但是很明显的能够感觉到系统运行时与这个表相关的操作也会变得很慢)
create table test as select * from fcs_cls_app;
--造数据
declare
i integer;
my_num integer;
begin
i:=1;
my_num:=1;
for i in 1..20 loop
delete from test;
insert into test select * from fcs_cls_app;
update test t set t.appsheetserialno = t.appsheetserialno + my_num;
insert into fcs_cls_app select * from test;
my_num:= my_num*2;
commit;
end loop;
end;
首先说一点,这个问题和redolog无关,redolog是oralce运行机制的一部分,必须使用,最多是测试环境归档日志没开。
表插入大批量数据再删除后,查询速度慢的问题,关键是使用delete语句删除记录后,表占用的空间没有释放,在oracle中的说法就是HWM保持不变,因此查询的时候即使只有几条记录,如果全表扫描的话仍会花费大量的时间,如果是临时表需要定期清理数据,使用truncate table更合适一些。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。