Oracle中普通DML SQL查询中的并行提示可以按以下方式使用
select /*+ PARALLEL (A,2) */ * from table A ;
我们可以通过类似的方式在PL / SQL中使用并行提示来在oracle中选择语句吗?
select /*+ PARALLEL(A,2) */ A.* BULK COLLECT INTO g_table_a from Table A ;
如果我使用上述语法,是否有任何方法可以验证上述select语句是否并行执行?
编辑:假设g_table_a是ROWTYPE表的表数据结构
答案 0 :(得分:2)
如果该语句花费的时间很短,则您不想并行运行它。请注意,例如查询说串行执行需要0.5秒,因此并行执行可能需要2.5秒,因为建立并行执行的开销最大。
因此,如果查询花费很长时间,则您有足够的时间检查V$SESSION
(在RAC中使用gv$session
),并查看与运行查询的用户的所有会话。
select * from gv$session where username = 'your_user'
对于串行执行,您只能看到一个会话,对于并行执行,您只能看到一个协调器和其他会话,最多可达所选并行度的两倍。
或者使用v$px_session
来将并行工作进程会话与查询协调器连接起来。
select SID, SERIAL#, DEGREE, REQ_DEGREE
from v$px_session
where qcsid = <SID of the session running teh parallel statement>;
在这里,您还会看到所需的并行度和实际使用的 DOP
答案 1 :(得分:0)
您可以从查询的解释计划中轻松地进行检查。如果是Plsql,还可以跟踪该过程并检入TKprof文件。