IT猫扑网文章教程

分类分类

oracle并行查询常用7问

2015-06-28 00:00作者:网管联盟

  在OLAP环境,以利用多的CPU和内存资源来加速处理数据,也即oracle的并行查询。单个CPU同一时刻只能服务一个进程,如果有多个CPU,提高CPU利用律,就可以同时运行多个进程。也就是原来单个进程处理的变成多个进程并行处理加速执行时间。并行执行只是在全表处理或者分区及在分区表中执行本地索引时用到。下面情况会用到并行查询:

  全表扫描、 rebuild index、update (全表或分区表)、insert的并行子查询、本地索引使用、批量插入,象SQLLDR、创建临时表

  比如我们执行

  select /*+ parallel(c1 ,2) */

  ...

  from customers c1

  order by ...process a process b

  fetch rows from fetch rows from

  customers customers

  || ||

  || ||

  ^^ ^^

  process c process d

  sort rows(a-k) sort rows(l-z)

  combine rows

  ||

  return result set

  这里我们看到这个进程分散成4个进程,排序中各负责a-k和l-z,这样就可以并行处理

  我们在分区表中,也可以用一个并行从进程对应一个分区表如果你的并行度是3,那么你可能就比普通的执行速度提高3倍

  注意在单CPU下,如果使用并行,那么就可能造成性能下降,而且也要设置合适的并行度

  并行适合对于长时间运行的语句

  在oltp可能并不适合使用并行处理,因为事务并发比较多,每个用户都要使用CPU,CPU的负载本来就比较高

  所以并行处理还是比较适合olap中的批量导入,sqlldr,mis report和oltp中rebuild index。

  看看并行选件是否安装

  Select * FROM V$OPTION

  where parameter like 'Parallel%';

  看看

  Parallel execution是不是TRUE

  如果是TRUE,执行语句后查看

  select * from V$pq_sesstat;

  where name like '%Parallelized';

  如果Queries Parallelized>>0就说明是执行了并行

  可以强制使用PARALLEL,和CPU数量无关,不过在单个CPU下使用并行没有什么好处

  alter session force parallel query;

  可以强制将某表执行全表扫描时使用并行查询

  alter table tablename parallel 7;

展开全部

相关文章

说两句网友评论
    我要跟贴
    取消