数据库SHARED提示与PARALLEL提示的差异及执行结果疑问
我在数据库中发现一条使用SHARED提示的查询语句:
SELECT /*+ SHARED (8) */ ID from tab1
查看其执行计划后,发现包含代表并行执行的px send qc操作,执行计划如下:
----------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost | Time | ----------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 58773659 | 235094636 | 7389 | | | 1 | PX COORDINATOR | | | | | | | 2 | PX SEND QC (RANDOM) | :TQ10000 | 58773659 | 235094636 | 7389 | | | 3 | PX BLOCK ITERATOR | | 58773659 | 235094636 | 7389 | | | 4 | INDEX FAST FULL SCAN | IDX_RTEST3 | 58773659 | 235094636 | 7389 | | -----------------------------------------------------------------------------------------
当我使用PARALLEL提示执行查询:
select /*+parallel(8) */ ID from tab1
得到了相同的执行结果,想咨询SHARED提示与PARALLEL提示之间的差异是什么?
差异说明
资源复用逻辑不同
SHARED提示会从Oracle的共享并行服务器池中获取进程,这些进程可被多个查询复用,查询结束后不会立即销毁,能减少进程创建、销毁的额外开销;默认情况下PARALLEL提示使用专用并行进程,这类进程为当前查询专属创建,任务完成后会被终止(或按参数设置延迟释放),无法被其他查询复用。适用场景有区别
SHARED适合短时间、高频次的并行查询,能显著降低资源调度的消耗;PARALLEL更适合长耗时、资源密集型的并行任务,专属进程可避免共享池资源竞争,保障任务的资源供给。参数依赖不同
SHARED提示的生效依赖PARALLEL_SERVERS_TARGET等共享并行相关参数配置,只有共享池有可用进程时才能触发并行;PARALLEL提示的基础生效仅需开启并行功能(比如合理设置PARALLEL_MAX_SERVERS参数),无需依赖共享池配置。后台执行逻辑差异
虽然两者的执行计划表面相似(都包含PX系列并行操作),但后台进程的归属完全不同:SHARED的并行进程属于共享池,受共享资源池的调度限制;PARALLEL的专用进程独立于共享池,仅服务于当前查询,调度更灵活但资源复用性差。
内容的提问来源于stack exchange,提问作者Baalback
相关产品推荐
相关产品推荐

