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 > New DTrace prob...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 9 Topic 9383 of 10965
Post > Topic >>

New DTrace probes proposal

by Robert.Lor@[EMAIL PROTECTED] (Robert Lor) May 17, 2008 at 09:33 PM

This is a multi-part message in MIME format.

--Boundary_(ID_n1YhCaUK+/i6d83dk+PHBg)
Content-type: text/plain; format=flowed; charset=ISO-8859-1
Content-transfer-encoding: 7BIT

(Resending since it didn't work the first time. Not sure if attaching a 
tar file was the culprit.)

I'd like to propose adding the following probes (some of which came from 
Simon) to 8.4.

I think these probe provide very useful data. Although some of the data 
can be collected now, the main advantages with probes, among others, are 
(1) they are always available and can be enabled only when needed 
especially in production (2) different combinations of probes can be 
used together to collect interesting data.

They work on OS X Leopard & Solaris now, and hopefully on FreeBSD soon.

Preliminary patch attached along with sample DTrace scripts.

-Robert

---------------

* Probes to measure query time
query-parse-start (int, char *)
query-parse-done (int, char *)
query-plan-start ()
query-plan-done ()
query-execute-start ()
query-execute-done ()
query-statement-start (int, char *)
query-statement-done (int, char *)

* Probes to measure dirty buffer writes by the backend because bgwriter 
is not effective
dirty-buffer-write-start (int, int, int, int)
dirty-buffer-write-done (int, int, int, int)

* Probes to measure physical writes from the shared buffer
buffer-write-start (int, int, int, int)
buffer-write-done (int, int, int, int, int)

* Probes to measure reads of a relation from a particular buffer block
buffer-read-start (int, int, int, int, int)
buffer-read-done (int, int, int, int, int, int)

* Probes to measure the effectiveness of buffer caching
buffer-hit ()
buffer-miss ()

* Probes to measure I/O time because wal_buffers is too small
wal-buffer-write-start ()
wal-buffer-write-done ()

* Probes to measure checkpoint stats such as running time, buffers 
written, xlog files added, removed, recycled, etc
checkpoint-start (int)
checkpoint-done (int, int, int, int, int)

* Probes to measure Idle in Transaction and client/network time
idle-transaction-start (int, int)
idle-transaction-done ()

* Probes to measure sort time
sort-start (int, int, int, int, int)
sort-done (int, long)

* Probes to determine whether or not the deadlock detector has found a 
deadlock
deadlock-found ()
deadlock-notfound (int)

* Probes to measure reads/writes by block numbers and relations
smgr-read-start (int, int,  int, int)
smgr-read-end (int, int,  int, int, int, int)
smgr-write-start (int, int, int, int)
smgr-write-end (int, int, int, int, int, int)




--Boundary_(ID_n1YhCaUK+/i6d83dk+PHBg)
Content-type: text/x-patch; name=new-probes.patch
Content-transfer-encoding: 7BIT
Content-disposition: inline; filename=new-probes.patch

Index: backend/access/transam/xlog.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/xlog.c,v
retrieving revision 1.295
diff -u -3 -p -r1.295 xlog.c
--- backend/access/transam/xlog.c	25 Mar 2008 22:42:42 -0000	1.295
+++ backend/access/transam/xlog.c	16 May 2008 18:37:22 -0000
@[EMAIL PROTECTED]
 -50,6 +50,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]
 -1258,12 +1259,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]
 -5665,6 +5668,8 @[EMAIL PROTECTED]
 CreateCheckPoint(int flags)
 	MemSet(&CheckpointStats, 0, sizeof(CheckpointStats));
 	CheckpointStats.ckpt_start_t = GetCurrentTimestamp();
 
+	TRACE_POSTGRESQL_CHECKPOINT_START(flags);
+
 	/*
 	 * Use a critical section to force system panic if we have trouble.
 	 */
@[EMAIL PROTECTED]
 -5726,6 +5731,7 @[EMAIL PROTECTED]
 CreateCheckPoint(int flags)
 			LWLockRelease(WALInsertLock);
 			LWLockRelease(CheckpointLock);
 			END_CRIT_SECTION();
+			TRACE_POSTGRESQL_CHECKPOINT_DONE(UINT_MAX,0,0,0,UINT_MAX);
 			return;
 		}
 	}
@[EMAIL PROTECTED]
 -5945,6 +5951,11 @[EMAIL PROTECTED]
 CreateCheckPoint(int flags)
 	if (log_checkpoints)
 		LogCheckpointEnd();
 
