From c8cd76de2800cb35bb870e3975c16083648779bf Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 8 Mar 2006 16:59:03 +0000
Subject: [PATCH] Tweak trace_sort code to show the merge order (number of
 active input tapes) for each merge step.  This will give us some idea of how
 effective the merge distribution algorithm is.

---
 src/backend/utils/sort/tuplesort.c | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c
index af0109fda65..80a027d4a7a 100644
--- a/src/backend/utils/sort/tuplesort.c
+++ b/src/backend/utils/sort/tuplesort.c
@@ -91,7 +91,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/sort/tuplesort.c,v 1.63 2006/03/07 19:06:50 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/sort/tuplesort.c,v 1.64 2006/03/08 16:59:03 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -296,6 +296,7 @@ struct Tuplesortstate
 	int		   *tp_runs;		/* # of real runs on each tape */
 	int		   *tp_dummy;		/* # of dummy runs for each tape (D[]) */
 	int		   *tp_tapenum;		/* Actual tape numbers (TAPE[]) */
+	int			activeTapes;	/* # of active input tapes in merge pass */
 
 	/*
 	 * These variables are used after completion of sorting to keep track of
@@ -943,9 +944,15 @@ tuplesort_performsort(Tuplesortstate *state)
 
 #ifdef TRACE_SORT
 	if (trace_sort)
-		elog(LOG, "performsort done%s: %s",
-			 (state->status == TSS_FINALMERGE) ? " (except final merge)" : "",
-			 pg_rusage_show(&state->ru_start));
+	{
+		if (state->status == TSS_FINALMERGE)
+			elog(LOG, "performsort done (except %d-way final merge): %s",
+				 state->activeTapes,
+				 pg_rusage_show(&state->ru_start));
+		else
+			elog(LOG, "performsort done: %s",
+				 pg_rusage_show(&state->ru_start));
+	}
 #endif
 
 	MemoryContextSwitchTo(oldcontext);
@@ -1566,7 +1573,7 @@ mergeonerun(Tuplesortstate *state)
 
 #ifdef TRACE_SORT
 	if (trace_sort)
-		elog(LOG, "finished merge step: %s",
+		elog(LOG, "finished %d-way merge step: %s", state->activeTapes,
 			 pg_rusage_show(&state->ru_start));
 #endif
 }
@@ -1614,6 +1621,7 @@ beginmerge(Tuplesortstate *state)
 			activeTapes++;
 		}
 	}
+	state->activeTapes = activeTapes;
 
 	/*
 	 * Initialize space allocation to let each active input tape have an equal
-- 
GitLab