Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Data Bases > Pgsql Hackers > Re: Review: DTr...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 10 of 42 Topic 9629 of 11013
Post > Topic >>

Re: Review: DTrace probes (merged version)

by Robert.Lor@[EMAIL PROTECTED] (Robert Lor) Jul 21, 2008 at 02:47 PM

This is a multi-part message in MIME format.

--Boundary_(ID_mnmO00zsXjOIQO2rdE2b5A)
Content-type: text/plain; format=flowed; charset=ISO-8859-2
Content-transfer-encoding: 7BIT

Apologies for the delayed response - vacation, travel, etc got in the way!


Zdenek Kotala wrote:
> I performed review of merged patch from Robert Treat. At first point 
> the patch does not work (SunOS 5.11 snv_86 sun4u sparc 
> SUNW,Sun-Fire-V240)

The attached patch fixed the regression test errors.
>
>
> However I went through a code and I have following comments:
>
> 1) Naming convention:
>
>  - Some probes uses "*end", some "*done". It would be good to select 
> one name.
Noted. Will use <name>-done per the convention. This change will be 
included in an updated patch later since I think there are a number of 
other changes that need to be made.
>  - I prefer to use clog instead of slru in probes name. clog is widely 
> known.
I think slru- is okay per your subsequent emails.
>  - It seems to me better to have checkpoint-clog..., 
> checkpoint-subtrans instead of clog-checkpoint.
Yes, I was thinking about this too, but the current names are more 
consistent with the others. For example:

buffer-checkpoint, buffer-*
xlog-checkpoint, xlog-*
>  - buffer-flush was originally dirty-buffer-write-start. I prefer 
> Robert Lor's naming.
Actually, I made this change so the name is consistent with the other 
buffer-* probes.
>
> 2) storage read write probes
>
> smgr-read*, smgr-writes probes are in md.c. I personally think it make 
> more sense to put them into smgr.c. Only advantage to have it in md.c 
> is that actual amount of bytes is possible to monitor.
The current probes return number of bytes, that's why they are in md.c
>
> 3) query rewrite probe
>
> There are several probes for query measurement but query rewrite phase 
> is missing. See analyze_and_rewrite or pg_parse_and_rewrite
I believe the rewrite time is accounted for in the query-plan probe. 
Need to double check on this.
>
> 4) autovacuum_start
>
> Autovacuum_start probe is alone. I propose following probes for 
> completeness:
>
> proc-autovacuum-start
> proc-autovacuum-stop
> proc-bgwriter-start
> proc-bgwriter-stop
> proc-backend-start
> proc-backend-stop
> proc-master-start
> proc-master-stop
Saw a number of emails on this. Will get back on this.
>
> 5) Need explain of usage:
>
> I have some doubts about following probes. Could you please explain 
> usage of them? example dtrace script is welcome
>
>  - all exec-* probes
>  - mark-dirty, local-mark-dirty
>
Theo/Robert, do you guys have any sample scripts on the probes you added.
>
> 6) several comments about placement:
>
> I published patch on http://reviewdemo.postgresql.org/r/25/.
I added 
> several comments there.
>
> 7) SLRU/CLOG
>
> SLRU probes could be return more info. For example if page was in 
> buffer or if physical write is not necessary and so on.
Yes, more info could be returned if we can identify specific use cases 
that the new data will enable.

-- 
Robert Lor           Sun Microsystems
Austin, USA          http://sun.com/postgresql


--Boundary_(ID_mnmO00zsXjOIQO2rdE2b5A)
Content-type: text/plain; name=8.4_merged_probes_v2.patch;
x-mac-creator=0;
 x-mac-type=0
Content-transfer-encoding: 7BIT
Content-disposition: inline; filename=8.4_merged_probes_v2.patch

Index: src/backend/access/transam/clog.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/clog.c,v
retrieving revision 1.46
diff -u -3 -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	21 Jul 2008 18:14:48 -0000
@[EMAIL PROTECTED]
 -36,6 +36,7 @[EMAIL PROTECTED]
 #include "access/slru.h"
 #include "access/transam.h"
 #include "postmaster/bgwriter.h"
+#include "pg_trace.h"
 
 /*
  * Defines for CLOG page sizes.  A page is the same BLCKSZ as is used
@[EMAIL PROTECTED]
 -323,7 +324,9 @[EMAIL PROTECTED]
 void
 CheckPointCLOG(void)
 {
 	/* Flush dirty CLOG pages to disk */
+	TRACE_POSTGRESQL_CLOG_CHECKPOINT_START();
 	SimpleLruFlush(ClogCtl, true);
+	TRACE_POSTGRESQL_CLOG_CHECKPOINT_DONE();
 }
 
 
Index: src/backend/access/transam/multixact.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/multixact.c,v
retrieving revision 1.27
diff -u -3 -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	21 Jul 2008 18:21:58 -0000
@[EMAIL PROTECTED]
 -57,6 +57,7 @[EMAIL PROTECTED]
 #include "storage/lmgr.h"
 #include "utils/memutils.h"
 #include "storage/procarray.h"
+#include "pg_trace.h"
 
 
 /*
@[EMAIL PROTECTED]
 -1526,6 +1527,8 @[EMAIL PROTECTED]
 MultiXactGetCheckptMulti(bool is_shutdow
 void
 CheckPointMultiXact(void)
 {
+	TRACE_POSTGRESQL_MULTIXACT_CHECKPOINT_START();
+
 	/* Flush dirty MultiXact pages to disk */
 	SimpleLruFlush(MultiXactOffsetCtl, true);
 	SimpleLruFlush(MultiXactMemberCtl, true);
@[EMAIL PROTECTED]
 -1540,6 +1543,8 @[EMAIL PROTECTED]
 CheckPointMultiXact(void)
 	 */
 	if (!InRecovery)
 		TruncateMultiXact();
+
+	TRACE_POSTGRESQL_MULTIXACT_CHECKPOINT_DONE();
 }
 
 /*
Index: src/backend/access/transam/slru.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/slru.c,v
retrieving revision 1.44
diff -u -3 -p -r1.44 slru.c
--- src/backend/access/transam/slru.c	1 Jan 2008 19:45:48 -0000	1.44
+++ src/backend/access/transam/slru.c	21 Jul 2008 18:22:00 -0000
@[EMAIL PROTECTED]
 -57,6 +57,7 @[EMAIL PROTECTED]
 #include "storage/fd.h"
 #include "storage/shmem.h"
 #include "miscadmin.h"
+#include "pg_trace.h"
 
 
 /*
@[EMAIL PROTECTED]
 -372,6 +373,8 @[EMAIL PROTECTED]
 SimpleLruReadPage(SlruCtl ctl, int pagen
 {
 	SlruShared	shared = ctl->shared;
 
+	TRACE_POSTGRESQL_SLRU_READPAGE_START((uintptr_t)ctl, pageno, write_ok,
xid);
+
 	/* Outer loop handles restart if we must wait for someone else's I/O */
 	for (;;)
 	{
@[EMAIL PROTECTED]
 -399,6 +402,7 @[EMAIL PROTECTED]
 SimpleLruReadPage(SlruCtl ctl, int pagen
 			}
 			/* Otherwise, it's ready to use */
 			SlruRecentlyUsed(shared, slotno);
+			TRACE_POSTGRESQL_SLRU_READPAGE_DONE(slotno);
 			return slotno;
 		}
 
@[EMAIL PROTECTED]
 -446,6 +450,7 @[EMAIL PROTECTED]
 SimpleLruReadPage(SlruCtl ctl, int pagen
 			SlruRe****tIOError(ctl, pageno, xid);
 
 		SlruRecentlyUsed(shared, slotno);
+		TRACE_POSTGRESQL_SLRU_READPAGE_DONE(slotno);
 		return slotno;
 	}
 }
