对于一个大的任务,一般的做法是利用一个进程,串行的执行,如果系统资源足够,可以采用parallel技术,把一个大的任务分成若干个小的任务,同时启用n个进程/线程,并行的处理这些小的任务,这些并发的进程称为并行执行服务器(parallel executeion server),这些并发进程由一个称为并发协调进程的进程来管理。
启用Parallel前的忠告:只有在需要处理一个很大的任务,如需要几十分钟,几个小时的作业中,并且要有足够的系统资源的情况下(这些资源包括cpu,内存,io),您才应该考虑使用parallel。否则,在一个多并发用户下,系统本身资源负担已经很大的情况下,启用parallel,将会导致某一个会话试图占用了所有的资源,其他会话不得不去等待,从而导致系统系能反而下降的情况,一般情况下,oltp系统不要使用parallel,oltp系统中可以考虑去使用。
①查询语句中追加多线程
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PRALLEL QUERY';
SELECT /*+ PARALLEL(table 4) */
FROM table
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PRALLEL QUERY';
②insert update delete语句中追加多线程
EXECUTE IMMEDIATE 'ALTER SESSION ENABLE PARALLEL DML';
INSERT /*+ parallel(TBLINVRCARD_tmp,2)*/ into TBLINVRCARD_tmp select /*+ pa
rallel(TBLINVRCARD,2)*/ * from TBLINVRCARD;
EXECUTE IMMEDIATE 'ALTER SESSION DISABLE PARALLEL DML';
注意:在同一事务中,如果对表进行了变更,则不可以对同一表进行多线程
反之,对表进行了多线程操作后不能进行查询变更