+	TRACE_POSTGRESQL_CHECKPOINT_DONE(CheckpointStats.ckpt_bufs_written,
+				NBuffers, CheckpointStats.ckpt_segs_added,
+				CheckpointStats.ckpt_segs_removed,
+				CheckpointStats.ckpt_segs_recycled);
+
 	LWLockRelease(CheckpointLock);
 }
 
Index: backend/storage/buffer/bufmgr.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v
retrieving revision 1.228
diff -u -3 -p -r1.228 bufmgr.c
--- backend/storage/buffer/bufmgr.c	1 Jan 2008 19:45:51 -0000	1.228
+++ backend/storage/buffer/bufmgr.c	16 May 2008 18:37:22 -0000
@[EMAIL PROTECTED]
 -42,6 +42,7 @[EMAIL PROTECTED]
 #include "storage/smgr.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]
 -171,6 +172,7 @[EMAIL PROTECTED]
 ReadBuffer_common(Relation reln, BlockNu
 	if (i***tend)
 		blockNum = smgrnblocks(reln->rd_smgr);
 
+	TRACE_POSTGRESQL_BUFFER_READ_START(blockNum, reln->rd_node.spcNode,
reln->rd_node.dbNode, reln->rd_node.relNode, isLocalBuf);
 	pgstat_count_buffer_read(reln);
 
 	if (isLocalBuf)
@[EMAIL PROTECTED]
 -200,12 +202,16 @[EMAIL PROTECTED]
 ReadBuffer_common(Relation reln, BlockNu
 	{
 		if (!i***tend)
 		{
+			TRACE_POSTGRESQL_BUFFER_HIT();
 			/* Just need to update stats before we exit */
 			pgstat_count_buffer_hit(reln);
 
 			if (VacuumCostActive)
 				VacuumCostBalance += VacuumCostPageHit;
 
+			TRACE_POSTGRESQL_BUFFER_READ_DONE(blockNum,
+				 reln->rd_node.spcNode, reln->rd_node.dbNode,
+				 reln->rd_node.relNode, isLocalBuf, found);
 			return BufferDescriptorGetBuffer(bufHdr);
 		}
 
@[EMAIL PROTECTED]
 -257,6 +263,7 @[EMAIL PROTECTED]
 ReadBuffer_common(Relation reln, BlockNu
 			} while (!StartBufferIO(bufHdr, true));
 		}
 	}
+	TRACE_POSTGRESQL_BUFFER_MISS();
 
 	/*
 	 * if we have gotten to this point, we have allocated a buffer for the
@[EMAIL PROTECTED]
 -324,6 +331,9 @[EMAIL PROTECTED]
 ReadBuffer_common(Relation reln, BlockNu
 	if (VacuumCostActive)
 		VacuumCostBalance += VacuumCostPageMiss;
 
+	TRACE_POSTGRESQL_BUFFER_READ_DONE(blockNum, reln->rd_node.spcNode,
+		reln->rd_node.dbNode, reln->rd_node.relNode, isLocalBuf, found);
+
 	return BufferDescriptorGetBuffer(bufHdr);
 }
 
@[EMAIL PROTECTED]
 -466,6 +476,11 @[EMAIL PROTECTED]
 BufferAlloc(Relation reln,
 			 * happens to be trying to split the page the first one got from
 			 * StrategyGetBuffer.)
 			 */
+
+			TRACE_POSTGRESQL_DIRTY_BUFFER_WRITE_START(blockNum,
+			  reln->rd_node.spcNode, reln->rd_node.dbNode,
+			  reln->rd_node.relNode);
+
 			if (LWLockConditionalAcquire(buf->content_lock, LW_SHARED))
 			{
 				/*
@[EMAIL PROTECTED]
 -488,6 +503,11 @[EMAIL PROTECTED]
 BufferAlloc(Relation reln,
 				/* OK, do the I/O */
 				FlushBuffer(buf, NULL);
 				LWLockRelease(buf->content_lock);
+
+				TRACE_POSTGRESQL_DIRTY_BUFFER_WRITE_DONE(
+				  blockNum, reln->rd_node.spcNode,
+				  reln->rd_node.dbNode, reln->rd_node.relNode,
+				  (oldFlags & BM_HINT_BITS_TEST));
 			}
 			else
 			{
@[EMAIL PROTECTED]
 -1734,6 +1754,10 @[EMAIL PROTECTED]
 FlushBuffer(volatile BufferDesc *buf, SM
 	buf->flags &= ~BM_JUST_DIRTIED;
 	UnlockBufHdr(buf);
 
+	TRACE_POSTGRESQL_BUFFER_WRITE_START(buf->tag.blockNum,
+		 reln->smgr_rnode.spcNode, reln->smgr_rnode.dbNode,
+		 reln->smgr_rnode.relNode);
+
 	smgrwrite(reln,
 			  buf->tag.blockNum,
 			  (char *) BufHdrGetBlock(buf),
@[EMAIL PROTECTED]
 -1741,6 +1765,10 @[EMAIL PROTECTED]
 FlushBuffer(volatile BufferDesc *buf, SM
 
 	BufferFlushCount++;
 
+	TRACE_POSTGRESQL_BUFFER_WRITE_DONE(buf->tag.blockNum,
+		 reln->smgr_rnode.spcNode, reln->smgr_rnode.dbNode,
+		 reln->smgr_rnode.relNode, (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]
 -2155,7 +2183,7 @[EMAIL PROTECTED]
 SetBufferCommitInfoNeedsSave(Buffer buff
 		Assert(bufHdr->refcount > 0);
 		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);
 		UnlockBufHdr(bufHdr);
 	}
 }
@[EMAIL PROTECTED]
 -2492,7 +2520,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: 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
--- backend/storage/lmgr/deadlock.c	24 Mar 2008 18:22:36 -0000	1.53
+++ backend/storage/lmgr/deadlock.c	16 May 2008 18:37:23 -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: backend/storage/smgr/md.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/storage/smgr/md.c,v
retrieving revision 1.136
diff -u -3 -p -r1.136 md.c
--- backend/storage/smgr/md.c	10 Mar 2008 20:06:27 -0000	1.136
+++ backend/storage/smgr/md.c	16 May 2008 18:37:23 -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]
 -581,6 +582,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);
 
 #ifdef USE_SEGMENTED_FILES
@[EMAIL PROTECTED]
 -599,7 +602,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]
 -651,6 +658,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);
 
 #ifdef USE_SEGMENTED_FILES