@[EMAIL PROTECTED]
 -470,6 +475,8 @[EMAIL PROTECTED]
 SimpleLruReadPage_ReadOnly(SlruCtl ctl, 
 	SlruShared	shared = ctl->shared;
 	int			slotno;
 
+	TRACE_POSTGRESQL_SLRU_READPAGE_READONLY((uintptr_t)ctl, pageno, xid);
+
 	/* Try to find the page while holding only shared lock */
 	LWLockAcquire(shared->ControlLock, LW_SHARED);
 
@[EMAIL PROTECTED]
 -511,6 +518,8 @[EMAIL PROTECTED]
 SimpleLruWritePage(SlruCtl ctl, int slot
 	int			pageno = shared->page_number[slotno];
 	bool		ok;
 
+	TRACE_POSTGRESQL_SLRU_WRITEPAGE_START((uintptr_t)ctl, pageno, slotno);
+
 	/* If a write is in progress, wait for it to finish */
 	while (shared->page_status[slotno] == SLRU_PAGE_WRITE_IN_PROGRESS &&
 		   shared->page_number[slotno] == pageno)
@[EMAIL PROTECTED]
 -525,7 +534,10 @[EMAIL PROTECTED]
 SimpleLruWritePage(SlruCtl ctl, int slot
 	if (!shared->page_dirty[slotno] ||
 		shared->page_status[slotno] != SLRU_PAGE_VALID ||
 		shared->page_number[slotno] != pageno)
+	{
+		TRACE_POSTGRESQL_SLRU_WRITEPAGE_DONE();
 		return;
+	}
 
 	/*
 	 * Mark the slot write-busy, and clear the dirtybit.  After this point,
a
@[EMAIL PROTECTED]
 -569,6 +581,8 @[EMAIL PROTECTED]
 SimpleLruWritePage(SlruCtl ctl, int slot
 	/* Now it's okay to ere****t if we failed */
 	if (!ok)
 		SlruRe****tIOError(ctl, pageno, InvalidTransactionId);
+
+	TRACE_POSTGRESQL_SLRU_WRITEPAGE_DONE();
 }
 
 /*
@[EMAIL PROTECTED]
 -593,6 +607,7 @[EMAIL PROTECTED]
 SlruPhysicalReadPage(SlruCtl ctl, int pa
 
 	SlruFileName(ctl, path, segno);
 
+	TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_START((uintptr_t)ctl, path,
pageno, slotno);
 	/*
 	 * In a crash-and-restart situation, it's possible for us to receive
 	 * commands to set the commit status of transactions whose bits are in
@[EMAIL PROTECTED]
 -607,6 +622,7 @[EMAIL PROTECTED]
 SlruPhysicalReadPage(SlruCtl ctl, int pa
 		{
 			slru_errcause = SLRU_OPEN_FAILED;
 			slru_errno = errno;
+			TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(false, slru_errcause,
slru_errno);
 			return false;
 		}
 
@[EMAIL PROTECTED]
 -614,6 +630,7 @[EMAIL PROTECTED]
 SlruPhysicalReadPage(SlruCtl ctl, int pa
 				(errmsg("file \"%s\" doesn't exist, reading as zeroes",
 						path)));
 		MemSet(shared->page_buffer[slotno], 0, BLCKSZ);
+		TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(true, slru_errcause,
slru_errno);
 		return true;
 	}
 
@[EMAIL PROTECTED]
 -622,6 +639,7 @[EMAIL PROTECTED]
 SlruPhysicalReadPage(SlruCtl ctl, int pa
 		slru_errcause = SLRU_SEEK_FAILED;
 		slru_errno = errno;
 		close(fd);
+		TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(false, slru_errcause,
slru_errno);
 		return false;
 	}
 
@[EMAIL PROTECTED]
 -631,6 +649,7 @[EMAIL PROTECTED]
 SlruPhysicalReadPage(SlruCtl ctl, int pa
 		slru_errcause = SLRU_READ_FAILED;
 		slru_errno = errno;
 		close(fd);
+		TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(false, slru_errcause,
slru_errno);
 		return false;
 	}
 
@[EMAIL PROTECTED]
 -638,9 +657,11 @[EMAIL PROTECTED]
 SlruPhysicalReadPage(SlruCtl ctl, int pa
 	{
 		slru_errcause = SLRU_CLOSE_FAILED;
 		slru_errno = errno;
+		TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(false, slru_errcause,
slru_errno);
 		return false;
 	}
 
+	TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(true, slru_errcause,
slru_errno);
 	return true;
 }
 
@[EMAIL PROTECTED]
 -668,6 +689,8 @[EMAIL PROTECTED]
 SlruPhysicalWritePage(SlruCtl ctl, int p
 	char		path[MAXPGPATH];
 	int			fd = -1;
 
+	TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_START((uintptr_t)ctl, pageno,
slotno);
+
 	/*
 	 * Honor the write-WAL-before-data rule, if appropriate, so that we do
not
 	 * write out data before associated WAL records.  This is the same
action
@[EMAIL PROTECTED]
 -753,6 +776,7 @[EMAIL PROTECTED]
 SlruPhysicalWritePage(SlruCtl ctl, int p
 		{
 			slru_errcause = SLRU_OPEN_FAILED;
 			slru_errno = errno;
+			TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause,
slru_errno);
 			return false;
 		}
 
@[EMAIL PROTECTED]
 -781,6 +805,7 @[EMAIL PROTECTED]
 SlruPhysicalWritePage(SlruCtl ctl, int p
 		slru_errno = errno;
 		if (!fdata)
 			close(fd);
+		TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause,
slru_errno);
 		return false;
 	}
 
@[EMAIL PROTECTED]
 -794,6 +819,7 @[EMAIL PROTECTED]
 SlruPhysicalWritePage(SlruCtl ctl, int p
 		slru_errno = errno;
 		if (!fdata)
 			close(fd);
+		TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause,
slru_errno);
 		return false;
 	}
 
@[EMAIL PROTECTED]
 -808,6 +834,7 @[EMAIL PROTECTED]
 SlruPhysicalWritePage(SlruCtl ctl, int p
 			slru_errcause = SLRU_FSYNC_FAILED;
 			slru_errno = errno;
 			close(fd);
+			TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause,
slru_errno);
 			return false;
 		}
 
@[EMAIL PROTECTED]
 -815,10 +842,12 @[EMAIL PROTECTED]
 SlruPhysicalWritePage(SlruCtl ctl, int p
 		{
 			slru_errcause = SLRU_CLOSE_FAILED;
 			slru_errno = errno;
+			TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause,
slru_errno);
 			return false;
 		}
 	}
 
+	TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(true, slru_errcause,
slru_errno);
 	return true;
 }
 
Index: src/backend/access/transam/subtrans.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/subtrans.c,v
retrieving revision 1.22
diff -u -3 -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	21 Jul 2008 18:22:01 -0000
@[EMAIL PROTECTED]
 -32,6 +32,7 @[EMAIL PROTECTED]
 #include "access/subtrans.h"
 #include "access/transam.h"
 #include "utils/snapmgr.h"
+#include "pg_trace.h"
 
 
 /*
@[EMAIL PROTECTED]
 -281,7 +282,9 @[EMAIL PROTECTED]
 CheckPointSUBTRANS(void)
 	 * 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();
 	SimpleLruFlush(SubTransCtl, true);
+	TRACE_POSTGRESQL_SUBTRANS_CHECKPOINT_DONE();
 }
 
 
Index: src/backend/access/transam/twophase.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/twophase.c,v
retrieving revision 1.43
diff -u -3 -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	21 Jul 2008 18:22:09 -0000
@[EMAIL PROTECTED]
 -57,6 +57,7 @[EMAIL PROTECTED]
 #include "storage/smgr.h"
 #include "utils/builtins.h"
 #include "utils/memutils.h"
+#include "pg_trace.h"
 
 
 /*
@[EMAIL PROTECTED]
 -1387,6 +1388,9 @[EMAIL PROTECTED]
 CheckPointTwoPhase(XLogRecPtr redo_horiz
 	 */
 	if (max_prepared_xacts <= 0)
 		return;					/* nothing to do */
+
+	TRACE_POSTGRESQL_TWOPHASE_CHECKPOINT_START();
+
 	xids = (TransactionId *) palloc(max_prepared_xacts *
sizeof(TransactionId));
 	nxids = 0;
 
@[EMAIL PROTECTED]
 -1444,6 +1448,8 @[EMAIL PROTECTED]
 CheckPointTwoPhase(XLogRecPtr redo_horiz
 	}
 
 	pfree(xids);
+
+	TRACE_POSTGRESQL_TWOPHASE_CHECKPOINT_DONE();
 }
 
 /*
Index: src/backend/access/transam/xlog.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/xlog.c,v
retrieving revision 1.316
diff -u -3 -p -r1.316 xlog.c
--- src/backend/access/transam/xlog.c	13 Jul 2008 20:45:47 -0000	1.316
+++ src/backend/access/transam/xlog.c	21 Jul 2008 18:22:23 -0000
@[EMAIL PROTECTED]
 -48,6 +48,7 @[EMAIL PROTECTED]
 #include "utils/builtins.h"
 #include "utils/pg_locale.h"
 #include "utils/ps_status.h"
+#include "pg_trace.h"
 
 
 /* File path names (all relative to $PGDATA) */
@[EMAIL PROTECTED]
 -484,6 +485,8 @[EMAIL PROTECTED]
 XLogInsert(RmgrId rmid, uint8 info, XLog
 	if (info & XLR_INFO_MASK)
 		elog(PANIC, "invalid xlog info mask %02X", info);
 
+	TRACE_POSTGRESQL_XLOG_INSERT(rmid, info);
+	
 	/*
 	 * In bootstrap mode, we don't actually log anything but XLOG resources;
 	 * return a phony record pointer.
@[EMAIL PROTECTED]
 -912,6 +915,8 @[EMAIL PROTECTED]
 begin:;
 		XLogwrtRqst FlushRqst;
 		XLogRecPtr	OldSegEnd;
 
+		TRACE_POSTGRESQL_XLOG_SWITCH();
+
 		LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);
 
 		/*
@[EMAIL PROTECTED]
 -1270,12 +1275,14 @[EMAIL PROTECTED]
 AdvanceXLInsertBuffer(bool new_segment)
 				 * Have to write buffers while holding insert lock. This is
 				 * not good, so only write as much as we absolutely must.
 				 */
+				TRACE_POSTGRESQL_WAL_BUFFER_WRITE_START();
 				WriteRqst.Write = OldPageRqstPtr;
 				WriteRqst.Flush.xlogid = 0;
 				WriteRqst.Flush.xrecoff = 0;
 				XLogWrite(WriteRqst, false, false);
 				LWLockRelease(WALWriteLock);
 				Insert->LogwrtResult = LogwrtResult;
+				TRACE_POSTGRESQL_WAL_BUFFER_WRITE_DONE();
 			}
 		}
 	}
