oracle的并行查询
并行查询 满足下面条件:
有多个CPU
数据分离在多个磁盘上
通常用在OLAP环境,以利用多的CPU和内存资源来加速处理数据。因为单个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下,如果使用并行,那么就可能造成性能下降,而且也要设置
并行查询 满足下面条件:
有多个CPU
数据分离在多个磁盘上
通常用在OLAP环境,以利用多的CPU和内存资源来加速处理数据。因为单个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下,如果使用并行,那么就可能造成性能下降,而且也要设置