Here's what I have.  Please confirm that this compiles for you.

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
Index: src/backend/access/transam/clog.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/access/transam/clog.c,v
retrieving revision 1.46
diff -c -p -r1.46 clog.c
*** src/backend/access/transam/clog.c	1 Jan 2008 19:45:46 -0000	1.46
--- src/backend/access/transam/clog.c	31 Jul 2008 22:01:49 -0000
***************
*** 35,40 ****
--- 35,41 ----
  #include "access/clog.h"
  #include "access/slru.h"
  #include "access/transam.h"
+ #include "pg_trace.h"
  #include "postmaster/bgwriter.h"
  
  /*
*************** void
*** 313,319 ****
--- 314,322 ----
  ShutdownCLOG(void)
  {
  	/* Flush dirty CLOG pages to disk */
+ 	TRACE_POSTGRESQL_CLOG_CHECKPOINT_START(false);
  	SimpleLruFlush(ClogCtl, false);
+ 	TRACE_POSTGRESQL_CLOG_CHECKPOINT_DONE(false);
  }
  
  /*
*************** void
*** 323,329 ****
--- 326,334 ----
  CheckPointCLOG(void)
  {
  	/* Flush dirty CLOG pages to disk */
+ 	TRACE_POSTGRESQL_CLOG_CHECKPOINT_START(true);
  	SimpleLruFlush(ClogCtl, true);
+ 	TRACE_POSTGRESQL_CLOG_CHECKPOINT_DONE(true);
  }
  
  
Index: src/backend/access/transam/multixact.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/access/transam/multixact.c,v
retrieving revision 1.27
diff -c -p -r1.27 multixact.c
*** src/backend/access/transam/multixact.c	1 Jan 2008 19:45:46 -0000	1.27
--- src/backend/access/transam/multixact.c	31 Jul 2008 22:02:22 -0000
***************
*** 53,62 ****
  #include "access/transam.h"
  #include "access/xact.h"
  #include "miscadmin.h"
  #include "storage/backendid.h"
  #include "storage/lmgr.h"
- #include "utils/memutils.h"
  #include "storage/procarray.h"
  
  
  /*
--- 53,63 ----
  #include "access/transam.h"
  #include "access/xact.h"
  #include "miscadmin.h"
+ #include "pg_trace.h"
  #include "storage/backendid.h"
  #include "storage/lmgr.h"
  #include "storage/procarray.h"
+ #include "utils/memutils.h"
  
  
  /*
*************** void
*** 1497,1504 ****
--- 1498,1507 ----
  ShutdownMultiXact(void)
  {
  	/* Flush dirty MultiXact pages to disk */
+ 	TRACE_POSTGRESQL_MULTIXACT_CHECKPOINT_START(false);
  	SimpleLruFlush(MultiXactOffsetCtl, false);
  	SimpleLruFlush(MultiXactMemberCtl, false);
+ 	TRACE_POSTGRESQL_MULTIXACT_CHECKPOINT_DONE(false);
  }
  
  /*
*************** MultiXactGetCheckptMulti(bool is_shutdow
*** 1526,1531 ****
--- 1529,1536 ----
  void
  CheckPointMultiXact(void)
  {
+ 	TRACE_POSTGRESQL_MULTIXACT_CHECKPOINT_START(true);
+ 
  	/* Flush dirty MultiXact pages to disk */
  	SimpleLruFlush(MultiXactOffsetCtl, true);
  	SimpleLruFlush(MultiXactMemberCtl, true);
*************** CheckPointMultiXact(void)
*** 1540,1545 ****
--- 1545,1552 ----
  	 */
  	if (!InRecovery)
  		TruncateMultiXact();
+ 
+ 	TRACE_POSTGRESQL_MULTIXACT_CHECKPOINT_DONE(true);
  }
  
  /*
Index: src/backend/access/transam/subtrans.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/access/transam/subtrans.c,v
retrieving revision 1.22
diff -c -p -r1.22 subtrans.c
*** src/backend/access/transam/subtrans.c	26 Mar 2008 18:48:59 -0000	1.22
--- src/backend/access/transam/subtrans.c	31 Jul 2008 22:02:34 -0000
***************
*** 31,36 ****
--- 31,37 ----
  #include "access/slru.h"
  #include "access/subtrans.h"
  #include "access/transam.h"
+ #include "pg_trace.h"
  #include "utils/snapmgr.h"
  
  
*************** ShutdownSUBTRANS(void)
*** 265,271 ****
--- 266,274 ----
  	 * This is not actually necessary from a correctness point of view. We do
  	 * it merely as a debugging aid.
  	 */