@[EMAIL PROTECTED]
 -5785,6 +5792,7 @[EMAIL PROTECTED]
 CreateCheckPoint(int flags)
 			LWLockRelease(WALInsertLock);
 			LWLockRelease(CheckpointLock);
 			END_CRIT_SECTION();
+			TRACE_POSTGRESQL_XLOG_CHECKPOINT_DONE(UINT_MAX,0,0,0,UINT_MAX);
 			return;
 		}
 	}
@[EMAIL PROTECTED]
 -5880,6 +5888,8 @[EMAIL PROTECTED]
 CreateCheckPoint(int flags)
 	checkPoint.nextXid = ShmemVariableCache->nextXid;
 	LWLockRelease(XidGenLock);
 
+	TRACE_POSTGRESQL_XLOG_CHECKPOINT_START(flags, checkPoint.nextXid);
+
 	/* Increase XID epoch if we've wrapped around since last checkpoint */
 	checkPoint.nextXidEpoch = ControlFile->checkPointCopy.nextXidEpoch;
 	if (checkPoint.nextXid < ControlFile->checkPointCopy.nextXid)
@[EMAIL PROTECTED]
 -6004,6 +6014,11 @[EMAIL PROTECTED]
 CreateCheckPoint(int flags)
 	if (log_checkpoints)
 		LogCheckpointEnd();
 
+	TRACE_POSTGRESQL_XLOG_CHECKPOINT_DONE(CheckpointStats.ckpt_bufs_written,
+				NBuffers, CheckpointStats.ckpt_segs_added,
+				CheckpointStats.ckpt_segs_removed,
+				CheckpointStats.ckpt_segs_recycled);
+
 	LWLockRelease(CheckpointLock);
 }
 
Index: src/backend/executor/execScan.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/execScan.c,v
retrieving revision 1.43
diff -u -3 -p -r1.43 execScan.c
--- src/backend/executor/execScan.c	1 Jan 2008 19:45:49 -0000	1.43
+++ src/backend/executor/execScan.c	21 Jul 2008 18:22:23 -0000
@[EMAIL PROTECTED]
 -21,6 +21,7 @[EMAIL PROTECTED]
 #include "executor/executor.h"
 #include "miscadmin.h"
 #include "utils/memutils.h"
