mirror of
https://github.com/postgres/postgres.git
synced 2025-08-21 10:42:50 +03:00
DTrace support, with a small initial set of probes
by Robert Lor
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
#
|
||||
# Copyright (c) 1994, Regents of the University of California
|
||||
#
|
||||
# $PostgreSQL: pgsql/src/backend/Makefile,v 1.116 2006/06/22 23:50:35 tgl Exp $
|
||||
# $PostgreSQL: pgsql/src/backend/Makefile,v 1.117 2006/07/24 16:32:44 petere Exp $
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
@@ -19,7 +19,11 @@ DIRS := access bootstrap catalog parser commands executor lib libpq \
|
||||
|
||||
SUBSYSOBJS := $(DIRS:%=%/SUBSYS.o)
|
||||
|
||||
OBJS := $(SUBSYSOBJS) $(top_builddir)/src/port/libpgport_srv.a
|
||||
ifeq ($(enable_dtrace), yes)
|
||||
LOCALOBJS += utils/probes.o
|
||||
endif
|
||||
|
||||
OBJS = $(SUBSYSOBJS) $(LOCALOBJS) $(top_builddir)/src/port/libpgport_srv.a
|
||||
|
||||
# We put libpgport into OBJS, so remove it from LIBS
|
||||
LIBS := $(filter-out -lpgport, $(LIBS))
|
||||
@@ -135,6 +139,10 @@ $(top_builddir)/src/include/utils/fmgroids.h: utils/fmgroids.h
|
||||
$(LN_S) ../../../$(subdir)/utils/fmgroids.h .
|
||||
|
||||
|
||||
utils/probes.o: utils/probes.d $(SUBSYSOBJS)
|
||||
$(DTRACE) $(DTRACEFLAGS) -G -s $^
|
||||
|
||||
|
||||
##########################################################################
|
||||
|
||||
distprep:
|
||||
@@ -220,7 +228,7 @@ endif
|
||||
##########################################################################
|
||||
|
||||
clean:
|
||||
rm -f postgres$(X) $(POSTGRES_IMP) \
|
||||
rm -f $(LOCALOBJS) postgres$(X) $(POSTGRES_IMP) \
|
||||
$(top_srcdir)/src/include/parser/parse.h \
|
||||
$(top_builddir)/src/include/utils/fmgroids.h
|
||||
ifeq ($(PORTNAME), cygwin)
|
||||
|
@@ -10,7 +10,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.223 2006/07/14 14:52:17 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.224 2006/07/24 16:32:44 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1384,6 +1384,8 @@ StartTransaction(void)
|
||||
|
||||
XactLockTableInsert(s->transactionId);
|
||||
|
||||
PG_TRACE1 (transaction__start, s->transactionId);
|
||||
|
||||
/*
|
||||
* set transaction_timestamp() (a/k/a now()). We want this to be the
|
||||
* same as the first command's statement_timestamp(), so don't do a
|
||||
@@ -1535,6 +1537,8 @@ CommitTransaction(void)
|
||||
LWLockRelease(ProcArrayLock);
|
||||
}
|
||||
|
||||
PG_TRACE1 (transaction__commit, s->transactionId);
|
||||
|
||||
/*
|
||||
* This is all post-commit cleanup. Note that if an error is raised here,
|
||||
* it's too late to abort the transaction. This should be just
|
||||
@@ -1931,6 +1935,8 @@ AbortTransaction(void)
|
||||
LWLockRelease(ProcArrayLock);
|
||||
}
|
||||
|
||||
PG_TRACE1 (transaction__abort, s->transactionId);
|
||||
|
||||
/*
|
||||
* Post-abort cleanup. See notes in CommitTransaction() concerning
|
||||
* ordering.
|
||||
|
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.168 2006/07/23 23:08:46 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lock.c,v 1.169 2006/07/24 16:32:45 petere Exp $
|
||||
*
|
||||
* NOTES
|
||||
* A lock table is a shared memory hash table. When
|
||||
@@ -796,8 +796,13 @@ LockAcquire(const LOCKTAG *locktag,
|
||||
/*
|
||||
* Sleep till someone wakes me up.
|
||||
*/
|
||||
|
||||
PG_TRACE2(lock__startwait, locktag->locktag_field2, lockmode);
|
||||
|
||||
WaitOnLock(locallock, owner);
|
||||
|
||||
PG_TRACE2(lock__endwait, locktag->locktag_field2, lockmode);
|
||||
|
||||
/*
|
||||
* NOTE: do not do any material change of state between here and
|
||||
* return. All required changes in locktable state must have been
|
||||
|
@@ -15,7 +15,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lwlock.c,v 1.41 2006/07/23 03:07:58 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/storage/lmgr/lwlock.c,v 1.42 2006/07/24 16:32:45 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -420,6 +420,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
|
||||
block_counts[lockid]++;
|
||||
#endif
|
||||
|
||||
PG_TRACE2(lwlock__startwait, lockid, mode);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
/* "false" means cannot accept cancel/die interrupt here. */
|
||||
@@ -429,6 +431,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
|
||||
extraWaits++;
|
||||
}
|
||||
|
||||
PG_TRACE2(lwlock__endwait, lockid, mode);
|
||||
|
||||
LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");
|
||||
|
||||
/* Now loop back and try to acquire lock again. */
|
||||
@@ -438,6 +442,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
|
||||
/* We are done updating shared state of the lock itself. */
|
||||
SpinLockRelease(&lock->mutex);
|
||||
|
||||
PG_TRACE2(lwlock__acquire, lockid, mode);
|
||||
|
||||
/* Add lock to list of locks held by this backend */
|
||||
held_lwlocks[num_held_lwlocks++] = lockid;
|
||||
|
||||
@@ -507,11 +513,13 @@ LWLockConditionalAcquire(LWLockId lockid, LWLockMode mode)
|
||||
/* Failed to get lock, so release interrupt holdoff */
|
||||
RESUME_INTERRUPTS();
|
||||
LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed");
|
||||
PG_TRACE2(lwlock__condacquire__fail, lockid, mode);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Add lock to list of locks held by this backend */
|
||||
held_lwlocks[num_held_lwlocks++] = lockid;
|
||||
PG_TRACE2(lwlock__condacquire, lockid, mode);
|
||||
}
|
||||
|
||||
return !mustwait;
|
||||
@@ -596,6 +604,8 @@ LWLockRelease(LWLockId lockid)
|
||||
/* We are done updating shared state of the lock itself. */
|
||||
SpinLockRelease(&lock->mutex);
|
||||
|
||||
PG_TRACE1(lwlock__release, lockid);
|
||||
|
||||
/*
|
||||
* Awaken any waiters I removed from the queue.
|
||||
*/
|
||||
|
24
src/backend/utils/probes.d
Normal file
24
src/backend/utils/probes.d
Normal file
@@ -0,0 +1,24 @@
|
||||
/* ----------
|
||||
* DTrace probes for PostgreSQL backend
|
||||
*
|
||||
* Copyright (c) 2006, PostgreSQL Global Development Group
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/utils/probes.d,v 1.1 2006/07/24 16:32:45 petere Exp $
|
||||
* ----------
|
||||
*/
|
||||
|
||||
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);
|
||||
|
||||
};
|
Reference in New Issue
Block a user