]> granicus.if.org Git - postgresql/commitdiff
Improve trace_sort code to also show the total memory or disk space used.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 18 Oct 2005 22:59:37 +0000 (22:59 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 18 Oct 2005 22:59:37 +0000 (22:59 +0000)
Per request from Marc.

src/backend/utils/sort/logtape.c
src/backend/utils/sort/tuplesort.c
src/include/utils/logtape.h

index b8c760f48230cecb838fcf708348dd4f1742bd07..fe1bab4932f6741e227845994bf92b0cdbc5df42 100644 (file)
@@ -64,7 +64,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/sort/logtape.c,v 1.16 2005/10/15 02:49:37 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/sort/logtape.c,v 1.17 2005/10/18 22:59:37 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -925,3 +925,12 @@ LogicalTapeTell(LogicalTapeSet *lts, int tapenum,
        *blocknum = lt->curBlockNumber;
        *offset = lt->pos;
 }
+
+/*
+ * Obtain total disk space currently used by a LogicalTapeSet, in blocks.
+ */
+long
+LogicalTapeSetBlocks(LogicalTapeSet *lts)
+{
+       return lts->nFileBlocks;
+}
index 2007d7a69491cd4d18e0ccdb4b2cb46d2e997097..1a5f30099c2f13fd7e1eaa5d8dc3d69a130e5ba2 100644 (file)
@@ -78,7 +78,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/sort/tuplesort.c,v 1.52 2005/10/15 02:49:37 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/sort/tuplesort.c,v 1.53 2005/10/18 22:59:37 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -134,6 +134,7 @@ struct Tuplesortstate
        TupSortStatus status;           /* enumerated value as shown above */
        bool            randomAccess;   /* did caller request random access? */
        long            availMem;               /* remaining memory available, in bytes */
+       long            allowedMem;             /* total memory allowed, in bytes */
        LogicalTapeSet *tapeset;        /* logtape.c object for tapes in a temp file */
 
        /*
@@ -433,7 +434,8 @@ tuplesort_begin_common(int workMem, bool randomAccess)
 
        state->status = TSS_INITIAL;
        state->randomAccess = randomAccess;
-       state->availMem = workMem * 1024L;
+       state->allowedMem = workMem * 1024L;
+       state->availMem = state->allowedMem;
        state->tapeset = NULL;
 
        state->memtupcount = 0;
@@ -582,9 +584,24 @@ void
 tuplesort_end(Tuplesortstate *state)
 {
        int                     i;
+#ifdef TRACE_SORT
+       long            spaceUsed;
+#endif
 
        if (state->tapeset)
+       {
+#ifdef TRACE_SORT
+               spaceUsed = LogicalTapeSetBlocks(state->tapeset);
+#endif
                LogicalTapeSetClose(state->tapeset);
+       }
+       else
+       {
+#ifdef TRACE_SORT
+               spaceUsed = (state->allowedMem - state->availMem + 1023) / 1024;
+#endif
+       }
+
        if (state->memtuples)
        {
                for (i = 0; i < state->memtupcount; i++)
@@ -604,8 +621,14 @@ tuplesort_end(Tuplesortstate *state)
 
 #ifdef TRACE_SORT
        if (trace_sort)
-               elog(NOTICE, "sort ended: %s",
-                        pg_rusage_show(&state->ru_start));
+       {
+               if (state->tapeset)
+                       elog(NOTICE, "external sort ended, %ld disk blocks used: %s",
+                                spaceUsed, pg_rusage_show(&state->ru_start));
+               else
+                       elog(NOTICE, "internal sort ended, %ld KB used: %s",
+                                spaceUsed, pg_rusage_show(&state->ru_start));
+       }
 #endif
 
        pfree(state);
index ffe6d6845aa7d2121323297c6e97fe52daf244a2..4e20ba92a2b275a0a50fecdcab6140907a74020c 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/logtape.h,v 1.12 2004/12/31 22:03:46 pgsql Exp $
+ * $PostgreSQL: pgsql/src/include/utils/logtape.h,v 1.13 2005/10/18 22:59:37 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -38,5 +38,6 @@ extern bool LogicalTapeSeek(LogicalTapeSet *lts, int tapenum,
                                long blocknum, int offset);
 extern void LogicalTapeTell(LogicalTapeSet *lts, int tapenum,
                                long *blocknum, int *offset);
+extern long LogicalTapeSetBlocks(LogicalTapeSet *lts);
 
 #endif   /* LOGTAPE_H */