+#include "pg_trace.h"
 
 
 static bool tlist_matches_tupdesc(PlanState *ps, List *tlist, Index
varno, TupleDesc tupdesc);
@[EMAIL PROTECTED]
 -60,6 +61,7 @[EMAIL PROTECTED]
 ExecScan(ScanState *node,
 	qual = node->ps.qual;
 	projInfo = node->ps.ps_ProjInfo;
 
+	TRACE_POSTGRESQL_EXECUTOR_SCAN((uintptr_t)node, ((Scan
*)node->ps.plan)->scanrelid, (uintptr_t)accessMtd);
 	/*
 	 * If we have neither a qual to check nor a projection to do, just skip
 	 * all the overhead and return the raw scan tuple.
Index: src/backend/executor/nodeAgg.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeAgg.c,v
retrieving revision 1.158
diff -u -3 -p -r1.158 nodeAgg.c
--- src/backend/executor/nodeAgg.c	12 May 2008 00:00:49 -0000	1.158
+++ src/backend/executor/nodeAgg.c	21 Jul 2008 18:22:25 -0000
@[EMAIL PROTECTED]
 -86,6 +86,7 @[EMAIL PROTECTED]
 #include "utils/syscache.h"
 #include "utils/tuplesort.h"
 #include "utils/datum.h"
+#include "pg_trace.h"
 
 
 /*
@[EMAIL PROTECTED]
 -805,6 +806,8 @[EMAIL PROTECTED]
 ExecAgg(AggState *node)
 	if (node->agg_done)
 		return NULL;
 
+	TRACE_POSTGRESQL_EXECUTOR_AGG((uintptr_t)node, ((Agg *)
node->ss.ps.plan)->aggstrategy);
+
 	if (((Agg *) node->ss.ps.plan)->aggstrategy == AGG_HASHED)
 	{
 		if (!node->table_filled)
Index: src/backend/executor/nodeGroup.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeGroup.c,v
retrieving revision 1.70
diff -u -3 -p -r1.70 nodeGroup.c
--- src/backend/executor/nodeGroup.c	1 Jan 2008 19:45:49 -0000	1.70
+++ src/backend/executor/nodeGroup.c	21 Jul 2008 18:22:25 -0000
@[EMAIL PROTECTED]
 -24,6 +24,7 @[EMAIL PROTECTED]
 
 #include "executor/executor.h"
 #include "executor/nodeGroup.h"
+#include "pg_trace.h"
 
 
 /*
@[EMAIL PROTECTED]
 -49,6 +50,8 @[EMAIL PROTECTED]
 ExecGroup(GroupState *node)
 	numCols = ((Group *) node->ss.ps.plan)->numCols;
 	grpColIdx = ((Group *) node->ss.ps.plan)->grpColIdx;
 
+	TRACE_POSTGRESQL_EXECUTOR_GROUP((uintptr_t)node, numCols);
+
 	/*
 	 * The ScanTupleSlot holds the (copied) first tuple of each group.
 	 */
Index: src/backend/executor/nodeHash.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeHash.c,v
retrieving revision 1.116
diff -u -3 -p -r1.116 nodeHash.c
--- src/backend/executor/nodeHash.c	1 Jan 2008 19:45:49 -0000	1.116
+++ src/backend/executor/nodeHash.c	21 Jul 2008 18:22:26 -0000
@[EMAIL PROTECTED]
 -35,6 +35,7 @[EMAIL PROTECTED]
 #include "utils/dynahash.h"
 #include "utils/memutils.h"
 #include "utils/lsyscache.h"
+#include "pg_trace.h"
 
 
 static void ExecHa****ncreaseNumBatches(HashJoinTable hashtable);
@[EMAIL PROTECTED]
 -70,6 +71,8 @[EMAIL PROTECTED]
 MultiExecHash(HashState *node)
 	ExprContext *econtext;
 	uint32		hashvalue;
 
+	TRACE_POSTGRESQL_EXECUTOR_HASH_MULTI((uintptr_t)node);
+
 	/* must provide our own instrumentation sup****t */
 	if (node->ps.instrument)
 		InstrStartNode(node->ps.instrument);
Index: src/backend/executor/nodeHashjoin.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v
retrieving revision 1.93
diff -u -3 -p -r1.93 nodeHashjoin.c
--- src/backend/executor/nodeHashjoin.c	1 Jan 2008 19:45:49 -0000	1.93
+++ src/backend/executor/nodeHashjoin.c	21 Jul 2008 18:22:27 -0000
@[EMAIL PROTECTED]
 -20,6 +20,7 @[EMAIL PROTECTED]
 #include "executor/nodeHash.h"
 #include "executor/nodeHashjoin.h"
 #include "utils/memutils.h"
+#include "pg_trace.h"
 
 
 static TupleTableSlot *ExecHashJoinOuterGetTuple(PlanState *outerNode,
@[EMAIL PROTECTED]
 -58,6 +59,8 @[EMAIL PROTECTED]
 ExecHashJoin(HashJoinState *node)
 	uint32		hashvalue;
 	int			batchno;
 
+	TRACE_POSTGRESQL_EXECUTOR_HASHJOIN((uintptr_t)node);
+
 	/*
 	 * get information from HashJoin node
 	 */
Index: src/backend/executor/nodeLimit.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeLimit.c,v
retrieving revision 1.34
diff -u -3 -p -r1.34 nodeLimit.c
--- src/backend/executor/nodeLimit.c	10 Mar 2008 03:37:59 -0000	1.34
+++ src/backend/executor/nodeLimit.c	21 Jul 2008 18:22:28 -0000
@[EMAIL PROTECTED]
 -23,6 +23,7 @[EMAIL PROTECTED]
 
 #include "executor/executor.h"
 #include "executor/nodeLimit.h"
+#include "pg_trace.h"
 
 static void recompute_limits(LimitState *node);
 
@[EMAIL PROTECTED]
 -41,6 +42,8 @[EMAIL PROTECTED]
 ExecLimit(LimitState *node)
 	TupleTableSlot *slot;
 	PlanState  *outerPlan;
 
+	TRACE_POSTGRESQL_EXECUTOR_LIMIT((uintptr_t)node);
+
 	/*
 	 * get information from the node
 	 */
Index: src/backend/executor/nodeMaterial.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v
retrieving revision 1.62
diff -u -3 -p -r1.62 nodeMaterial.c
--- src/backend/executor/nodeMaterial.c	23 Mar 2008 00:54:04 -0000	1.62
+++ src/backend/executor/nodeMaterial.c	21 Jul 2008 18:22:28 -0000
@[EMAIL PROTECTED]
 -24,6 +24,7 @[EMAIL PROTECTED]
 #include "executor/executor.h"
 #include "executor/nodeMaterial.h"
 #include "miscadmin.h"
+#include "pg_trace.h"
 
 /* ----------------------------------------------------------------
  *		ExecMaterial
@[EMAIL PROTECTED]
 -45,6 +46,8 @[EMAIL PROTECTED]
 ExecMaterial(MaterialState *node)
 	bool		eof_tuplestore;
 	TupleTableSlot *slot;
 
+	TRACE_POSTGRESQL_EXECUTOR_MATERIAL((uintptr_t)node);
+
 	/*
 	 * get state info from node
 	 */
Index: src/backend/executor/nodeMergejoin.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeMergejoin.c,v
retrieving revision 1.91
diff -u -3 -p -r1.91 nodeMergejoin.c
--- src/backend/executor/nodeMergejoin.c	13 Apr 2008 20:51:20 -0000	1.91
+++ src/backend/executor/nodeMergejoin.c	21 Jul 2008 18:22:30 -0000
@[EMAIL PROTECTED]
 -102,6 +102,7 @[EMAIL PROTECTED]
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
 #include "utils/syscache.h"
+#include "pg_trace.h"
 
 
 /*
@[EMAIL PROTECTED]
 -565,6 +566,8 @[EMAIL PROTECTED]
 ExecMergeJoin(MergeJoinState *node)
 	bool		doFillOuter;
 	bool		doFillInner;
 
+	TRACE_POSTGRESQL_EXECUTOR_MERGEJOIN((uintptr_t)node);
+
 	/*
 	 * get information from node
 	 */
Index: src/backend/executor/nodeNestloop.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeNestloop.c,v
retrieving revision 1.46
diff -u -3 -p -r1.46 nodeNestloop.c
--- src/backend/executor/nodeNestloop.c	1 Jan 2008 19:45:49 -0000	1.46
+++ src/backend/executor/nodeNestloop.c	21 Jul 2008 18:22:30 -0000
@[EMAIL PROTECTED]
 -24,6 +24,7 @[EMAIL PROTECTED]
 #include "executor/execdebug.h"
 #include "executor/nodeNestloop.h"
 #include "utils/memutils.h"
+#include "pg_trace.h"
 
 
 /* ----------------------------------------------------------------
@[EMAIL PROTECTED]
 -67,6 +68,8 @[EMAIL PROTECTED]
 ExecNestLoop(NestLoopState *node)
 	List	   *otherqual;
 	ExprContext *econtext;
 
+	TRACE_POSTGRESQL_EXECUTOR_NESTLOOP((uintptr_t)node);
+
 	/*
 	 * get information from the node
 	 */
Index: src/backend/executor/nodeSetOp.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeSetOp.c,v
retrieving revision 1.25
diff -u -3 -p -r1.25 nodeSetOp.c
--- src/backend/executor/nodeSetOp.c	1 Jan 2008 19:45:49 -0000	1.25
+++ src/backend/executor/nodeSetOp.c	21 Jul 2008 18:22:31 -0000
@[EMAIL PROTECTED]
 -37,6 +37,7 @[EMAIL PROTECTED]
 #include "executor/executor.h"
 #include "executor/nodeSetOp.h"
 #include "utils/memutils.h"
+#include "pg_trace.h"
 
 
 /* ----------------------------------------------------------------
@[EMAIL PROTECTED]
 -50,6 +51,8 @[EMAIL PROTECTED]
 ExecSetOp(SetOpState *node)
 	TupleTableSlot *resultTupleSlot;
 	PlanState  *outerPlan;
 
+	TRACE_POSTGRESQL_EXECUTOR_SETOP((uintptr_t)node);
+
 	/*
 	 * get information from the node
 	 */
Index: src/backend/executor/nodeSort.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeSort.c,v
retrieving revision 1.62
diff -u -3 -p -r1.62 nodeSort.c
--- src/backend/executor/nodeSort.c	1 Jan 2008 19:45:49 -0000	1.62
+++ src/backend/executor/nodeSort.c	21 Jul 2008 18:22:32 -0000
@[EMAIL PROTECTED]
 -19,6 +19,7 @[EMAIL PROTECTED]
 #include "executor/nodeSort.h"
 #include "miscadmin.h"
 #include "utils/tuplesort.h"
+#include "pg_trace.h"
 
 
 /* ----------------------------------------------------------------
@[EMAIL PROTECTED]
 -53,6 +54,8 @[EMAIL PROTECTED]
 ExecSort(SortState *node)
 	dir = estate->es_direction;
 	tuplesortstate = (Tuplesortstate *) node->tuplesortstate;
 
+	TRACE_POSTGRESQL_EXECUTOR_SORT((uintptr_t)node, dir);
+
 	/*
 	 * If first time through, read all tuples from outer plan and pass them
to
 	 * tuplesort.c. Subsequent calls just fetch tuples from tuplesort.
Index: src/backend/executor/nodeSubplan.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeSubplan.c,v
retrieving revision 1.93
diff -u -3 -p -r1.93 nodeSubplan.c
--- src/backend/executor/nodeSubplan.c	12 May 2008 00:00:49 -0000	1.93
+++ src/backend/executor/nodeSubplan.c	21 Jul 2008 18:22:35 -0000
@[EMAIL PROTECTED]
 -27,6 +27,7 @[EMAIL PROTECTED]
 #include "utils/array.h"
 #include "utils/lsyscache.h"
 #include "utils/memutils.h"
+#include "pg_trace.h"
 
 
 static Datum ExecHashSubPlan(SubPlanState *node,
@[EMAIL PROTECTED]
 -80,6 +81,8 @[EMAIL PROTECTED]
 ExecHashSubPlan(SubPlanState *node,
 	ExprContext *innerecontext = node->innerecontext;
 	TupleTableSlot *slot;
 
+	TRACE_POSTGRESQL_EXECUTOR_SUBPLAN_HASH((uintptr_t)node);
+
 	/* Shouldn't have any direct correlation Vars */
 	if (subplan->parParam != NIL || node->args != NIL)
 		elog(ERROR, "hashed subplan with direct correlation not sup****ted");
@[EMAIL PROTECTED]
 -215,6 +218,8 @[EMAIL PROTECTED]
 ExecScanSubPlan(SubPlanState *node,
 	ListCell   *l;
 	ArrayBuildState *astate = NULL;
 
+	TRACE_POSTGRESQL_EXECUTOR_SUBPLAN_SCAN((uintptr_t)node);
+
 	/*
 	 * We are probably in a short-lived expression-evaluation context.
Switch
 	 * to the per-query context for manipulating the child plan's chgParam,
Index: src/backend/executor/nodeUnique.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/executor/nodeUnique.c,v
retrieving revision 1.56
diff -u -3 -p -r1.56 nodeUnique.c
--- src/backend/executor/nodeUnique.c	1 Jan 2008 19:45:49 -0000	1.56
+++ src/backend/executor/nodeUnique.c	21 Jul 2008 18:22:36 -0000
@[EMAIL PROTECTED]
 -28,6 +28,7 @[EMAIL PROTECTED]
 #include "executor/executor.h"
 #include "executor/nodeUnique.h"
 #include "utils/memutils.h"
+#include "pg_trace.h"
 
 
 /* ----------------------------------------------------------------
@[EMAIL PROTECTED]
 -45,6 +46,8 @[EMAIL PROTECTED]
 ExecUnique(UniqueState *node)
 	TupleTableSlot *slot;
 	PlanState  *outerPlan;
 
+	TRACE_POSTGRESQL_EXECUTOR_UNIQUE((uintptr_t)node);
+
 	/*
 	 * get information from the node
 	 */
Index: src/backend/postmaster/autovacuum.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/postmaster/autovacuum.c,v
retrieving revision 1.82
diff -u -3 -p -r1.82 autovacuum.c
--- src/backend/postmaster/autovacuum.c	21 Jul 2008 15:27:02 -0000	1.82
+++ src/backend/postmaster/autovacuum.c	21 Jul 2008 18:22:39 -0000
@[EMAIL PROTECTED]
 -100,6 +100,7 @[EMAIL PROTECTED]
 #include "utils/ps_status.h"
 #include "utils/syscache.h"
 #include "utils/tqual.h"
+#include "pg_trace.h"
 
 
 /*
@[EMAIL PROTECTED]
 -1601,6 +1602,7 @[EMAIL PROTECTED]
 AutoVacWorkerMain(int argc, char *argv[]
 		InitPostgres(NULL, dbid, NULL, &dbname);
 		SetProcessingMode(NormalProcessing);
 		set_ps_display(dbname, false);
+		TRACE_POSTGRESQL_AUTOVACUUM_START(dbid, dbname);
 		ere****t(DEBUG1,
 				(errmsg("autovacuum: processing database \"%s\"", dbname)));
 
@[EMAIL PROTECTED]
 -2177,6 +2179,7 @[EMAIL PROTECTED]
 do_autovacuum(void)
 		{
 			/* have at it */
 			MemoryContextSwitchTo(TopTransactionContext);
+			TRACE_POSTGRESQL_AUTOVACUUM_RELATION(tab->at_relid, tab->at_datname,
tab->at_nspname, tab->at_relname);
 			autovacuum_do_vac_analyze(tab, bstrategy);
 
 			/*
Index: src/backend/postmaster/pgstat.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/postmaster/pgstat.c,v
retrieving revision 1.176
diff -u -3 -p -r1.176 pgstat.c
--- src/backend/postmaster/pgstat.c	30 Jun 2008 10:58:47 -0000	1.176
+++ src/backend/postmaster/pgstat.c	21 Jul 2008 18:22:44 -0000
@[EMAIL PROTECTED]
 -61,6 +61,7 @[EMAIL PROTECTED]
 #include "utils/ps_status.h"
 #include "utils/rel.h"
 #include "utils/tqual.h"
+#include "pg_trace.h"
 
 
 /* ----------
@[EMAIL PROTECTED]
 -2202,6 +2203,8 @[EMAIL PROTECTED]
 pgstat_re****t_activity(const char *cmd_s
 	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: /projects/cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v
retrieving revision 1.234
diff -u -3 -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	21 Jul 2008 18:22:48 -0000
@[EMAIL PROTECTED]
 -43,6 +43,7 @[EMAIL PROTECTED]
 #include "utils/rel.h"
 #include "utils/resowner.h"
 #include "pgstat.h"
+#include "pg_trace.h"
 
 
 /* Note: these two macros only work on shared buffers, not local ones! */
@[EMAIL PROTECTED]
 -213,6 +214,9 @[EMAIL PROTECTED]
 ReadBuffer_common(SMgrRelation smgr, boo
 	if (i***tend)
 		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++;
@[EMAIL PROTECTED]
 -240,12 +244,19 @[EMAIL PROTECTED]
 ReadBuffer_common(SMgrRelation smgr, boo
 	{
 		if (!i***tend)
 		{
+			TRACE_POSTGRESQL_BUFFER_HIT();
+
 			/* Just need to update stats before we exit */
 			*hit = true;
 
 			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);
 		}
 
@[EMAIL PROTECTED]
 -297,6 +308,7 @[EMAIL PROTECTED]
 ReadBuffer_common(SMgrRelation smgr, boo
 			} while (!StartBufferIO(bufHdr, true));
 		}
 	}
+	TRACE_POSTGRESQL_BUFFER_MISS();
 
 	/*
 	 * if we have gotten to this point, we have allocated a buffer for the
@[EMAIL PROTECTED]
 -368,6 +380,10 @[EMAIL PROTECTED]
 ReadBuffer_common(SMgrRelation smgr, boo
 	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);
 }
 
@[EMAIL PROTECTED]
 -510,6 +526,11 @[EMAIL PROTECTED]
 BufferAlloc(SMgrRelation smgr,
 			 * happens to be trying to split the page the first one got from
 			 * StrategyGetBuffer.)
 			 */
+
+			TRACE_POSTGRESQL_BUFFER_WRITE_DIRTY_START(blockNum,
+			  smgr->smgr_rnode.spcNode, smgr->smgr_rnode.dbNode,
+			  smgr->smgr_rnode.relNode);
+
 			if (LWLockConditionalAcquire(buf->content_lock, LW_SHARED))
 			{
 				/*
@[EMAIL PROTECTED]
 -532,6 +553,11 @[EMAIL PROTECTED]
 BufferAlloc(SMgrRelation smgr,
 				/* OK, do the I/O */
 				FlushBuffer(buf, NULL);
 				LWLockRelease(buf->content_lock);
+
+				TRACE_POSTGRESQL_BUFFER_WRITE_DIRTY_DONE(
+				  blockNum, smgr->smgr_rnode.spcNode,
+				  smgr->smgr_rnode.dbNode, smgr->smgr_rnode.relNode,
+				  (oldFlags & BM_HINT_BITS_TEST));
 			}
 			else
 			{
@[EMAIL PROTECTED]
 -850,7 +876,9 @[EMAIL PROTECTED]
 MarkBufferDirty(Buffer buffer)
 	if (!(bufHdr->flags & BM_DIRTY) && VacuumCostActive)
 		VacuumCostBalance += VacuumCostPageDirty;
 
-	bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED);
+	bufHdr->flags |= (BM_DIRTY | BM_JUST_DIRTIED | BM_HINT_BITS_TEST);
+
+	TRACE_POSTGRESQL_BUFFER_MARK_DIRTY(buffer);
 
 	UnlockBufHdr(bufHdr);
 }
@[EMAIL PROTECTED]
 -1086,6 +1114,8 @[EMAIL PROTECTED]
 BufferSync(int flags)
 	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
@[EMAIL PROTECTED]
 -1117,6 +1147,7 @[EMAIL PROTECTED]
 BufferSync(int flags)
 		{
 			if (SyncOneBuffer(buf_id, false) & BUF_WRITTEN)
 			{
+				TRACE_POSTGRESQL_BUFFER_SYNC_WRITTEN(buf_id);
 				BgWriterStats.m_buf_written_checkpoints++;
 				num_written++;
 
@[EMAIL PROTECTED]
 -1147,6 +1178,8 @[EMAIL PROTECTED]
 BufferSync(int flags)
 			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.
@[EMAIL PROTECTED]
 -1653,11 +1686,13 @[EMAIL PROTECTED]
 PrintBufferLeakWarning(Buffer buffer)
 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();
 }
 
 
@[EMAIL PROTECTED]
 -1759,6 +1794,10 @[EMAIL PROTECTED]
 FlushBuffer(volatile BufferDesc *buf, SM
 	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, buf->tag.blockNum);
+
 	/*
 	 * 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
@[EMAIL PROTECTED]
 -1785,6 +1824,10 @[EMAIL PROTECTED]
 FlushBuffer(volatile BufferDesc *buf, SM
 
 	BufferFlushCount++;
 
+	TRACE_POSTGRESQL_BUFFER_FLUSH_DONE(reln->smgr_rnode.spcNode,
+		 reln->smgr_rnode.dbNode, reln->smgr_rnode.relNode,
+		 buf->tag.blockNum, (buf->flags & BM_HINT_BITS_TEST));
+
 	/*
 	 * Mark the buffer as clean (unless BM_JUST_DIRTIED has become set) and
 	 * end the io_in_progress state.
@[EMAIL PROTECTED]
 -2536,7 +2579,7 @[EMAIL PROTECTED]
 TerminateBufferIO(volatile BufferDesc *b
 	Assert(buf->flags & BM_IO_IN_PROGRESS);
 	buf->flags &= ~(BM_IO_IN_PROGRESS | BM_IO_ERROR);
 	if (clear_dirty && !(buf->flags & BM_JUST_DIRTIED))
-		buf->flags &= ~(BM_DIRTY | BM_CHECKPOINT_NEEDED);
+		buf->flags &= ~(BM_DIRTY | BM_CHECKPOINT_NEEDED | BM_HINT_BITS_TEST);
 	buf->flags |= set_flag_bits;
 
 	UnlockBufHdr(buf);
Index: src/backend/storage/buffer/localbuf.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v
retrieving revision 1.80
diff -u -3 -p -r1.80 localbuf.c
--- src/backend/storage/buffer/localbuf.c	12 Jun 2008 09:12:31 -0000	1.80
+++ src/backend/storage/buffer/localbuf.c	21 Jul 2008 18:22:48 -0000
@[EMAIL PROTECTED]
 -21,6 +21,7 @[EMAIL PROTECTED]
 #include "utils/guc.h"
 #include "utils/memutils.h"
 #include "utils/resowner.h"
+#include "pg_trace.h"
 
 
 /*#define LBDEBUG*/
@[EMAIL PROTECTED]
 -236,6 +237,7 @[EMAIL PROTECTED]
 MarkLocalBufferDirty(Buffer buffer)
 
 	bufHdr = &LocalBufferDescriptors[bufid];
 	bufHdr->flags |= BM_DIRTY;
+	TRACE_POSTGRESQL_BUFFER_MARK_DIRTY_LOCAL(buffer);
 }
 
 /*
Index: src/backend/storage/lmgr/deadlock.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/lmgr/deadlock.c,v
retrieving revision 1.53
diff -u -3 -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	21 Jul 2008 18:22:49 -0000
@[EMAIL PROTECTED]
 -30,6 +30,7 @[EMAIL PROTECTED]
 #include "storage/lmgr.h"
 #include "storage/proc.h"
 #include "utils/memutils.h"
+#include "pg_trace.h"
 
 
 /* One edge in the waits-for graph */
@[EMAIL PROTECTED]
 -222,6 +223,8 @[EMAIL PROTECTED]
 DeadLockCheck(PGPROC *proc)
 		 */
 		int			nSoftEdges;
 
+		TRACE_POSTGRESQL_DEADLOCK_FOUND();
+
 		nWaitOrders = 0;
 		if (!FindLockCycle(proc, possibleConstraints, &nSoftEdges))
 			elog(FATAL, "deadlock seems to have disappeared");
@[EMAIL PROTECTED]
 -259,6 +262,8 @[EMAIL PROTECTED]
 DeadLockCheck(PGPROC *proc)
 		ProcLockWakeup(GetLocksMethodTable(lock), lock);
 	}
 
+	TRACE_POSTGRESQL_DEADLOCK_NOTFOUND(nWaitOrders);
+
 	/* Return code tells caller if we had to escape a deadlock or not */
 	if (nWaitOrders > 0)
 		return DS_SOFT_DEADLOCK;
Index: src/backend/storage/smgr/md.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/smgr/md.c,v
retrieving revision 1.138
diff -u -3 -p -r1.138 md.c
--- src/backend/storage/smgr/md.c	2 May 2008 01:08:27 -0000	1.138
+++ src/backend/storage/smgr/md.c	21 Jul 2008 18:22:50 -0000
@[EMAIL PROTECTED]
 -26,6 +26,7 @[EMAIL PROTECTED]
 #include "storage/smgr.h"
 #include "utils/hsearch.h"
 #include "utils/memutils.h"
+#include "pg_trace.h"
 
 
 /* interval for calling AbsorbFsyncRequests in mdsync */
@[EMAIL PROTECTED]
 -555,6 +556,8 @[EMAIL PROTECTED]
 mdread(SMgrRelation reln, BlockNumber bl
 	int			nbytes;
 	MdfdVec    *v;
 
+	TRACE_POSTGRESQL_SMGR_READ_START(blocknum, reln->smgr_rnode.spcNode,
reln->smgr_rnode.dbNode, reln->smgr_rnode.relNode);
+
 	v = _mdfd_getseg(reln, blocknum, false, EXTENSION_FAIL);
 
 	seekpos = (off_t) BLCKSZ * (blocknum % ((BlockNumber) RELSEG_SIZE));
@[EMAIL PROTECTED]
 -569,7 +572,11 @[EMAIL PROTECTED]
 mdread(SMgrRelation reln, BlockNumber bl
 						reln->smgr_rnode.dbNode,
 						reln->smgr_rnode.relNode)));
 