+ 	TRACE_POSTGRESQL_SUBTRANS_CHECKPOINT_START(false);
  	SimpleLruFlush(SubTransCtl, false);
+ 	TRACE_POSTGRESQL_SUBTRANS_CHECKPOINT_DONE(false);
  }
  
  /*
*************** CheckPointSUBTRANS(void)
*** 281,287 ****
--- 284,292 ----
  	 * it merely to improve the odds that writing of dirty pages is done by
  	 * the checkpoint process and not by backends.
  	 */
+ 	TRACE_POSTGRESQL_SUBTRANS_CHECKPOINT_START(true);
  	SimpleLruFlush(SubTransCtl, true);
+ 	TRACE_POSTGRESQL_SUBTRANS_CHECKPOINT_DONE(true);
  }
  
  
Index: src/backend/access/transam/twophase.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/access/transam/twophase.c,v
retrieving revision 1.43
diff -c -p -r1.43 twophase.c
*** src/backend/access/transam/twophase.c	19 May 2008 18:16:26 -0000	1.43
--- src/backend/access/transam/twophase.c	31 Jul 2008 22:02:50 -0000
***************
*** 51,56 ****
--- 51,57 ----
  #include "catalog/pg_type.h"
  #include "funcapi.h"
  #include "miscadmin.h"
+ #include "pg_trace.h"
  #include "pgstat.h"
  #include "storage/fd.h"
  #include "storage/procarray.h"
*************** CheckPointTwoPhase(XLogRecPtr redo_horiz
*** 1387,1392 ****
--- 1388,1396 ----
  	 */
  	if (max_prepared_xacts <= 0)
  		return;					/* nothing to do */
+ 
+ 	TRACE_POSTGRESQL_TWOPHASE_CHECKPOINT_START();
+ 
  	xids = (TransactionId *) palloc(max_prepared_xacts * sizeof(TransactionId));
  	nxids = 0;
  
*************** CheckPointTwoPhase(XLogRecPtr redo_horiz
*** 1444,1449 ****
--- 1448,1455 ----
  	}
  
  	pfree(xids);
+ 
+ 	TRACE_POSTGRESQL_TWOPHASE_CHECKPOINT_DONE();
  }
  
  /*
Index: src/backend/postmaster/pgstat.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/postmaster/pgstat.c,v
retrieving revision 1.176
diff -c -p -r1.176 pgstat.c
*** src/backend/postmaster/pgstat.c	30 Jun 2008 10:58:47 -0000	1.176
--- src/backend/postmaster/pgstat.c	31 Jul 2008 22:03:10 -0000
***************
*** 48,53 ****
--- 48,54 ----
  #include "libpq/pqsignal.h"
  #include "mb/pg_wchar.h"
  #include "miscadmin.h"
+ #include "pg_trace.h"
  #include "postmaster/autovacuum.h"
  #include "postmaster/fork_process.h"
  #include "postmaster/postmaster.h"
*************** pgstat_report_activity(const char *cmd_s
*** 2202,2207 ****
--- 2203,2210 ----
  	TimestampTz start_timestamp;
  	int			len;
  
+ 	TRACE_POSTGRESQL_STATEMENT_STATUS(cmd_str);
+ 
  	if (!pgstat_track_activities || !beentry)
  		return;
  
Index: src/backend/storage/buffer/bufmgr.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/storage/buffer/bufmgr.c,v
retrieving revision 1.234
diff -c -p -r1.234 bufmgr.c
*** src/backend/storage/buffer/bufmgr.c	13 Jul 2008 20:45:47 -0000	1.234
--- src/backend/storage/buffer/bufmgr.c	31 Jul 2008 22:03:52 -0000
***************
*** 34,39 ****
--- 34,41 ----
  #include <unistd.h>
  
  #include "miscadmin.h"
+ #include "pg_trace.h"
+ #include "pgstat.h"
  #include "postmaster/bgwriter.h"
  #include "storage/buf_internals.h"
  #include "storage/bufmgr.h"
***************
*** 42,48 ****
  #include "storage/smgr.h"
  #include "utils/rel.h"
  #include "utils/resowner.h"
- #include "pgstat.h"
  
  
  /* Note: these two macros only work on shared buffers, not local ones! */
