diff -ur ../cvs-pgsql/src/backend/commands/prepare.c ./src/backend/commands/prepare.c
--- ../cvs-pgsql/src/backend/commands/prepare.c	2006-01-14 17:09:45.000000000 +0100
+++ ./src/backend/commands/prepare.c	2006-03-31 22:41:45.000000000 +0200
@@ -357,6 +357,9 @@
 	entry->context = entrycxt;
 
 	MemoryContextSwitchTo(oldcxt);
+
+	elog(DEBUG1, "StorePreparedStatement(%s, %s, ...)", stmt_name, query_string);
+	elog(DEBUG1, "prepared statement hash table size = %ld", prepared_queries->hctl->nentries);
 }
 
 /*
@@ -500,6 +503,9 @@
 		/* Now we can remove the hash table entry */
 		hash_search(prepared_queries, entry->stmt_name, HASH_REMOVE, NULL);
 	}
+
+	elog(DEBUG1, "DropPreparedStatement(%s)", stmt_name);
+	elog(DEBUG1, "prepared statement hash table size = %ld", prepared_queries->hctl->nentries);
 }
 
 /*
diff -ur ../cvs-pgsql/src/backend/tcop/postgres.c ./src/backend/tcop/postgres.c
--- ../cvs-pgsql/src/backend/tcop/postgres.c	2006-01-14 17:09:48.000000000 +0100
+++ ./src/backend/tcop/postgres.c	2006-03-31 23:18:35.000000000 +0200
@@ -1162,6 +1162,8 @@
 								  ALLOCSET_DEFAULT_INITSIZE,
 								  ALLOCSET_DEFAULT_MAXSIZE);
 		oldcontext = MemoryContextSwitchTo(unnamed_stmt_context);
+
+		elog(DEBUG1, "unnamed prepared statement setup");
 	}
 
 	QueryContext = CurrentMemoryContext;
diff -ur ../cvs-pgsql/src/backend/utils/mmgr/mcxt.c ./src/backend/utils/mmgr/mcxt.c
--- ../cvs-pgsql/src/backend/utils/mmgr/mcxt.c	2005-01-04 20:40:57.000000000 +0100
+++ ./src/backend/utils/mmgr/mcxt.c	2006-04-01 13:11:16.000000000 +0200
@@ -23,6 +23,28 @@
 
 #include "nodes/memnodes.h"
 #include "utils/memutils.h"
+#include "utils/guc.h"
+
+#include <execinfo.h>
+
+
+/* Obtain a backtrace and print it to stderr. */
+static void
+print_trace(void)
+{
+	void *array[10];
+	size_t size;
+	char **strings;
+	size_t i;
+
+	size = backtrace(array, 10);
+	strings = backtrace_symbols(array, size);
+
+	for (i = 0; i < size; i++)
+		fprintf (stderr, "BT(%d): %s\n", i, strings[i]);
+
+	free (strings);
+}
 
 
 /*****************************************************************************
@@ -502,6 +524,13 @@
 		elog(ERROR, "invalid memory alloc request size %lu",
 			 (unsigned long) size);
 
+	if (log_min_messages <= DEBUG2)
+	{
+		fprintf(stderr, "MemoryContextAlloc(%s, %u)\n", context->name, size);
+		print_trace();
+		MemoryContextStats(TopMemoryContext);	
+	}
+
 	return (*context->methods->alloc) (context, size);
 }
 