-	if ((nbytes = FileRead(v->mdfd_vfd, buffer, BLCKSZ)) != BLCKSZ)
+	nbytes = FileRead(v->mdfd_vfd, buffer, BLCKSZ);
+
+	TRACE_POSTGRESQL_SMGR_READ_DONE(blocknum, reln->smgr_rnode.spcNode,
reln->smgr_rnode.dbNode, reln->smgr_rnode.relNode, nbytes, BLCKSZ);
+
+	if (nbytes != BLCKSZ)
 	{
 		if (nbytes < 0)
 			ere****t(ERROR,
@[EMAIL PROTECTED]
 -621,6 +628,8 @[EMAIL PROTECTED]
 mdwrite(SMgrRelation reln, BlockNumber b
 	Assert(blocknum < mdnblocks(reln));
 #endif
 
+	TRACE_POSTGRESQL_SMGR_WRITE_START(blocknum, reln->smgr_rnode.spcNode,
reln->smgr_rnode.dbNode, reln->smgr_rnode.relNode);
+
 	v = _mdfd_getseg(reln, blocknum, isTemp, EXTENSION_FAIL);
 
 	seekpos = (off_t) BLCKSZ * (blocknum % ((BlockNumber) RELSEG_SIZE));
@[EMAIL PROTECTED]
 -657,6 +666,8 @[EMAIL PROTECTED]
 mdwrite(SMgrRelation reln, BlockNumber b
 				 errhint("Check free disk space.")));
 	}
 
+	TRACE_POSTGRESQL_SMGR_WRITE_DONE(blocknum, reln->smgr_rnode.spcNode,
reln->smgr_rnode.dbNode, reln->smgr_rnode.relNode, nbytes, BLCKSZ);
+
 	if (!isTemp)
 		register_dirty_segment(reln, v);
 }