--- 44,49 ----
*************** ReadBuffer_common(SMgrRelation smgr, boo
*** 213,224 ****
--- 214,235 ----
  	if (isExtend)
  		blockNum = smgrnblocks(smgr);
  
+ 	TRACE_POSTGRESQL_BUFFER_READ_START(blockNum, smgr->smgr_rnode.spcNode,
+ 		smgr->smgr_rnode.dbNode, smgr->smgr_rnode.relNode, isLocalBuf);
+ 
  	if (isLocalBuf)
  	{
  		ReadLocalBufferCount++;
  		bufHdr = LocalBufferAlloc(smgr, blockNum, &found);
  		if (found)
+ 		{
  			LocalBufferHitCount++;
+ 			TRACE_POSTGRESQL_BUFFER_HIT(true); /* true == local buffer */
+ 		}
+ 		else
+ 		{
+ 			TRACE_POSTGRESQL_BUFFER_MISS(true); /* ditto */
+ 		}
  	}
  	else
  	{
*************** ReadBuffer_common(SMgrRelation smgr, boo
*** 230,236 ****
--- 241,254 ----
  		 */
  		bufHdr = BufferAlloc(smgr, blockNum, strategy, &found);
  		if (found)
+ 		{
  			BufferHitCount++;
+ 			TRACE_POSTGRESQL_BUFFER_HIT(false); /* false != local buffer */
+ 		}
+ 		else
+ 		{
+ 			TRACE_POSTGRESQL_BUFFER_MISS(false); /* ditto */
+ 		}
  	}
  
  	/* At this point we do NOT hold any locks. */
*************** ReadBuffer_common(SMgrRelation smgr, boo
*** 246,251 ****
--- 264,274 ----
  			if (VacuumCostActive)
  				VacuumCostBalance += VacuumCostPageHit;
  
+ 			TRACE_POSTGRESQL_BUFFER_READ_DONE(blockNum,
+ 				smgr->smgr_rnode.spcNode,
+ 				smgr->smgr_rnode.dbNode,
+ 				smgr->smgr_rnode.relNode, isLocalBuf, found);
+ 
  			return BufferDescriptorGetBuffer(bufHdr);
  		}
  
*************** ReadBuffer_common(SMgrRelation smgr, boo
*** 368,373 ****
--- 391,400 ----
  	if (VacuumCostActive)
  		VacuumCostBalance += VacuumCostPageMiss;
  
+ 	TRACE_POSTGRESQL_BUFFER_READ_DONE(blockNum, smgr->smgr_rnode.spcNode,
+ 			smgr->smgr_rnode.dbNode, smgr->smgr_rnode.relNode,
+ 			isLocalBuf, found);
+ 
  	return BufferDescriptorGetBuffer(bufHdr);
  }
  
*************** BufferSync(int flags)
*** 1086,1091 ****
--- 1113,1120 ----
  	if (num_to_write == 0)
  		return;					/* nothing to do */
  
+ 	TRACE_POSTGRESQL_BUFFER_SYNC_START(NBuffers, num_to_write);
+ 
  	/*
  	 * Loop over all buffers again, and write the ones (still) marked with
  	 * BM_CHECKPOINT_NEEDED.  In this loop, we start at the clock sweep point
*************** BufferSync(int flags)
*** 1117,1122 ****
--- 1146,1152 ----
  		{
  			if (SyncOneBuffer(buf_id, false) & BUF_WRITTEN)
  			{
+ 				TRACE_POSTGRESQL_BUFFER_SYNC_WRITTEN(buf_id);
  				BgWriterStats.m_buf_written_checkpoints++;
  				num_written++;
  
*************** BufferSync(int flags)
*** 1147,1152 ****
--- 1177,1184 ----
  			buf_id = 0;
  	}
  
+ 	TRACE_POSTGRESQL_BUFFER_SYNC_DONE(NBuffers, num_written, num_to_write);
+ 
  	/*
  	 * Update checkpoint statistics. As noted above, this doesn't include
  	 * buffers written by other backends or bgwriter scan.
*************** PrintBufferLeakWarning(Buffer buffer)
*** 1653,1663 ****
--- 1685,1697 ----
  void
  CheckPointBuffers(int flags)
  {
+ 	TRACE_POSTGRESQL_BUFFER_CHECKPOINT_START(flags);
  	CheckpointStats.ckpt_write_t = GetCurrentTimestamp();
  	BufferSync(flags);
  	CheckpointStats.ckpt_sync_t = GetCurrentTimestamp();
  	smgrsync();
  	CheckpointStats.ckpt_sync_end_t = GetCurrentTimestamp();
+ 	TRACE_POSTGRESQL_BUFFER_CHECKPOINT_DONE();
  }
  
  
*************** FlushBuffer(volatile BufferDesc *buf, SM
*** 1759,1764 ****
--- 1793,1802 ----
  	if (reln == NULL)
  		reln = smgropen(buf->tag.rnode);
  
+ 	TRACE_POSTGRESQL_BUFFER_FLUSH_START(reln->smgr_rnode.spcNode,
+ 		 reln->smgr_rnode.dbNode,
+ 		 reln->smgr_rnode.relNode);
+ 
  	/*
  	 * Force XLOG flush up to buffer's LSN.  This implements the basic WAL
  	 * rule that log updates must hit disk before any of the data-file changes
*************** FlushBuffer(volatile BufferDesc *buf, SM
*** 1785,1790 ****
--- 1823,1831 ----
  
  	BufferFlushCount++;
  
+ 	TRACE_POSTGRESQL_BUFFER_FLUSH_DONE(reln->smgr_rnode.spcNode,
+ 		 reln->smgr_rnode.dbNode, reln->smgr_rnode.relNode);
+ 
  	/*
  	 * Mark the buffer as clean (unless BM_JUST_DIRTIED has become set) and
  	 * end the io_in_progress state.
Index: src/backend/storage/lmgr/deadlock.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/storage/lmgr/deadlock.c,v
retrieving revision 1.53
diff -c -p -r1.53 deadlock.c
*** src/backend/storage/lmgr/deadlock.c	24 Mar 2008 18:22:36 -0000	1.53
--- src/backend/storage/lmgr/deadlock.c	31 Jul 2008 22:04:03 -0000
***************
*** 26,31 ****
--- 26,32 ----
  #include "postgres.h"
  
  #include "miscadmin.h"
+ #include "pg_trace.h"
  #include "pgstat.h"
  #include "storage/lmgr.h"
  #include "storage/proc.h"
*************** DeadLockCheck(PGPROC *proc)
*** 222,227 ****
--- 223,230 ----
  		 */
  		int			nSoftEdges;
  
+ 		TRACE_POSTGRESQL_DEADLOCK_FOUND();
+ 
  		nWaitOrders = 0;
  		if (!FindLockCycle(proc, possibleConstraints, &nSoftEdges))
  			elog(FATAL, "deadlock seems to have disappeared");
Index: src/backend/storage/lmgr/lock.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/storage/lmgr/lock.c,v
retrieving revision 1.183
diff -c -p -r1.183 lock.c
*** src/backend/storage/lmgr/lock.c	17 Mar 2008 19:44:41 -0000	1.183
--- src/backend/storage/lmgr/lock.c	31 Jul 2008 22:04:13 -0000
***************
*** 36,46 ****
  #include "access/twophase.h"
  #include "access/twophase_rmgr.h"
  #include "miscadmin.h"
  #include "pgstat.h"
  #include "utils/memutils.h"
  #include "utils/ps_status.h"
  #include "utils/resowner.h"
- #include "pg_trace.h"
  
  
  /* This configuration variable is used to set the lock table size */
--- 36,46 ----
  #include "access/twophase.h"
  #include "access/twophase_rmgr.h"
  #include "miscadmin.h"
+ #include "pg_trace.h"
  #include "pgstat.h"
  #include "utils/memutils.h"
  #include "utils/ps_status.h"
  #include "utils/resowner.h"
  
  
  /* This configuration variable is used to set the lock table size */
*************** LockAcquire(const LOCKTAG *locktag,
*** 787,797 ****
  		 * Sleep till someone wakes me up.
  		 */
  
! 		TRACE_POSTGRESQL_LOCK_STARTWAIT(locktag->locktag_field2, lockmode);
  
  		WaitOnLock(locallock, owner);
  
! 		TRACE_POSTGRESQL_LOCK_ENDWAIT(locktag->locktag_field2, lockmode);
  
  		/*
  		 * NOTE: do not do any material change of state between here and
--- 787,797 ----
  		 * Sleep till someone wakes me up.
  		 */
  
! 		TRACE_POSTGRESQL_LOCK_WAIT_START(locktag->locktag_field2, lockmode);
  
  		WaitOnLock(locallock, owner);
  
! 		TRACE_POSTGRESQL_LOCK_WAIT_DONE(locktag->locktag_field2, lockmode);
  
  		/*
  		 * NOTE: do not do any material change of state between here and
Index: src/backend/storage/lmgr/lwlock.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/storage/lmgr/lwlock.c,v
retrieving revision 1.51
diff -c -p -r1.51 lwlock.c
*** src/backend/storage/lmgr/lwlock.c	17 Mar 2008 19:44:41 -0000	1.51
--- src/backend/storage/lmgr/lwlock.c	31 Jul 2008 22:04:39 -0000
***************
*** 25,34 ****
  #include "access/multixact.h"
  #include "access/subtrans.h"
  #include "miscadmin.h"
  #include "storage/ipc.h"
  #include "storage/proc.h"
  #include "storage/spin.h"
- #include "pg_trace.h"
  
  
  /* We use the ShmemLock spinlock to protect LWLockAssign */
--- 25,34 ----
  #include "access/multixact.h"
  #include "access/subtrans.h"
  #include "miscadmin.h"
+ #include "pg_trace.h"
  #include "storage/ipc.h"
  #include "storage/proc.h"
  #include "storage/spin.h"
  
  
  /* We use the ShmemLock spinlock to protect LWLockAssign */
*************** LWLockAcquire(LWLockId lockid, LWLockMod
*** 448,454 ****
  		block_counts[lockid]++;
  #endif
  
! 		TRACE_POSTGRESQL_LWLOCK_STARTWAIT(lockid, mode);
  
  		for (;;)
  		{
--- 448,454 ----
  		block_counts[lockid]++;
  #endif
  
! 		TRACE_POSTGRESQL_LWLOCK_WAIT_START(lockid, mode);
  
  		for (;;)
  		{
*************** LWLockAcquire(LWLockId lockid, LWLockMod
*** 459,465 ****
  			extraWaits++;
  		}
  
! 		TRACE_POSTGRESQL_LWLOCK_ENDWAIT(lockid, mode);
  
  		LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");
  
--- 459,465 ----
  			extraWaits++;
  		}
  
! 		TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(lockid, mode);
  
  		LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");
  
Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.554
diff -c -p -r1.554 postgres.c
*** src/backend/tcop/postgres.c	18 Jul 2008 20:26:06 -0000	1.554
--- src/backend/tcop/postgres.c	31 Jul 2008 22:05:14 -0000
***************
*** 50,55 ****
--- 50,57 ----
  #include "miscadmin.h"
  #include "nodes/print.h"
  #include "optimizer/planner.h"
+ #include "pgstat.h"
+ #include "pg_trace.h"
  #include "parser/analyze.h"
  #include "parser/parser.h"
  #include "postmaster/autovacuum.h"
***************
*** 70,76 ****
  #include "utils/snapmgr.h"
  #include "mb/pg_wchar.h"
  
- #include "pgstat.h"
  
  extern int	optind;
  extern char *optarg;
--- 72,77 ----
*************** pg_parse_query(const char *query_string)
*** 551,556 ****
--- 552,559 ----
  {
  	List	   *raw_parsetree_list;
  
+ 	TRACE_POSTGRESQL_QUERY_PARSE_START(query_string);
+ 
  	if (log_parser_stats)
  		ResetUsage();
  
*************** pg_parse_query(const char *query_string)
*** 572,577 ****
--- 575,582 ----
  	}
  #endif
  
+ 	TRACE_POSTGRESQL_QUERY_PARSE_DONE(query_string);
+ 
  	return raw_parsetree_list;
  }
  
*************** pg_analyze_and_rewrite(Node *parsetree, 
*** 591,596 ****
--- 596,603 ----
  	Query	   *query;
  	List	   *querytree_list;
  
+ 	TRACE_POSTGRESQL_QUERY_REWRITE_START(query_string);
+ 
  	/*
  	 * (1) Perform parse analysis.
  	 */
*************** pg_analyze_and_rewrite(Node *parsetree, 
*** 607,612 ****
--- 614,621 ----
  	 */
  	querytree_list = pg_rewrite_query(query);
  
+ 	TRACE_POSTGRESQL_QUERY_REWRITE_DONE(query_string);
+ 
  	return querytree_list;
  }
  
*************** pg_plan_query(Query *querytree, int curs
*** 677,682 ****
--- 686,693 ----
  	if (querytree->commandType == CMD_UTILITY)
  		return NULL;
  
+ 	TRACE_POSTGRESQL_QUERY_PLAN_START();
+ 
  	if (log_planner_stats)
  		ResetUsage();
  
*************** pg_plan_query(Query *querytree, int curs
*** 711,716 ****
--- 722,729 ----
  	if (Debug_print_plan)
  		elog_node_display(DEBUG1, "plan", plan, Debug_pretty_print);
  
+ 	TRACE_POSTGRESQL_QUERY_PLAN_DONE();
+ 
  	return plan;
  }
  
*************** exec_simple_query(const char *query_stri
*** 785,790 ****
--- 798,804 ----
  	bool		isTopLevel;
  	char		msec_str[32];
  
+ 
  	/*
  	 * Report query to various monitoring facilities.
  	 */
*************** exec_simple_query(const char *query_stri
*** 792,797 ****
--- 806,813 ----
  
  	pgstat_report_activity(query_string);
  
+ 	TRACE_POSTGRESQL_QUERY_START(query_string);
+ 
  	/*
  	 * We use save_log_statement_stats so ShowUsage doesn't report incorrect
  	 * results because ResetUsage wasn't called.
*************** exec_simple_query(const char *query_stri
*** 1058,1063 ****
--- 1074,1081 ----
  	if (save_log_statement_stats)
  		ShowUsage("QUERY STATISTICS");
  
+ 	TRACE_POSTGRESQL_QUERY_DONE(query_string);
+ 
  	debug_query_string = NULL;
  }
  
Index: src/backend/tcop/pquery.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/tcop/pquery.c,v
retrieving revision 1.123
diff -c -p -r1.123 pquery.c
*** src/backend/tcop/pquery.c	12 May 2008 20:02:02 -0000	1.123
--- src/backend/tcop/pquery.c	31 Jul 2008 22:05:25 -0000
***************
*** 19,24 ****
--- 19,25 ----
  #include "commands/prepare.h"
  #include "commands/trigger.h"
  #include "miscadmin.h"
+ #include "pg_trace.h"
  #include "tcop/pquery.h"
  #include "tcop/tcopprot.h"
  #include "tcop/utility.h"
*************** PortalRun(Portal portal, long count, boo
*** 711,716 ****
--- 712,719 ----
  
  	AssertArg(PortalIsValid(portal));
  
+ 	TRACE_POSTGRESQL_QUERY_EXECUTE_START();
+ 
  	/* Initialize completion tag to empty string */
  	if (completionTag)
  		completionTag[0] = '\0';
*************** PortalRun(Portal portal, long count, boo
*** 857,862 ****
--- 860,867 ----
  
  	if (log_executor_stats && portal->strategy != PORTAL_MULTI_QUERY)
  		ShowUsage("EXECUTOR STATISTICS");
+ 	
+ 	TRACE_POSTGRESQL_QUERY_EXECUTE_DONE();
  
  	return result;
  }
*************** PortalRunMulti(Portal portal, bool isTop
*** 1237,1242 ****
--- 1242,1249 ----
  			 */
  			PlannedStmt *pstmt = (PlannedStmt *) stmt;
  
+ 			TRACE_POSTGRESQL_QUERY_EXECUTE_START();
+ 
  			if (log_executor_stats)
  				ResetUsage();
  
*************** PortalRunMulti(Portal portal, bool isTop
*** 1257,1262 ****
--- 1264,1271 ----
  
  			if (log_executor_stats)
  				ShowUsage("EXECUTOR STATISTICS");
+ 
+ 			TRACE_POSTGRESQL_QUERY_EXECUTE_DONE();
  		}
  		else
  		{
Index: src/backend/utils/Gen_dummy_probes.sed
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/utils/Gen_dummy_probes.sed,v
retrieving revision 1.1
diff -c -p -r1.1 Gen_dummy_probes.sed
*** src/backend/utils/Gen_dummy_probes.sed	17 Mar 2008 19:44:41 -0000	1.1
--- src/backend/utils/Gen_dummy_probes.sed	31 Jul 2008 20:50:35 -0000
***************
*** 6,16 ****
  # $PostgreSQL: pgsql/src/backend/utils/Gen_dummy_probes.sed,v 1.1 2008-03-17 19:44:41 petere Exp $
  #-------------------------------------------------------------------------
  
! /^probe /!d
! s/^probe \([^(]*\)\(.*\);/\1\2/
  s/__/_/g
  y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
  s/^/#define TRACE_POSTGRESQL_/
! s/(INT, INT)/(INT1, INT2)/
  P
  s/(.*$/_ENABLED() (0)/
--- 6,21 ----
  # $PostgreSQL: pgsql/src/backend/utils/Gen_dummy_probes.sed,v 1.1 2008-03-17 19:44:41 petere Exp $
  #-------------------------------------------------------------------------
  
! /^[ 	]*probe /!d
! s/^[ 	]*probe \([^(]*\)\(.*\);/\1\2/
  s/__/_/g
  y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
  s/^/#define TRACE_POSTGRESQL_/
! s/([^,)]\+)/(INT1)/
! s/([^,)]\+, [^,)]\+)/(INT1, INT2)/
! s/([^,)]\+, [^,)]\+, [^,)]\+)/(INT1, INT2, INT3)/
! s/([^,)]\+, [^,)]\+, [^,)]\+, [^,)]\+)/(INT1, INT2, INT3, INT4)/
! s/([^,)]\+, [^,)]\+, [^,)]\+, [^,)]\+, [^,)]\+)/(INT1, INT2, INT3, INT4, INT5)/
! s/([^,)]\+, [^,)]\+, [^,)]\+, [^,)]\+, [^,)]\+, [^,)]\+)/(INT1, INT2, INT3, INT4, INT5, INT6)/
  P
  s/(.*$/_ENABLED() (0)/
Index: src/backend/utils/Makefile
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/utils/Makefile,v
retrieving revision 1.27
diff -c -p -r1.27 Makefile
*** src/backend/utils/Makefile	17 Mar 2008 19:44:41 -0000	1.27
--- src/backend/utils/Makefile	31 Jul 2008 20:50:35 -0000
*************** $(SUBDIRS:%=%-recursive): fmgroids.h
*** 20,28 ****
  fmgroids.h fmgrtab.c: Gen_fmgrtab.sh $(top_srcdir)/src/include/catalog/pg_proc.h
  	AWK='$(AWK)' $(SHELL) $< $(top_srcdir)/src/include/catalog/pg_proc.h
  
  probes.h: probes.d
  ifeq ($(enable_dtrace), yes)
! 	$(DTRACE) -h -s $< -o [EMAIL PROTECTED]
  	sed -e 's/POSTGRESQL_/TRACE_POSTGRESQL_/g' [EMAIL PROTECTED] >$@
  	rm [EMAIL PROTECTED]
  else
--- 20,32 ----
  fmgroids.h fmgrtab.c: Gen_fmgrtab.sh $(top_srcdir)/src/include/catalog/pg_proc.h
  	AWK='$(AWK)' $(SHELL) $< $(top_srcdir)/src/include/catalog/pg_proc.h
  
+ ifneq ($(enable_dtrace), yes)
+ probes.h: Gen_dummy_probes.sed
+ endif
+ 
  probes.h: probes.d
  ifeq ($(enable_dtrace), yes)
! 	$(DTRACE) -C -h -s $< -o [EMAIL PROTECTED]
  	sed -e 's/POSTGRESQL_/TRACE_POSTGRESQL_/g' [EMAIL PROTECTED] >$@
  	rm [EMAIL PROTECTED]
  else
Index: src/backend/utils/probes.d
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/utils/probes.d,v
retrieving revision 1.2
diff -c -p -r1.2 probes.d
*** src/backend/utils/probes.d	2 Jan 2008 02:42:06 -0000	1.2
--- src/backend/utils/probes.d	31 Jul 2008 22:16:26 -0000
***************
*** 7,24 ****
   * ----------
   */
  
  provider postgresql {
  
! probe transaction__start(int);
! probe transaction__commit(int);
! probe transaction__abort(int);
! probe lwlock__acquire(int, int);
! probe lwlock__release(int);
! probe lwlock__startwait(int, int);
! probe lwlock__endwait(int, int);
! probe lwlock__condacquire(int, int);
! probe lwlock__condacquire__fail(int, int);
! probe lock__startwait(int, int);
! probe lock__endwait(int, int);
  
  };
--- 7,91 ----
   * ----------
   */
  
+ 
+ /* typedefs used in PostgreSQL */
+ typedef unsigned int LocalTransactionId;
+ typedef int LWLockId;
+ typedef int LWLockMode;
+ typedef int LOCKMODE;
+ typedef unsigned int BlockNumber;
+ typedef unsigned int Oid;
+ 
+ #define bool char
+ 
  provider postgresql {
  
! 	/* 
! 	 * Due to a bug in Mac OS X 10.5, using built-in typedefs (e.g. uintptr_t,
! 	 * uint32_t, etc.) cause compilation errors.  
! 	 */
! 	  
! 	probe transaction__start(LocalTransactionId);
! 	probe transaction__commit(LocalTransactionId);
! 	probe transaction__abort(LocalTransactionId);
! 
! 	probe lwlock__acquire(LWLockId, LWLockMode);
! 	probe lwlock__release(LWLockId);
! 	probe lwlock__wait__start(LWLockId, LWLockMode);
! 	probe lwlock__wait__done(LWLockId, LWLockMode);
! 	probe lwlock__condacquire(LWLockId, LWLockMode);
! 	probe lwlock__condacquire__fail(LWLockId, LWLockMode);
! 
! 	/* The following probe declarations cause compilation errors
!          * on Mac OS X but not on Solaris. Need further investigation.
! 	 * probe lock__wait__start(unsigned int locktag_field2, LOCKMODE);
! 	 * probe lock__wait__done(unsigned int locktag_field2, LOCKMODE);
! 	 */
! 	probe lock__wait__start(unsigned int, int);
! 	probe lock__wait__done(unsigned int, int);
! 
! 	probe query__parse__start(string);
! 	probe query__parse__done(string);
! 	probe query__rewrite__start(string);
! 	probe query__rewrite__done(string);
! 	probe query__plan__start();
! 	probe query__plan__done();
! 	probe query__execute__start();
! 	probe query__execute__done();
! 	probe query__start(string);
! 	probe query__done(string);
! 	probe statement__status(string);
! 
! 	probe sort__start(int, bool, int, int, bool);
! 	probe sort__done(unsigned long, long);
! 
! 	/* The following probe declarations cause compilation errors
!          * on Mac OS X but not on Solaris. Need further investigation.
! 	 * probe buffer__read__start(BlockNumber, Oid, Oid, Oid, bool isLocalBuf);
! 	 * probe buffer__read__done(BlockNumber, Oid, Oid, Oid, bool isLocalBuf, bool found);
! 	 */
! 	probe buffer__read__start(unsigned int, unsigned int, unsigned int, unsigned int, bool);
! 	probe buffer__read__done(unsigned int, unsigned int, unsigned int, unsigned int, bool, bool);
! 
! 	probe buffer__flush__start(Oid, Oid, Oid);
! 	probe buffer__flush__done(Oid, Oid, Oid);
! 
! 	probe buffer__hit(bool);
! 	probe buffer__miss(bool);
! 	probe buffer__checkpoint__start(int);
! 	probe buffer__checkpoint__done();
! 	probe buffer__sync__start(int, int);
! 	probe buffer__sync__written(int);
! 	probe buffer__sync__done(int, int, int);
! 
! 	probe deadlock__found();
  
+ 	probe clog__checkpoint__start(bool);
+ 	probe clog__checkpoint__done(bool);
+ 	probe subtrans__checkpoint__start(bool);
+ 	probe subtrans__checkpoint__done(bool);
+ 	probe multixact__checkpoint__start(bool);
+ 	probe multixact__checkpoint__done(bool);
+ 	probe twophase__checkpoint__start();
+ 	probe twophase__checkpoint__done();
  };
Index: src/backend/utils/sort/tuplesort.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/utils/sort/tuplesort.c,v
retrieving revision 1.85
diff -c -p -r1.85 tuplesort.c
*** src/backend/utils/sort/tuplesort.c	19 Jun 2008 00:46:05 -0000	1.85
--- src/backend/utils/sort/tuplesort.c	31 Jul 2008 22:09:52 -0000
***************
*** 107,112 ****
--- 107,113 ----
  #include "catalog/pg_operator.h"
  #include "commands/tablespace.h"
  #include "miscadmin.h"
+ #include "pg_trace.h"
  #include "utils/datum.h"
  #include "utils/logtape.h"
  #include "utils/lsyscache.h"
***************
*** 121,126 ****
--- 122,132 ----
  #ifdef TRACE_SORT
  bool		trace_sort = false;
  #endif
+ 
+ #define HEAP_SORT	0
+ #define INDEX_SORT	1
+ #define DATUM_SORT	2
+ 
  #ifdef DEBUG_BOUNDED_SORT
  bool		optimize_bounded_sort = true;
  #endif
*************** tuplesort_begin_heap(TupleDesc tupDesc,
*** 570,575 ****
--- 576,583 ----
  			 nkeys, workMem, randomAccess ? 't' : 'f');
  #endif
  
+ 	TRACE_POSTGRESQL_SORT_START(HEAP_SORT, false, nkeys, workMem, randomAccess);
+ 
  	state->nKeys = nkeys;
  
  	state->comparetup = comparetup_heap;
*************** tuplesort_begin_index_btree(Relation ind
*** 636,641 ****
--- 644,651 ----
  
  	state->nKeys = RelationGetNumberOfAttributes(indexRel);
  
+ 	TRACE_POSTGRESQL_SORT_START(INDEX_SORT, enforceUnique, state->nKeys, workMem, randomAccess);
+ 
  	state->comparetup = comparetup_index_btree;
  	state->copytup = copytup_index;
  	state->writetup = writetup_index;
*************** tuplesort_begin_datum(Oid datumType,
*** 714,719 ****
--- 724,731 ----
  			 workMem, randomAccess ? 't' : 'f');
  #endif
  
+ 	TRACE_POSTGRESQL_SORT_START(DATUM_SORT, false, 1, workMem, randomAccess);
+ 
  	state->nKeys = 1;			/* always a one-column sort */
  
  	state->comparetup = comparetup_datum;
*************** tuplesort_end(Tuplesortstate *state)
*** 825,830 ****
--- 837,847 ----
  	}
  #endif
  
+ 	TRACE_POSTGRESQL_SORT_DONE(state->tapeset,
+ 			(state->tapeset ? LogicalTapeSetBlocks(state->tapeset) :
+ 			(state->allowedMem - state->availMem + 1023) / 1024));
+ 
+ 
  	MemoryContextSwitchTo(oldcontext);
  
  	/*
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to