如何在多个表中使用并行查询?服务器有6个CPU。

[复制链接]
查看11 | 回复5 | 2013-8-22 09:58:03 | 显示全部楼层 |阅读模式
假设有两个表,表a和表b
表a包含id、first_name两个字段
表b包含ld、last_name 两个字段
我有 一个查询
select a.id,
a.first_name,
b.last_name
from a,
b
where a.id = b.id
/
我如何才能同时对两个表进行并行查询?
以下是对单个表的并行查询例子。
select /*+ parallel(a,4)*/
a.id,
a.first_name,
b.last_name
from a,
b
where a.id = b.id
/
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
并行查询未必会更快啊!这两个表有多大?
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
希望大家把并行查询的利弊继续讨论下去
楼上的
请给你原因啊
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
并行处理一般都牵涉到访问磁盘,如果数据不是分布在多个磁盘上,使用并行将会造成一个I/O的瓶颈。
假设一个查询的并行度是4,那么oracle至少会为这个查询创建第5个进程(查询的协调器)来协调前4个并行查询服务器进程,如果这个查询返回的结果集还需要排序的话,那么还会产生4个进程用于查询排序!一共9个进程,但并行度是4!这时,如果可供使用的处理器不足9个,则有可能遇到cpu的瓶颈问题。
因为查询协调部分的操作也将占用一些资源,所以使用并行操作通常并不能增强(反而很可能降低)快速查询(比如使用索引很好地限制了访问范围)的性能;在一些很小的表中使用并行操作同样会导致降低性能。
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
楼主的查询可以用:
select/* + parallel(a,4) parallel(b,4) */......
试试,用空格将多个提示分开。
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
iwxxrq的回答中关于CPU的问题我还真是没考虑那么全,只是认为有5个cpu足可以完成需求。幸好我的没有排序需求。
对于磁盘I/O问题我这边没有问题,有专门的阵列库盯着。而且应用对磁盘的读写不是很频繁。
我还有个问题就是如果有三个表甚至更多的表并且有子查询那么并行查询的的cpu占用如何计算?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行