mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Revert "Fix accumulation of parallel worker instrumentation."
This reverts commit 2c09a5c12a66087218c7f8cba269cd3de51b9b82. Per further discussion, that doesn't seem to be the best possible fix. Discussion: http://postgr.es/m/CAA4eK1LW2aFKzY3=vwvc=t-juzPPVWP2uT1bpx_MeyEqnM+p8g@mail.gmail.com
This commit is contained in:
		
							parent
							
								
									9fa6f00b13
								
							
						
					
					
						commit
						1d6fb35ad6
					
				| @ -819,19 +819,6 @@ ExecParallelReinitialize(PlanState *planstate, | |||||||
| 	/* Old workers must already be shut down */ | 	/* Old workers must already be shut down */ | ||||||
| 	Assert(pei->finished); | 	Assert(pei->finished); | ||||||
| 
 | 
 | ||||||
| 	/* Clear the instrumentation space from the last round. */ |  | ||||||
| 	if (pei->instrumentation) |  | ||||||
| 	{ |  | ||||||
| 		Instrumentation *instrument; |  | ||||||
| 		SharedExecutorInstrumentation *sh_instr; |  | ||||||
| 		int			i; |  | ||||||
| 
 |  | ||||||
| 		sh_instr = pei->instrumentation; |  | ||||||
| 		instrument = GetInstrumentationArray(sh_instr); |  | ||||||
| 		for (i = 0; i < sh_instr->num_workers * sh_instr->num_plan_nodes; ++i) |  | ||||||
| 			InstrInit(&instrument[i], pei->planstate->state->es_instrument); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/* Force parameters we're going to pass to workers to be evaluated. */ | 	/* Force parameters we're going to pass to workers to be evaluated. */ | ||||||
| 	ExecEvalParamExecParams(sendParams, estate); | 	ExecEvalParamExecParams(sendParams, estate); | ||||||
| 
 | 
 | ||||||
| @ -953,33 +940,21 @@ ExecParallelRetrieveInstrumentation(PlanState *planstate, | |||||||
| 	for (n = 0; n < instrumentation->num_workers; ++n) | 	for (n = 0; n < instrumentation->num_workers; ++n) | ||||||
| 		InstrAggNode(planstate->instrument, &instrument[n]); | 		InstrAggNode(planstate->instrument, &instrument[n]); | ||||||
| 
 | 
 | ||||||
| 	if (!planstate->worker_instrument) | 	/*
 | ||||||
| 	{ | 	 * Also store the per-worker detail. | ||||||
| 		/*
 | 	 * | ||||||
| 		 * Allocate space for the per-worker detail. | 	 * Worker instrumentation should be allocated in the same context as the | ||||||
| 		 * | 	 * regular instrumentation information, which is the per-query context. | ||||||
| 		 * Worker instrumentation should be allocated in the same context as | 	 * Switch into per-query memory context. | ||||||
| 		 * the regular instrumentation information, which is the per-query | 	 */ | ||||||
| 		 * context. Switch into per-query memory context. | 	oldcontext = MemoryContextSwitchTo(planstate->state->es_query_cxt); | ||||||
| 		 */ | 	ibytes = mul_size(instrumentation->num_workers, sizeof(Instrumentation)); | ||||||
| 		oldcontext = MemoryContextSwitchTo(planstate->state->es_query_cxt); | 	planstate->worker_instrument = | ||||||
| 		ibytes = | 		palloc(ibytes + offsetof(WorkerInstrumentation, instrument)); | ||||||
| 			mul_size(instrumentation->num_workers, sizeof(Instrumentation)); | 	MemoryContextSwitchTo(oldcontext); | ||||||
| 		planstate->worker_instrument = |  | ||||||
| 			palloc(ibytes + offsetof(WorkerInstrumentation, instrument)); |  | ||||||
| 		MemoryContextSwitchTo(oldcontext); |  | ||||||
| 
 |  | ||||||
| 		for (n = 0; n < instrumentation->num_workers; ++n) |  | ||||||
| 			InstrInit(&planstate->worker_instrument->instrument[n], |  | ||||||
| 					  planstate->state->es_instrument); |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	planstate->worker_instrument->num_workers = instrumentation->num_workers; | 	planstate->worker_instrument->num_workers = instrumentation->num_workers; | ||||||
| 
 | 	memcpy(&planstate->worker_instrument->instrument, instrument, ibytes); | ||||||
| 	/* Accumulate the per-worker detail. */ |  | ||||||
| 	for (n = 0; n < instrumentation->num_workers; ++n) |  | ||||||
| 		InstrAggNode(&planstate->worker_instrument->instrument[n], |  | ||||||
| 					 &instrument[n]); |  | ||||||
| 
 | 
 | ||||||
| 	/* Perform any node-type-specific work that needs to be done. */ | 	/* Perform any node-type-specific work that needs to be done. */ | ||||||
| 	switch (nodeTag(planstate)) | 	switch (nodeTag(planstate)) | ||||||
|  | |||||||
| @ -465,28 +465,7 @@ select count(*) from bmscantest where a>1; | |||||||
|  99999 |  99999 | ||||||
| (1 row) | (1 row) | ||||||
| 
 | 
 | ||||||
| -- test accumulation of stats for parallel node |  | ||||||
| reset enable_seqscan; | reset enable_seqscan; | ||||||
| alter table tenk2 set (parallel_workers = 0); |  | ||||||
| explain (analyze, timing off, summary off, costs off) |  | ||||||
| 	select count(*) from tenk1, tenk2 where tenk1.hundred > 1 |  | ||||||
|         and tenk2.thousand=0; |  | ||||||
|                                 QUERY PLAN                                 |  | ||||||
| -------------------------------------------------------------------------- |  | ||||||
|  Aggregate (actual rows=1 loops=1) |  | ||||||
|    ->  Nested Loop (actual rows=98000 loops=1) |  | ||||||
|          ->  Seq Scan on tenk2 (actual rows=10 loops=1) |  | ||||||
|                Filter: (thousand = 0) |  | ||||||
|                Rows Removed by Filter: 9990 |  | ||||||
|          ->  Gather (actual rows=9800 loops=10) |  | ||||||
|                Workers Planned: 4 |  | ||||||
|                Workers Launched: 4 |  | ||||||
|                ->  Parallel Seq Scan on tenk1 (actual rows=1960 loops=50) |  | ||||||
|                      Filter: (hundred > 1) |  | ||||||
|                      Rows Removed by Filter: 40 |  | ||||||
| (11 rows) |  | ||||||
| 
 |  | ||||||
| alter table tenk2 reset (parallel_workers); |  | ||||||
| reset enable_indexscan; | reset enable_indexscan; | ||||||
| reset enable_hashjoin; | reset enable_hashjoin; | ||||||
| reset enable_mergejoin; | reset enable_mergejoin; | ||||||
|  | |||||||
| @ -179,14 +179,7 @@ insert into bmscantest select r, 'fooooooooooooooooooooooooooooooooooooooooooooo | |||||||
| create index i_bmtest ON bmscantest(a); | create index i_bmtest ON bmscantest(a); | ||||||
| select count(*) from bmscantest where a>1; | select count(*) from bmscantest where a>1; | ||||||
| 
 | 
 | ||||||
| -- test accumulation of stats for parallel node |  | ||||||
| reset enable_seqscan; | reset enable_seqscan; | ||||||
| alter table tenk2 set (parallel_workers = 0); |  | ||||||
| explain (analyze, timing off, summary off, costs off) |  | ||||||
| 	select count(*) from tenk1, tenk2 where tenk1.hundred > 1 |  | ||||||
|         and tenk2.thousand=0; |  | ||||||
| alter table tenk2 reset (parallel_workers); |  | ||||||
| 
 |  | ||||||
| reset enable_indexscan; | reset enable_indexscan; | ||||||
| reset enable_hashjoin; | reset enable_hashjoin; | ||||||
| reset enable_mergejoin; | reset enable_mergejoin; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user