Oracle delete语句调优一例(2)

有了这些信息,发现收获还是不小的,我写了一个脚本,来嵌入customer_id这个字段,来查看每个分区中需要删除的数据情况,结果发现第一个分区有8千多万条数据,查询的时间很长,最后竟然没有数据可以删除,其它的分区测试的时候执行速度都很快。
 分区C25_M2_S8中的要删除的数据有9百多万,其它分区都没有匹配的数据,从数据层面,我是没法确定这些分区一定没有可能插入新数据的。
 所以分析了上面的情况,我对分区C25_M2_S1做了特殊处理,按照执行计划是走索引扫描的,因为查询条件的范围有点大,还没有匹配的数据,所以我尝试走全表扫描,开启了并行,经过测试,发现速度还是很快的,基本在1分钟左右就能够很快过滤出数据来。
 所以从数据层面我提供的语句如下,把最大的分区放在了最后处理。
set linesize 200
 set timing on
 set time on
 alter session force parallel dml parallel 16;
 delete event partition(C25_M2_S2)  where cycle_code=25 and cycle_month=2 and cycle_year=2015 and customer_id=5289835;
 commit;
 delete event partition(C25_M2_S3)  where cycle_code=25 and cycle_month=2 and cycle_year=2015 and customer_id=5289835;
 commit;
 delete event partition(C25_M2_S4)  where cycle_code=25 and cycle_month=2 and cycle_year=2015 and customer_id=5289835;
 commit;
。。。。。。。
delete event partition(C25_M2_S20)  where cycle_code=25 and cycle_month=2 and cycle_year=2015 and customer_id=5289835;
 commit;
 delete /*+ full(rated_event) parallel(rated_event,16) */ event partition(C25_M2_S1)  where cycle_code=25 and cycle_month=2 and cycle_year=2015 and customer_id=5289835;
 commit;


事情到此一般就结束了,开发找到我,我们做了进一步的沟通,她根据我提供的脚本提出了一些问题,她从业务层面来做了确认,说数据只会在C25_M2_S8这个分区上,有了业务确认,调优的语句就更加简化了。
set linesize 200
set timing on
set time on
alter session force parallel dml parallel 16;
 delete event partition(C25_M2_S8)  where cycle_code=25 and cycle_month=2 and cycle_year=2015 and customer_id=5289835;
 commit;

查看执行计划,合理的走了全表扫描,因为分区中有1千多万的记录,删除900多万的数据,走全表扫描还是情理之中的。
Plan hash value: 1742190108
 ----------------------------------------------------------------------------------------------------------------------------------
 | Id  | Operation            | Name        | Rows  | Bytes | Cost (%CPU)| Time    | Pstart| Pstop |    TQ  |IN-OUT| PQ Distrib |
 ----------------------------------------------------------------------------------------------------------------------------------
 |  0 | DELETE STATEMENT      |            |  9115K|  382M| 19351  (1)| 00:03:53 |      |      |        |      |            |
 |  1 |  PX COORDINATOR      |            |      |      |            |          |      |      |        |      |            |
 |  2 |  PX SEND QC (RANDOM) | :TQ10000    |  9115K|  382M| 19351  (1)| 00:03:53 |      |      |  Q1,00 | P->S | QC (RAND)  |
 |  3 |    DELETE            |      EVENT |      |      |            |          |      |      |  Q1,00 | PCWP |            |
 |  4 |    PX BLOCK ITERATOR |            |  9115K|  382M| 19351  (1)| 00:03:53 |  248 |  248 |  Q1,00 | PCWC |            |
 |*  5 |      TABLE ACCESS FULL|      EVENT |  9115K|  382M| 19351  (1)| 00:03:53 |  248 |  248 |  Q1,00 | PCWP |            |
 ----------------------------------------------------------------------------------------------------------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/decd0daccb79355981d56e82f906177d.html