diff --git a/doc/src/sgml/perform.sgml b/doc/src/sgml/perform.sgml
index b50357c3b4..70e65549ac 100644
--- a/doc/src/sgml/perform.sgml
+++ b/doc/src/sgml/perform.sgml
@@ -562,7 +562,7 @@ WHERE t1.unique1 &lt; 10 AND t1.unique2 = t2.unique2;
          Recheck Cond: (unique1 &lt; 10)
          -&gt;  Bitmap Index Scan on tenk1_unique1  (cost=0.00..4.36 rows=10 width=0) (actual time=0.024..0.024 rows=10 loops=1)
                Index Cond: (unique1 &lt; 10)
-   -&gt;  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.29..7.91 rows=1 width=244) (actual time=0.021..0.022 rows=1 loops=10)
+   -&gt;  Index Scan using tenk2_unique2 on tenk2 t2  (cost=0.29..7.91 rows=1 width=244) (actual time=0.021..0.220 rows=1 loops=10)
          Index Cond: (unique2 = t1.unique2)
  Planning time: 0.181 ms
  Execution time: 0.501 ms
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index e1a62a1bce..a9c7f598af 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -1358,9 +1358,9 @@ ExplainNode(PlanState *planstate, List *ancestors,
 		planstate->instrument && planstate->instrument->nloops > 0)
 	{
 		double		nloops = planstate->instrument->nloops;
-		double		startup_ms = 1000.0 * planstate->instrument->startup / nloops;
-		double		total_ms = 1000.0 * planstate->instrument->total / nloops;
-		double		rows = planstate->instrument->ntuples / nloops;
+		double		startup_ms = 1000.0 * planstate->instrument->startup;
+		double		total_ms = 1000.0 * planstate->instrument->total;
+		double		rows = planstate->instrument->ntuples;
 
 		if (es->format == EXPLAIN_FORMAT_TEXT)
 		{
@@ -1714,9 +1714,9 @@ ExplainNode(PlanState *planstate, List *ancestors,
 
 			if (nloops <= 0)
 				continue;
-			startup_ms = 1000.0 * instrument->startup / nloops;
-			total_ms = 1000.0 * instrument->total / nloops;
-			rows = instrument->ntuples / nloops;
+			startup_ms = 1000.0 * instrument->startup;
+			total_ms = 1000.0 * instrument->total;
+			rows = instrument->ntuples;
 
 			if (es->format == EXPLAIN_FORMAT_TEXT)
 			{
@@ -2580,7 +2580,6 @@ show_instrumentation_count(const char *qlabel, int which,
 						   PlanState *planstate, ExplainState *es)
 {
 	double		nfiltered;
-	double		nloops;
 
 	if (!es->analyze || !planstate->instrument)
 		return;
@@ -2589,16 +2588,10 @@ show_instrumentation_count(const char *qlabel, int which,
 		nfiltered = planstate->instrument->nfiltered2;
 	else
 		nfiltered = planstate->instrument->nfiltered1;
-	nloops = planstate->instrument->nloops;
 
 	/* In text mode, suppress zero counts; they're not interesting enough */
 	if (nfiltered > 0 || es->format != EXPLAIN_FORMAT_TEXT)
-	{
-		if (nloops > 0)
-			ExplainPropertyFloat(qlabel, NULL, nfiltered / nloops, 0, es);
-		else
-			ExplainPropertyFloat(qlabel, NULL, 0.0, 0, es);
-	}
+		ExplainPropertyFloat(qlabel, NULL, nfiltered, 0, es);
 }
 
 /*
diff --git a/src/test/regress/expected/partition_prune.out b/src/test/regress/expected/partition_prune.out
index e0cc5f3393..06331d19c5 100644
--- a/src/test/regress/expected/partition_prune.out
+++ b/src/test/regress/expected/partition_prune.out
@@ -1837,7 +1837,7 @@ select explain_parallel_append('execute ab_q4 (2, 2)');
    ->  Gather (actual rows=3 loops=1)
          Workers Planned: 2
          Workers Launched: 2
-         ->  Partial Aggregate (actual rows=1 loops=3)
+         ->  Partial Aggregate (actual rows=3 loops=3)
                ->  Parallel Append (actual rows=0 loops=N)
                      Subplans Removed: 6
                      ->  Parallel Seq Scan on ab_a2_b1 (actual rows=0 loops=N)
@@ -1890,7 +1890,7 @@ select explain_parallel_append('execute ab_q5 (1, 1, 1)');
    ->  Gather (actual rows=3 loops=1)
          Workers Planned: 2
          Workers Launched: 2
-         ->  Partial Aggregate (actual rows=1 loops=3)
+         ->  Partial Aggregate (actual rows=3 loops=3)
                ->  Parallel Append (actual rows=0 loops=N)
                      Subplans Removed: 6
                      ->  Parallel Seq Scan on ab_a1_b1 (actual rows=0 loops=N)
@@ -1908,7 +1908,7 @@ select explain_parallel_append('execute ab_q5 (2, 3, 3)');
    ->  Gather (actual rows=3 loops=1)
          Workers Planned: 2
          Workers Launched: 2
-         ->  Partial Aggregate (actual rows=1 loops=3)
+         ->  Partial Aggregate (actual rows=3 loops=3)
                ->  Parallel Append (actual rows=0 loops=N)
                      Subplans Removed: 3
                      ->  Parallel Seq Scan on ab_a2_b1 (actual rows=0 loops=N)
@@ -1934,7 +1934,7 @@ select explain_parallel_append('execute ab_q5 (33, 44, 55)');
    ->  Gather (actual rows=3 loops=1)
          Workers Planned: 2
          Workers Launched: 2
-         ->  Partial Aggregate (actual rows=1 loops=3)
+         ->  Partial Aggregate (actual rows=3 loops=3)
                ->  Parallel Append (actual rows=0 loops=N)
                      Subplans Removed: 8
                      ->  Parallel Seq Scan on ab_a1_b1 (never executed)
@@ -1988,9 +1988,9 @@ select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on
    ->  Gather (actual rows=2 loops=1)
          Workers Planned: 1
          Workers Launched: 1
-         ->  Partial Aggregate (actual rows=1 loops=2)
+         ->  Partial Aggregate (actual rows=2 loops=2)
                ->  Nested Loop (actual rows=0 loops=2)
-                     ->  Parallel Seq Scan on lprt_a a (actual rows=51 loops=N)
+                     ->  Parallel Seq Scan on lprt_a a (actual rows=102 loops=N)
                            Filter: (a = ANY ('{0,0,1}'::integer[]))
                      ->  Append (actual rows=0 loops=102)
                            ->  Index Scan using ab_a1_b1_a_idx on ab_a1_b1 (actual rows=0 loops=2)
@@ -2021,9 +2021,9 @@ select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on
    ->  Gather (actual rows=2 loops=1)
          Workers Planned: 1
          Workers Launched: 1
-         ->  Partial Aggregate (actual rows=1 loops=2)
+         ->  Partial Aggregate (actual rows=2 loops=2)
                ->  Nested Loop (actual rows=0 loops=2)
-                     ->  Parallel Seq Scan on lprt_a a (actual rows=52 loops=N)
+                     ->  Parallel Seq Scan on lprt_a a (actual rows=104 loops=N)
                            Filter: (a = ANY ('{1,0,3}'::integer[]))
                      ->  Append (actual rows=0 loops=104)
                            ->  Index Scan using ab_a1_b1_a_idx on ab_a1_b1 (actual rows=0 loops=2)
@@ -2053,11 +2053,11 @@ select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on
    ->  Gather (actual rows=2 loops=1)
          Workers Planned: 1
          Workers Launched: 1
-         ->  Partial Aggregate (actual rows=1 loops=2)
+         ->  Partial Aggregate (actual rows=2 loops=2)
                ->  Nested Loop (actual rows=0 loops=2)
-                     ->  Parallel Seq Scan on lprt_a a (actual rows=51 loops=N)
+                     ->  Parallel Seq Scan on lprt_a a (actual rows=102 loops=N)
                            Filter: (a = ANY ('{1,0,0}'::integer[]))
-                           Rows Removed by Filter: 1
+                           Rows Removed by Filter: 2
                      ->  Append (actual rows=0 loops=102)
                            ->  Index Scan using ab_a1_b1_a_idx on ab_a1_b1 (actual rows=0 loops=2)
                                  Index Cond: (a = a.a)
@@ -2087,11 +2087,11 @@ select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on
    ->  Gather (actual rows=2 loops=1)
          Workers Planned: 1
          Workers Launched: 1
-         ->  Partial Aggregate (actual rows=1 loops=2)
+         ->  Partial Aggregate (actual rows=2 loops=2)
                ->  Nested Loop (actual rows=0 loops=2)
-                     ->  Parallel Seq Scan on lprt_a a (actual rows=50 loops=N)
+                     ->  Parallel Seq Scan on lprt_a a (actual rows=100 loops=N)
                            Filter: (a = ANY ('{1,0,0}'::integer[]))
-                           Rows Removed by Filter: 1
+                           Rows Removed by Filter: 2
                      ->  Append (actual rows=0 loops=100)
                            ->  Index Scan using ab_a1_b1_a_idx on ab_a1_b1 (never executed)
                                  Index Cond: (a = a.a)
@@ -2210,8 +2210,8 @@ select * from tbl1 join tprt on tbl1.col1 > tprt.col1;
 --------------------------------------------------------------------------
  Nested Loop (actual rows=6 loops=1)
    ->  Seq Scan on tbl1 (actual rows=2 loops=1)
-   ->  Append (actual rows=3 loops=2)
-         ->  Index Scan using tprt1_idx on tprt_1 (actual rows=2 loops=2)
+   ->  Append (actual rows=6 loops=2)
+         ->  Index Scan using tprt1_idx on tprt_1 (actual rows=4 loops=2)
                Index Cond: (tbl1.col1 > col1)
          ->  Index Scan using tprt2_idx on tprt_2 (actual rows=2 loops=1)
                Index Cond: (tbl1.col1 > col1)
@@ -2231,10 +2231,10 @@ select * from tbl1 join tprt on tbl1.col1 = tprt.col1;
 --------------------------------------------------------------------------
  Nested Loop (actual rows=2 loops=1)
    ->  Seq Scan on tbl1 (actual rows=2 loops=1)
-   ->  Append (actual rows=1 loops=2)
+   ->  Append (actual rows=2 loops=2)
          ->  Index Scan using tprt1_idx on tprt_1 (never executed)
                Index Cond: (col1 = tbl1.col1)
-         ->  Index Scan using tprt2_idx on tprt_2 (actual rows=1 loops=2)
+         ->  Index Scan using tprt2_idx on tprt_2 (actual rows=2 loops=2)
                Index Cond: (col1 = tbl1.col1)
          ->  Index Scan using tprt3_idx on tprt_3 (never executed)
                Index Cond: (col1 = tbl1.col1)
@@ -2272,16 +2272,16 @@ order by tbl1.col1, tprt.col1;
 insert into tbl1 values (1001), (1010), (1011);
 explain (analyze, costs off, summary off, timing off)
 select * from tbl1 inner join tprt on tbl1.col1 > tprt.col1;
-                                QUERY PLAN                                
---------------------------------------------------------------------------
+                                QUERY PLAN                                 
+---------------------------------------------------------------------------
  Nested Loop (actual rows=23 loops=1)
    ->  Seq Scan on tbl1 (actual rows=5 loops=1)
-   ->  Append (actual rows=5 loops=5)
-         ->  Index Scan using tprt1_idx on tprt_1 (actual rows=2 loops=5)
+   ->  Append (actual rows=23 loops=5)
+         ->  Index Scan using tprt1_idx on tprt_1 (actual rows=10 loops=5)
                Index Cond: (tbl1.col1 > col1)
-         ->  Index Scan using tprt2_idx on tprt_2 (actual rows=3 loops=4)
+         ->  Index Scan using tprt2_idx on tprt_2 (actual rows=11 loops=4)
                Index Cond: (tbl1.col1 > col1)
-         ->  Index Scan using tprt3_idx on tprt_3 (actual rows=1 loops=2)
+         ->  Index Scan using tprt3_idx on tprt_3 (actual rows=2 loops=2)
                Index Cond: (tbl1.col1 > col1)
          ->  Index Scan using tprt4_idx on tprt_4 (never executed)
                Index Cond: (tbl1.col1 > col1)
@@ -2297,12 +2297,12 @@ select * from tbl1 inner join tprt on tbl1.col1 = tprt.col1;
 --------------------------------------------------------------------------
  Nested Loop (actual rows=3 loops=1)
    ->  Seq Scan on tbl1 (actual rows=5 loops=1)
-   ->  Append (actual rows=1 loops=5)
+   ->  Append (actual rows=3 loops=5)
          ->  Index Scan using tprt1_idx on tprt_1 (never executed)
                Index Cond: (col1 = tbl1.col1)
-         ->  Index Scan using tprt2_idx on tprt_2 (actual rows=1 loops=2)
+         ->  Index Scan using tprt2_idx on tprt_2 (actual rows=2 loops=2)
                Index Cond: (col1 = tbl1.col1)
-         ->  Index Scan using tprt3_idx on tprt_3 (actual rows=0 loops=3)
+         ->  Index Scan using tprt3_idx on tprt_3 (actual rows=1 loops=3)
                Index Cond: (col1 = tbl1.col1)
          ->  Index Scan using tprt4_idx on tprt_4 (never executed)
                Index Cond: (col1 = tbl1.col1)
diff --git a/src/test/regress/expected/select_parallel.out b/src/test/regress/expected/select_parallel.out
index a07cd50fcb..c7d80927da 100644
--- a/src/test/regress/expected/select_parallel.out
+++ b/src/test/regress/expected/select_parallel.out
@@ -482,19 +482,19 @@ 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                                
---------------------------------------------------------------------------
+                                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)
+         ->  Gather (actual rows=98000 loops=10)
                Workers Planned: 4
                Workers Launched: 4
-               ->  Parallel Seq Scan on tenk1 (actual rows=1960 loops=50)
+               ->  Parallel Seq Scan on tenk1 (actual rows=98000 loops=50)
                      Filter: (hundred > 1)
-                     Rows Removed by Filter: 40
+                     Rows Removed by Filter: 2000
 (11 rows)
 
 alter table tenk2 reset (parallel_workers);
@@ -516,21 +516,21 @@ begin
 end;
 $$;
 select * from explain_parallel_sort_stats();
-                       explain_parallel_sort_stats                        
---------------------------------------------------------------------------
+                        explain_parallel_sort_stats                        
+---------------------------------------------------------------------------
  Nested Loop Left Join (actual rows=30000 loops=1)
    ->  Values Scan on "*VALUES*" (actual rows=3 loops=1)
-   ->  Gather Merge (actual rows=10000 loops=3)
+   ->  Gather Merge (actual rows=30000 loops=3)
          Workers Planned: 4
          Workers Launched: 4
-         ->  Sort (actual rows=2000 loops=15)
+         ->  Sort (actual rows=30000 loops=15)
                Sort Key: tenk1.ten
                Sort Method: quicksort  Memory: xxx
                Worker 0:  Sort Method: quicksort  Memory: xxx
                Worker 1:  Sort Method: quicksort  Memory: xxx
                Worker 2:  Sort Method: quicksort  Memory: xxx
                Worker 3:  Sort Method: quicksort  Memory: xxx
-               ->  Parallel Seq Scan on tenk1 (actual rows=2000 loops=15)
+               ->  Parallel Seq Scan on tenk1 (actual rows=30000 loops=15)
                      Filter: (ten < 100)
 (14 rows)
 
@@ -874,12 +874,12 @@ reset role;
 SAVEPOINT settings;
 SET LOCAL force_parallel_mode = 1;
 EXPLAIN (analyze, timing off, summary off, costs off) SELECT * FROM tenk1;
-                         QUERY PLAN                          
--------------------------------------------------------------
+                          QUERY PLAN                          
+--------------------------------------------------------------
  Gather (actual rows=10000 loops=1)
    Workers Planned: 4
    Workers Launched: 4
-   ->  Parallel Seq Scan on tenk1 (actual rows=2000 loops=5)
+   ->  Parallel Seq Scan on tenk1 (actual rows=10000 loops=5)
 (4 rows)
 
 ROLLBACK TO SAVEPOINT settings;
