Thanks for your reply.
From the code below:
(https://github.com/postgres/postgres/blob/REL_10_7/src/backend/executor/execParallel.c)
  
#######################################################################################
443     /*                                      
444              * Give parallel-aware nodes a chance to add to the estimates, 
and get a                                
445              * count of how many PlanState nodes there are.                 
        
446              */                             
447             e.pcxt = pcxt;                          
448             e.nnodes = 0;                           
449             ExecParallelEstimate(planstate, &e);                            
450                                             
451             /* Estimate space for instrumentation, if required. */          
                
452             if (estate->es_instrument)                              
453             {                               
454                     instrumentation_len =                   
455                             offsetof(SharedExecutorInstrumentation, 
plan_node_id) +         
456                             sizeof(int) * e.nnodes;         
457                     instrumentation_len = MAXALIGN(instrumentation_len);    
                
458                     instrument_offset = instrumentation_len;                
        
459                     instrumentation_len +=                  
460                             mul_size(sizeof(Instrumentation),               
461                                              mul_size(e.nnodes, nworkers));
462                     shm_toc_estimate_chunk(&pcxt->estimator, 
instrumentation_len);                  
463                     shm_toc_estimate_keys(&pcxt->estimator, 1);     

#######################################################################################
It seems that e.nnodes which returns from ExecParallelEstimate(planstate, &e) , 
determines how much instrumentation structures in DSM(line459~line461). 
And  e.nnodes also determines the length of SharedExecutorInstrumentation-> 
plan_node_id(line454~line456).

So, I think here it refers to instrumentation. 

SharedExecutorInstrumentation is just likes a master that hold the metadata: 
struct SharedExecutorInstrumentation
{
        int                     instrument_options;
        int                     instrument_offset;
        int                     num_workers;
        int                     num_plan_nodes;    // this equals to  e.nnodes 
from the source code 
        int                     plan_node_id[FLEXIBLE_ARRAY_MEMBER];
        /* array of num_plan_nodes * num_workers Instrumentation objects 
follows */
};

What do you think?

With Regards,
Wu Fei


-----Original Message-----
From: Amit Kapila [mailto:amit.kapil...@gmail.com] 
Sent: Wednesday, June 05, 2019 12:20 PM
To: Wu, Fei/吴 非 <wufei.f...@cn.fujitsu.com>
Cc: pgsql-hack...@postgresql.org
Subject: Re: Confusing comment for function ExecParallelEstimate

On Wed, Jun 5, 2019 at 9:24 AM Wu, Fei <wufei.f...@cn.fujitsu.com> wrote:
>
> Hi, all
>
> Lately I was researching  Parallelism of Postgres 10.7(and it is same in all 
> version), and I was confused when reading the comment of function 
> ExecParallelEstimate :
>
> (in   src/backend/executor/execParallel.c)
>
> ----------------------------------------------
>
>
>
> * While we're at it, count the number of PlanState nodes in the tree, 
> so
>
> * we know how many SharedPlanStateInstrumentation structures we need.
>
> static bool
>
> ExecParallelEstimate(PlanState *planstate, ExecParallelEstimateContext 
> *e)
>
> ----------------------------------------------
>
>
>
> The structure SharedPlanStateInstrumentation is not exists at all. And I 
> noticed that the so called “SharedPlanStateInstrumentation”
>
> maybe is the structure instrumentation now, which is used for storing 
> information of planstate in parallelism.  The function count the 
> number
>
> of planState nodes and stored it in ExecParallelEstimateContext-> 
> nnodes ,then use it to Estimate space for instrumentation structure in
>
> function  ExecInitParallelPlan.
>

I think here it refers to SharedExecutorInstrumentation.  This structure is 
used for accumulating per-PlanState instrumentation.  So, it is not totally 
wrong, but I guess we can change it to SharedExecutorInstrumentation to avoid 
confusion?  What do you think?


--
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com




Reply via email to