当前位置: 首页 > Oracle, oracle 11g > 正文

direct path read temp等待时间和利用DDL删除重复数据

今天在删除重复数据的时候,数据库特别的慢,CPU和内存消耗还不是很多。

SQL> delete from test t where (t.doc,t.vol,t.efile)in (select doc,vol,efile
from test group by doc,vol,efile having count(*)>1) and rowid not in(select
min(rowid) from test group by doc,vol,efile having count(*)>1);

经查询,数据库里一直存在direct path read temp等待事件。

SQL> select EVENT,WAIT_CLASS from v$session_wait where WAIT_CLASS!='Idle';

EVENT                      WAIT_CLASS
-------------------------  --------------------
direct path read temp      User I/O

这个等待事件是当一个SESSION直接读取数据到PGA中,由于服务器处理PGA中数据块的速度远大于从磁盘读数据块到PGA的速度,通常解决这个问题的方法都是增大PGA的大小。由于系统资源有限,将pga_aggregate_target增大到1G,direct path read temp等待时间还是很明显,通过查看delete语句的执行计划,这个SQL需要执行3次全表扫描,test表280M,而且会产生笛卡尔集,后来利用以下方法实现快速去除重复数据。

SQL> create table ttt as select distinct * from test;
SQL> drop table test purge;
SQL> alter table ttt rename to test;

本文固定链接: http://www.dbdream.com.cn/2011/11/direct-path-read-temp%e7%ad%89%e5%be%85%e6%97%b6%e9%97%b4%e5%92%8c%e5%88%a9%e7%94%a8ddl%e5%88%a0%e9%99%a4%e9%87%8d%e5%a4%8d%e6%95%b0%e6%8d%ae/ | 信春哥,系统稳,闭眼上线不回滚!

该日志由 dbdream 于2011年11月01日发表在 Oracle, oracle 11g 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: direct path read temp等待时间和利用DDL删除重复数据 | 信春哥,系统稳,闭眼上线不回滚!
关键字: , ,

direct path read temp等待时间和利用DDL删除重复数据:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter