OSDN Git Service

Tweak trace_sort code to show the merge order (number of active input
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 8 Mar 2006 16:59:03 +0000 (16:59 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 8 Mar 2006 16:59:03 +0000 (16:59 +0000)
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

index af0109f..80a027d 100644 (file)
@@ -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