@[EMAIL PROTECTED]
 -691,6 +700,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: backend/tcop/postgres.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/tcop/postgres.c,v
retrieving revision 1.547
diff -u -3 -p -r1.547 postgres.c
--- backend/tcop/postgres.c	26 Mar 2008 18:48:59 -0000	1.547
+++ backend/tcop/postgres.c	16 May 2008 18:37:24 -0000
@[EMAIL PROTECTED]
 -70,6 +70,7 @[EMAIL PROTECTED]
 #include "mb/pg_wchar.h"
 
 #include "pgstat.h"
+#include "pg_trace.h"
 
 extern int	optind;
 extern char *optarg;
@[EMAIL PROTECTED]
 -550,6 +551,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]
 -659,6 +662,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]
 -672,6 +677,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]
 -709,6 +716,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]
 -796,6 +804,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]
 -803,6 +812,8 @[EMAIL PROTECTED]
 exec_simple_query(const char *query_stri
 
 	pgstat_re****t_activity(query_string);
 
+	TRACE_POSTGRESQL_QUERY_STATEMENT_START(MyProcPid, query_string);
+
 	/*
 	 * We use save_log_statement_stats so ShowUsage doesn't re****t incorrect
 	 * results because ResetUsage wasn't called.
@[EMAIL PROTECTED]
 -1064,6 +1075,8 @[EMAIL PROTECTED]
 exec_simple_query(const char *query_stri
 	if (save_log_statement_stats)
 		ShowUsage("QUERY STATISTICS");
 
+	TRACE_POSTGRESQL_QUERY_STATEMENT_DONE(MyProcPid, query_string);
+
 	debug_query_string = NULL;
 }
 
@[EMAIL PROTECTED]
 -3484,6 +3497,7 @[EMAIL PROTECTED]
 PostgresMain(int argc, char *argv[], con
 		{
 			if (IsTransactionOrTransactionBlock())
 			{
+				TRACE_POSTGRESQL_IDLE_TRANSACTION_START(GetCurrentTransactionId(),
GetCurrentCommandId(false));
 				set_ps_display("idle in transaction", false);
 				pgstat_re****t_activity("<IDLE> in transaction");
 			}
@[EMAIL PROTECTED]
 -3513,6 +3527,8 @[EMAIL PROTECTED]
 PostgresMain(int argc, char *argv[], con
 		 */
 		firstchar = ReadCommand(&input_message);
 
+		TRACE_POSTGRESQL_IDLE_TRANSACTION_DONE();
+
 		/*
 		 * (4) disable async signal conditions again.
 		 */
Index: backend/tcop/pquery.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/tcop/pquery.c,v
retrieving revision 1.122
diff -u -3 -p -r1.122 pquery.c
--- backend/tcop/pquery.c	26 Mar 2008 18:48:59 -0000	1.122
+++ backend/tcop/pquery.c	16 May 2008 18:37:24 -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]
 -714,6 +715,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]
 -864,6 +867,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]
 -1234,6 +1239,8 @[EMAIL PROTECTED]
 ****talRunMulti(****tal ****tal, bool isTop
 			 */
 			PlannedStmt *pstmt = (PlannedStmt *) stmt;
 
+			TRACE_POSTGRESQL_QUERY_EXECUTE_START();
+
 			if (log_executor_stats)
 				ResetUsage();
 
@[EMAIL PROTECTED]
 -1254,6 +1261,8 @[EMAIL PROTECTED]
 ****talRunMulti(****tal ****tal, bool isTop
 
 			if (log_executor_stats)
 				ShowUsage("EXECUTOR STATISTICS");
+
+			TRACE_POSTGRESQL_QUERY_EXECUTE_DONE();
 		}
 		else
 		{
Index: 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
--- backend/utils/probes.d	2 Jan 2008 02:42:06 -0000	1.2
+++ backend/utils/probes.d	16 May 2008 18:37:24 -0000
@[EMAIL PROTECTED]
 -9,16 +9,60 @[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);
+	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);
+	probe idle__transaction__start(int, int);
+	probe idle__transaction__done();
+	probe wal__buffer__write__start();
+	probe wal__buffer__write__done();
+	probe query__parse__start(char *query_string);
+	probe query__parse__done();
+	probe query__plan__start();
+	probe query__plan__done();
+	probe query__execute__start();
+	probe query__execute__done();
+	probe query__statement__start(int pid, char *query_string);
+	probe query__statement__done(int pid, char *query_string);
+	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 dirty__buffer__write__start(int blockNum, int tablespaceOid,
+			int databaseOid, int relationOid);
+	probe dirty__buffer__write__done(int blockNum, int tablespaceOid,
+		 	int databaseOid, int relationOid, int i****ntBitsWrite);
+	probe buffer__write__start(int blockNum, int tablespaceOid,
+			int databaseOid, int relationOid);
+	probe buffer__write__done(int blockNum, int tablespaceOid,
+		 	int databaseOid, int relationOid, int i****ntBitsWrite);
+	probe buffer__hit();
+	probe buffer__miss();
+	probe deadlock__found();
+	probe deadlock__notfound(int);
+	probe checkpoint__start(int checkpointFlags);
+	probe checkpoint__done(int bufsWritten, int NBuffers, int segsAdded,
+			int segsRemoved, int segsRecycled);
+	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);
 
 };
