Oracle “中的平行提示”;选择进入";PL/SQL中的语句

Oracle “中的平行提示”;选择进入";PL/SQL中的语句,oracle,plsql,Oracle,Plsql,oracle中正常DML SQL查询中的并行提示可按以下方式使用 select /*+ PARALLEL (A,2) */ * from table A ; 以类似的方式,我们可以在PL/SQL中为oracle中的select into语句使用并行提示吗 select /*+ PARALLEL(A,2) */ A.* BULK COLLECT INTO g_table_a from Table A ; 如果我使用上述语法,有没有办法验证上述select语句是否并行执行 编辑:假设g_

oracle中正常DML SQL查询中的并行提示可按以下方式使用

 select /*+ PARALLEL (A,2) */  * from table A ;
以类似的方式,我们可以在PL/SQL中为oracle中的select into语句使用并行提示吗

  select /*+ PARALLEL(A,2) */ A.* BULK COLLECT INTO g_table_a from Table A ;
如果我使用上述语法,有没有办法验证上述select语句是否并行执行


编辑:假设g_table_a是ROWTYPE table的表数据结构

,您可以通过查询的解释计划轻松地检查这一点。对于Plsql,您还可以跟踪该过程并检入TKprof文件。

如果该语句占用的时间很短,则您不希望并行运行它。注意,例如,查询在串行执行中花费0.5秒可能在并行执行中花费2.5秒,因为最大的开销是设置并行执行

因此,如果查询需要很长时间,您有足够的时间检查
V$SESSION
(在RAC中使用
gv$SESSION
),并查看用户运行查询时的所有会话

select * from gv$session where username = 'your_user'
对于串行执行,您只会看到一个会话;对于并行执行,您会看到一个协调器和附加会话,最多为所选并行度的两倍

或者使用
v$px_会话
,它将并行工作会话与查询协调器连接起来

 select SID, SERIAL#, DEGREE, REQ_DEGREE 
 from v$px_session 
 where  qcsid = <SID of the session running teh parallel statement>;
选择SID、串行、度、请求度
从v$px_会话
其中qcsid=;

在这里,您还可以看到所需的并行度和实际使用的DOP。在我看来,从并行查询中受益的数据量太大,无法保存在内存中。您希望检索多少行,以及您要从中选择的表中有多少行?预计检索的行数为5mil。表中的行总数约为700万行。对于并行查询来说,这似乎不是很多,但需要保存在内存中的行数很多(当然取决于行的大小)。此过程的最终目标是在其他位置插入行,还是修改行?如果是这样的话,您可以改为使用单个SQL语句吗?这将是提高性能的最佳第一次尝试。是的,最终目标是修改返回的行。将尝试将它们修改为Single SQL语句。这是一个很好的计划–这绝对是实现高性能系统的方法。SQL优先!