Index: src/backend/tcop/postgres.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.554
diff -u -3 -p -r1.554 postgres.c
--- src/backend/tcop/postgres.c	18 Jul 2008 20:26:06 -0000	1.554
+++ src/backend/tcop/postgres.c	21 Jul 2008 18:22:54 -0000
@[EMAIL PROTECTED]
 -71,6 +71,7 @[EMAIL PROTECTED]
 #include "mb/pg_wchar.h"
 
 #include "pgstat.h"
+#include "pg_trace.h"
 
 extern int	optind;
 extern char *optarg;
@[EMAIL PROTECTED]
 -551,6 +552,8 @[EMAIL PROTECTED]
 pg_parse_query(const char *query_string)
 {
 	List	   *raw_parsetree_list;
 
+	TRACE_POSTGRESQL_QUERY_PARSE_START(query_string);
+
 	if (log_parser_stats)
 		ResetUsage();
 
@[EMAIL PROTECTED]
 -660,6 +663,8 @[EMAIL PROTECTED]
 pg_rewrite_query(Query *query)
 		elog_node_display(DEBUG1, "rewritten parse tree", querytree_list,
 						  Debug_pretty_print);
 
+	TRACE_POSTGRESQL_QUERY_PARSE_DONE();
+
 	return querytree_list;
 }
 