Index: backend/utils/sort/tuplesort.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/sort/tuplesort.c,v
retrieving revision 1.83
diff -u -3 -p -r1.83 tuplesort.c
--- backend/utils/sort/tuplesort.c	17 Mar 2008 03:45:36 -0000	1.83
+++ backend/utils/sort/tuplesort.c	16 May 2008 18:37:25 -0000
@[EMAIL PROTECTED]
 -115,12 +115,18 @[EMAIL PROTECTED]
 #include "utils/pg_rusage.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(true) :
+			(state->allowedMem - state->availMem + 1023) / 1024));
+
+
 	MemoryContextSwitchTo(oldcontext);
 
 	/*
Index: include/storage/buf_internals.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/storage/buf_internals.h,v
retrieving revision 1.95
diff -u -3 -p -r1.95 buf_internals.h
--- include/storage/buf_internals.h	1 Jan 2008 19:45:58 -0000	1.95
+++ include/storage/buf_internals.h	16 May 2008 18:37:27 -0000
@[EMAIL PROTECTED]
 -36,6 +36,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_n1YhCaUK+/i6d83dk+PHBg)
Content-type: application/x-gzip; name=pg-dtrace-scripts.tar.gz
Content-transfer-encoding: BASE64
Content-disposition: inline; filename=pg-dtrace-scripts.tar.gz

H4sICAIVLkgAA3BnLWR0cmFjZS1zY3JpcHRzLnRhcgDtHGtz2zYyX61fgaqn
VvZYpihK8sW5tHEaT+uZ1m0Td9Kb9saFSEjmmCIZgrSi3vS/3+6CT5ESpZws
p63wQZKJxWJ3AewLS59oTx68daGdDgb0DW3xm37relc3jJ4xGPTgua73evqT
wcOT9uRJJEMewJSB54Wr4Or6iQ3DiJk63S6RD9dONBlOw5vQnoqbUSD4neXN
3BNrq3PUrL8+6Pdo/XW934fvJ+qR/qS7VSqWtL/5+n/6iRbJQJMj29WsMOCm
YB3Z0I4a7Ij9JPlEnLElW4T9y7etLxDu+taWTJqB7YeMACRDEBbeCoajmO2G
HvN5IG13csx8h7su/eKuxcR7YUah7bmIaewFTHDzlsGihGIq3PAEHmuNxqd+
wCdTzl4xz0dg9i6yRdho+J4MJ4GQ75x/6GdnZ+8iEcw7OJPo4LqGjf82DvwA
5h+3m28SnGesJX91m8fM9Py57cowaPNg0j08fNY4kMIZd74IJXtOpAOSqf+s
8cfKmSzPFQ0tGanBnCxuydQ/IjT74fz1m8urr+E5ogYqLKKinU7EOizBgsQk
WNSzsec43gzo0lfQA6KNGdfyo5CmTVlDVHnOMkxLuPv2/OqK2FuPu2UTqw0h
tsRGgm0TTi5+vvjqp+vL769ynHzQSnWRrsc+4asbHO7pJLixvS3r/Hyr0f+9
QVcn/d8bDgd9o4/63+gag73+30Gr1f+MkQVINgk8X1T5gfC9AM4jqnsZegEO
mnIXvoLPJfRyS5sFdihIqdsytE25tlY/goOMc3cQTabS19ABxZFlFX3wAjtM
L3LDX0D762CNgkmPPo3/AF7qacPZBlkcvBg5nnnnRlME7Ra6D17w+wkS8Uvz
/H5C7BJNTYSCriVK41kDBFBUG8ROdxkbJMIPk4AaWiUC6vlYZRB4Y9sRwATs
mLuOLpHiMIhcs50t3TEb4PyJ/v7VfV5s7DXSghsPEC80UOn5sS29K1nxA5V+
85qPHCF9OBlgAZqveMhHXNJv6sEfXyEpzZwdIJyccFos9/ECPhFpxgAMSrnK
VqOWrbfpgSrx9ZhsZRwgX7hrYtaSvVNi7Nrz2YCNAwHm2g2dOeOmKaQUFqMh
DMaMRCCXMUWsvCTIK4Jcg+6U2oSoCshfXTUFwrK2Kw+VB5Dsc7V1/2gcND5y
817bTjQLtiIK4sa8FebdQ7gBdfH/qT5I479TMJ1g//sG9m+flHLb2//6+G9x
i1SHfnR2lBuQDJAQ0UUQ5GGg53ph/NdoXgBiiMgSoDjAedgs3ktQdAgxmbSx
MmdNpQ6YN44nTUlqFkxXOW5IcQLBGVq3jDfpz6Em09ktTVBhyUqqqTdAdTNQ
mmmc6NBqsIGVgbop7AeFGieabTmCgv****wDqzv9gaKTn31D5H8PQT/fnfwdt
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

--Boundary_(ID_n1YhCaUK+/i6d83dk+PHBg)
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_n1YhCaUK+/i6d83dk+PHBg)--
 




 9 Posts in Topic:
New DTrace probes proposal
Robert.Lor@[EMAIL PROTECT  2008-05-17 21:33:01 
Re: New DTrace probes proposal
gsmith@[EMAIL PROTECTED]   2008-05-18 03:18:13 
Re: New DTrace probes proposal
Robert.Lor@[EMAIL PROTECT  2008-05-18 15:41:14 
Re: New DTrace probes proposal
robert@[EMAIL PROTECTED]   2008-05-18 22:14:40 
Re: New DTrace probes proposal
xzilla@[EMAIL PROTECTED]   2008-06-06 12:18:12 
Re: New DTrace probes proposal
Robert.Lor@[EMAIL PROTECT  2008-06-06 13:32:27 
Re: New DTrace probes proposal
tgl@[EMAIL PROTECTED] (T  2008-06-06 15:06:33 
Re: New DTrace probes proposal
xzilla@[EMAIL PROTECTED]   2008-06-06 17:01:06 
Re: New DTrace probes proposal
Robert.Lor@[EMAIL PROTECT  2008-06-06 16:58:51 

Post A Reply:
  Go here to Signup

AddThis Feed Button


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

Contact
tan12V112 Mon Dec 1 9:19:10 CST 2008.