@[EMAIL PROTECTED]
 -673,6 +678,8 @[EMAIL PROTECTED]
 pg_plan_query(Query *querytree, int curs
 {
 	PlannedStmt *plan;
 
+	TRACE_POSTGRESQL_QUERY_PLAN_START();
+
 	/* Utility commands have no plans. */
 	if (querytree->commandType == CMD_UTILITY)
 		return NULL;
@[EMAIL PROTECTED]
 -710,6 +717,7 @[EMAIL PROTECTED]
 pg_plan_query(Query *querytree, int curs
 	 */
 	if (Debug_print_plan)
 		elog_node_display(DEBUG1, "plan", plan, Debug_pretty_print);
+	TRACE_POSTGRESQL_QUERY_PLAN_DONE();
 
 	return plan;
 }
@[EMAIL PROTECTED]
 -785,6 +793,7 @[EMAIL PROTECTED]
 exec_simple_query(const char *query_stri
 	bool		isTopLevel;
 	char		msec_str[32];
 
+
 	/*
 	 * Re****t query to various monitoring facilities.
 	 */
@[EMAIL PROTECTED]
 -792,6 +801,8 @[EMAIL PROTECTED]
 exec_simple_query(const char *query_stri
 
 	pgstat_re****t_activity(query_string);
 
+	TRACE_POSTGRESQL_QUERY_START(query_string);
+
 	/*
 	 * We use save_log_statement_stats so ShowUsage doesn't re****t incorrect
 	 * results because ResetUsage wasn't called.
@[EMAIL PROTECTED]
 -1058,6 +1069,8 @[EMAIL PROTECTED]
 exec_simple_query(const char *query_stri
 	if (save_log_statement_stats)
 		ShowUsage("QUERY STATISTICS");
 
+	TRACE_POSTGRESQL_QUERY_DONE(query_string);
+
 	debug_query_string = NULL;
 }
 
@[EMAIL PROTECTED]
 -3493,6 +3506,7 @[EMAIL PROTECTED]
 PostgresMain(int argc, char *argv[], con
 		{
 			if (IsTransactionOrTransactionBlock())
 			{
+				TRACE_POSTGRESQL_TRANSACTION_IDLE_START(GetCurrentTransactionId(),
GetCurrentCommandId(false));
 				set_ps_display("idle in transaction", false);
 				pgstat_re****t_activity("<IDLE> in transaction");
 			}
@[EMAIL PROTECTED]
 -3522,6 +3536,8 @[EMAIL PROTECTED]
 PostgresMain(int argc, char *argv[], con
 		 */
 		firstchar = ReadCommand(&input_message);
 
+		TRACE_POSTGRESQL_TRANSACTION_IDLE_DONE();
+
 		/*
 		 * (4) disable async signal conditions again.
 		 */
Index: src/backend/tcop/pquery.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/tcop/pquery.c,v
retrieving revision 1.123
diff -u -3 -p -r1.123 pquery.c
--- src/backend/tcop/pquery.c	12 May 2008 20:02:02 -0000	1.123
+++ src/backend/tcop/pquery.c	21 Jul 2008 18:22:56 -0000
@[EMAIL PROTECTED]
 -24,6 +24,7 @[EMAIL PROTECTED]
 #include "tcop/utility.h"
 #include "utils/memutils.h"
 #include "utils/snapmgr.h"
+#include "pg_trace.h"
 
 
 /*
@[EMAIL PROTECTED]
 -711,6 +712,8 @[EMAIL PROTECTED]
 ****talRun(****tal ****tal, long count, boo
 
 	AssertArg(****talIsValid(****tal));
 
+	TRACE_POSTGRESQL_QUERY_EXECUTE_START();
+
 	/* Initialize completion tag to empty string */
 	if (completionTag)
 		completionTag[0] = '\0';
@[EMAIL PROTECTED]
 -857,6 +860,8 @[EMAIL PROTECTED]
 ****talRun(****tal ****tal, long count, boo
 
 	if (log_executor_stats && ****tal->strategy != ****TAL_MULTI_QUERY)
 		ShowUsage("EXECUTOR STATISTICS");
+	
+	TRACE_POSTGRESQL_QUERY_EXECUTE_DONE();
 
 	return result;
 }
@[EMAIL PROTECTED]
 -1237,6 +1242,8 @[EMAIL PROTECTED]
 ****talRunMulti(****tal ****tal, bool isTop
 			 */
 			PlannedStmt *pstmt = (PlannedStmt *) stmt;
 
+			TRACE_POSTGRESQL_QUERY_EXECUTE_START();
+
 			if (log_executor_stats)
 				ResetUsage();
 
@[EMAIL PROTECTED]
 -1257,6 +1264,8 @[EMAIL PROTECTED]
 ****talRunMulti(****tal ****tal, bool isTop
 
 			if (log_executor_stats)
 				ShowUsage("EXECUTOR STATISTICS");
+
+			TRACE_POSTGRESQL_QUERY_EXECUTE_DONE();
 		}
 		else
 		{
Index: src/backend/utils/probes.d
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/probes.d,v
retrieving revision 1.2
diff -u -3 -p -r1.2 probes.d
--- src/backend/utils/probes.d	2 Jan 2008 02:42:06 -0000	1.2
+++ src/backend/utils/probes.d	21 Jul 2008 18:22:56 -0000
@[EMAIL PROTECTED]
 -7,18 +7,123 @[EMAIL PROTECTED]
  * ----------
  */
 
+
 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);
+	/* 
+	 * Due to a bug in Mac OS X 10.5, using defined types (e.g. uintptr_t,
+	 * uint32_t, etc.) cause compilation error.  
+	 */
+	  
+	probe transaction__start(unsigned int transactionId);
+	probe transaction__commit(unsigned int transactionId);
+	probe transaction__abort(unsigned int transactionId);
+	probe transaction__idle__start(unsigned int currentTxnId, unsigned int
currentCmdId);
+	probe transaction__idle__done();
+
+	probe lwlock__acquire(unsigned int lockId, unsigned int mode);
+	probe lwlock__release(unsigned int lockId);
+	probe lwlock__startwait(unsigned int lockId, unsigned int mode);
+	probe lwlock__endwait(unsigned int lockId, unsigned int mode);
+	probe lwlock__condacquire(unsigned int lockId, unsigned int mode);
+	probe lwlock__condacquire__fail(unsigned int lockId, unsigned int mode);
+	probe lock__startwait(unsigned int lockTagField2, int lockMode);
+	probe lock__endwait(unsigned int lockTagField2, int lockMode);
+
+	probe query__parse__start(char *queryString);
+	probe query__parse__done();
+	probe query__plan__start();
+	probe query__plan__done();
+	probe query__execute__start();
+	probe query__execute__done();
+	probe query__start(char *queryString);
+	probe query__done(char *queryString);
+	probe statement__status(char *cmdString);
+
+	probe sort__start(int, int, int, int, int);
+	probe sort__end(int, long);
+
+	probe buffer__read__start(int blockNum, int tablespaceOid,
+			int databaseOid, int relationOid, int isLocalBuf);
+	probe buffer__read__done(int blockNum, int tablespaceOid,
+		 	int databaseOid, int relationOid, int isLocalBuf,
+			int isInBuffPool);
+	probe buffer__write__dirty__start(int blockNum, int tablespaceOid,
+			int databaseOid, int relationOid);
+	probe buffer__write__dirty__done(int blockNum, int tablespaceOid,
+			int databaseOid, int relationOid, int i****ntBitsWrite);
+
+	probe buffer__flush__start(int tablespaceOid,
+			int databaseOid, int relationOid, int blockNum);
+	probe buffer__flush__done(int tablespaceOid, int databaseOid,
+			int relationOid, int blockNum, int i****ntBitsWrite);
+	probe buffer__hit();
+	probe buffer__miss();
+	probe buffer__mark__dirty(int bufferId);
+	probe buffer__mark__dirty__local(int bufferId);
+	probe buffer__checkpoint__start(int);
+	probe buffer__checkpoint__done();
+	probe buffer__sync__start(int numBuffers, int numToWrite);
+	probe buffer__sync__written(int bufId);
+	probe buffer__sync__done(int numBuffers, int numWritten, int
numToWrite);
+
+	probe wal__buffer__write__start();
+	probe wal__buffer__write__done();
+
+	probe deadlock__found();
+	probe deadlock__notfound(int);
+
+	probe smgr__read__start(int blockNum, int tablespaceOid,
+			int databaseOid, int relationOid);
+	probe smgr__read__done(int blockNum, int tablespaceOid,
+	 		int databaseOid, int relationOid, int bytesRead,
+			int blockSize);
+	probe smgr__write__start(int blockNum, int tablespaceOid,
+			int databaseOid, int relationOid);
+	probe smgr__write__done(int blockNum, int tablespaceOid,
+			int databaseOid, int relationOid, int bytesRead,
+			int blockSize);
+
+	probe xlog__insert(unsigned char, unsigned char);
+	probe xlog__switch();
+
+	probe xlog__checkpoint__start(int checkpointFlags, unsigned int
transactionId);
+	probe xlog__checkpoint__done(int bufsWritten, int NBuffers, int
segsAdded,
+			int segsRemoved, int segsRecycled);
+	probe clog__checkpoint__start();
+	probe clog__checkpoint__done();
+	probe subtrans__checkpoint__start();
+	probe subtrans__checkpoint__done();
+	probe multixact__checkpoint__start();
+	probe multixact__checkpoint__done();
+	probe twophase__checkpoint__start();
+	probe twophase__checkpoint__done();
+
+	probe autovacuum__start(unsigned int databaseOid, char *databaseName);
+	probe autovacuum__relation(unsigned int, char *, char *, char *);
+
+	probe slru__readpage__start(unsigned int, int pageNum, int writeOk, int
xid);
+	probe slru__readpage__done(int slotNum);
+	probe slru__readpage__readonly(unsigned int, int, int);
+	probe slru__writepage__start(unsigned int, int pageNum, int slotNum);
+	probe slru__writepage__done();
+	probe slru__readpage__physical__start(unsigned int, char *path, int
pageNum, int slotNum);
+	probe slru__readpage__physical__done(int retVal, int errCause, int
errNo);
+	probe slru__writepage__physical__start(unsigned int, int pageNum, int
slotNum);
+	probe slru__writepage__physical__done(int retVal, int errCause, int
errNo);
 
+	probe executor__scan(unsigned int, unsigned int, unsigned int);
+	probe executor__agg(unsigned int, int);
+	probe executor__group(unsigned int, int);
+	probe executor__hash__multi(unsigned int);
+	probe executor__hashjoin(unsigned int);
+	probe executor__limit(unsigned int);
+	probe executor__material(unsigned int);
+	probe executor__mergejoin(unsigned int);
+	probe executor__nestloop(unsigned int);
+	probe executor__setop(unsigned int);
+	probe executor__sort(unsigned int, int);
+	probe executor__subplan__hash(unsigned int);
+	probe executor__subplan__scan(unsigned int);
+	probe executor__unique(unsigned int);
 };
Index: src/backend/utils/sort/tuplesort.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/sort/tuplesort.c,v
retrieving revision 1.85
diff -u -3 -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	21 Jul 2008 18:23:00 -0000
@[EMAIL PROTECTED]
 -115,12 +115,18 @[EMAIL PROTECTED]
 #include "utils/rel.h"
 #include "utils/syscache.h"
 #include "utils/tuplesort.h"
+#include "pg_trace.h"
 
 
 /* GUC variables */
 #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
@[EMAIL PROTECTED]
 -569,6 +575,7 @[EMAIL PROTECTED]
 tuplesort_begin_heap(TupleDesc tupDesc,
 			 "begin tuple sort: nkeys = %d, workMem = %d, randomAccess = %c",
 			 nkeys, workMem, randomAccess ? 't' : 'f');
 #endif
+	TRACE_POSTGRESQL_SORT_START(HEAP_SORT, false, nkeys, workMem,
randomAccess);
 
 	state->nKeys = nkeys;
 
@[EMAIL PROTECTED]
 -636,6 +643,8 @[EMAIL PROTECTED]
 tuplesort_begin_index_btree(Relation ind
 
 	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;
@[EMAIL PROTECTED]
 -713,6 +722,7 @[EMAIL PROTECTED]
 tuplesort_begin_datum(Oid datumType,
 			 "begin datum sort: workMem = %d, randomAccess = %c",
 			 workMem, randomAccess ? 't' : 'f');
 #endif
+	TRACE_POSTGRESQL_SORT_START(DATUM_SORT, false, 1, workMem,
randomAccess);
 
 	state->nKeys = 1;			/* always a one-column sort */
 
@[EMAIL PROTECTED]
 -825,6 +835,11 @[EMAIL PROTECTED]
 tuplesort_end(Tuplesortstate *state)
 	}
 #endif
 
+	TRACE_POSTGRESQL_SORT_END(state->tapeset,
+			(state->tapeset ? LogicalTapeSetBlocks(state->tapeset) :
+			(state->allowedMem - state->availMem + 1023) / 1024));
+
+
 	MemoryContextSwitchTo(oldcontext);
 
 	/*
Index: src/include/storage/buf_internals.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/storage/buf_internals.h,v
retrieving revision 1.97
diff -u -3 -p -r1.97 buf_internals.h
--- src/include/storage/buf_internals.h	19 Jun 2008 00:46:06 -0000	1.97
+++ src/include/storage/buf_internals.h	21 Jul 2008 18:23:01 -0000
@[EMAIL PROTECTED]
 -37,6 +37,7 @[EMAIL PROTECTED]
 #define BM_JUST_DIRTIED			(1 << 5)		/* dirtied since write started */
 #define BM_PIN_COUNT_WAITER		(1 << 6)		/* have waiter for sole pin */
 #define BM_CHECKPOINT_NEEDED	(1 << 7)		/* must write for checkpoint */
+#define BM_HINT_BITS_TEST	(1 << 8)		/* test effect of writes due to hint
bits */
 
 typedef bits16 BufFlags;
 

--Boundary_(ID_mnmO00zsXjOIQO2rdE2b5A)
Content-Type: text/plain
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@[EMAIL PROTECTED]
)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

--Boundary_(ID_mnmO00zsXjOIQO2rdE2b5A)--
 




 42 Posts in Topic:
Review: DTrace probes (merged version)
Zdenek.Kotala@[EMAIL PROT  2008-07-04 16:38:06 
Re: Review: DTrace probes (merged version)
alvherre@[EMAIL PROTECTED  2008-07-04 11:05:40 
Re: Review: DTrace probes (merged version)
tgl@[EMAIL PROTECTED] (T  2008-07-04 12:22:08 
Re: Review: DTrace probes (merged version)
Zdenek.Kotala@[EMAIL PROT  2008-07-04 19:19:40 
Re: Review: DTrace probes (merged version)
alvherre@[EMAIL PROTECTED  2008-07-04 13:30:35 
Re: Review: DTrace probes (merged version)
Zdenek.Kotala@[EMAIL PROT  2008-07-04 19:26:52 
Re: Review: DTrace probes (merged version)
alvherre@[EMAIL PROTECTED  2008-07-04 13:33:05 
Re: Review: DTrace probes (merged version)
Zdenek.Kotala@[EMAIL PROT  2008-07-04 19:42:12 
Re: Review: DTrace probes (merged version)
Zdenek.Kotala@[EMAIL PROT  2008-07-04 19:50:18 
Re: Review: DTrace probes (merged version)
Robert.Lor@[EMAIL PROTECT  2008-07-21 14:47:24 
Re: Review: DTrace probes (merged version)
peter_e@[EMAIL PROTECTED]  2008-07-23 19:02:12 
Re: Review: DTrace probes (merged version)
Zdenek.Kotala@[EMAIL PROT  2008-07-23 20:55:57 
Re: Review: DTrace probes (merged version) ver_03
Zdenek.Kotala@[EMAIL PROT  2008-07-24 17:11:46 
Re: Review: DTrace probes (merged version) ver_03
jesus@[EMAIL PROTECTED]   2008-07-24 12:15:26 
Re: Review: DTrace probes (merged version) ver_03
alvherre@[EMAIL PROTECTED  2008-07-25 22:36:43 
Re: Review: DTrace probes (merged version) ver_03
tgl@[EMAIL PROTECTED] (T  2008-07-26 19:09:45 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-08-01 15:42:23 
Re: Review: DTrace probes (merged version) ver_03
gsmith@[EMAIL PROTECTED]   2008-08-02 16:00:51 
Re: Review: DTrace probes (merged version) ver_03
Zdenek.Kotala@[EMAIL PROT  2008-07-25 09:45:20 
Re: Review: DTrace probes (merged version) ver_03
Zdenek.Kotala@[EMAIL PROT  2008-07-28 12:27:43 
Re: Review: DTrace probes (merged version) ver_03
Zdenek.Kotala@[EMAIL PROT  2008-07-28 13:32:54 
Re: Review: DTrace probes (merged version) ver_03
tgl@[EMAIL PROTECTED] (T  2008-07-28 10:16:21 
Re: Review: DTrace probes (merged version) ver_03
Zdenek.Kotala@[EMAIL PROT  2008-07-28 16:13:11 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-07-28 18:17:56 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-07-28 18:39:19 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-07-28 18:54:14 
Re: Review: DTrace probes (merged version) ver_03
tgl@[EMAIL PROTECTED] (T  2008-07-28 20:06:57 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-07-29 00:23:41 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-07-29 23:34:54 
Re: Review: DTrace probes (merged version) ver_03
alvherre@[EMAIL PROTECTED  2008-07-31 14:20:37 
Re: Review: DTrace probes (merged version) ver_03
alvherre@[EMAIL PROTECTED  2008-07-31 17:08:41 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-07-31 15:21:26 
Re: Review: DTrace probes (merged version) ver_03
alvherre@[EMAIL PROTECTED  2008-07-31 16:43:30 
Re: Review: DTrace probes (merged version) ver_03
alvherre@[EMAIL PROTECTED  2008-07-31 18:19:29 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-07-31 23:08:56 
Re: Review: DTrace probes (merged version) ver_03
alvherre@[EMAIL PROTECTED  2008-08-01 09:19:47 
Re: Review: DTrace probes (merged version) ver_03
alvherre@[EMAIL PROTECTED  2008-08-01 09:31:43 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-07-31 23:22:33 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-08-01 09:27:55 
Re: Review: DTrace probes (merged version) ver_03
Robert.Lor@[EMAIL PROTECT  2008-08-01 09:44:45 
Re: Review: DTrace probes (merged version) ver_03
gsmith@[EMAIL PROTECTED]   2008-08-01 15:18:01 
Re: Review: DTrace probes (merged version) ver_03
alvherre@[EMAIL PROTECTED  2008-08-01 16:01:37 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Fri Dec 5 9:13:46 CST 2008.