Commit e9b49690 authored by Peter Eisentraut's avatar Peter Eisentraut

DTrace support, with a small initial set of probes

by Robert Lor
parent 9dc34b5f
...@@ -314,7 +314,7 @@ ac_includes_default="\ ...@@ -314,7 +314,7 @@ ac_includes_default="\
# include <unistd.h> # include <unistd.h>
#endif" #endif"
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS configure_args build build_cpu build_vendor build_os host host_cpu host_vendor host_os PORTNAME docdir enable_nls WANTED_LANGUAGES default_port enable_shared enable_rpath enable_debug CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP GCC TAS autodepend INCLUDES enable_thread_safety with_tcl with_perl with_python with_krb5 krb_srvtab with_pam with_ldap with_bonjour with_openssl with_zlib EGREP ELF_SYS LDFLAGS_SL AWK FLEX FLEXFLAGS LN_S LD with_gnu_ld ld_R_works RANLIB ac_ct_RANLIB TAR STRIP ac_ct_STRIP STRIP_STATIC_LIB STRIP_SHARED_LIB YACC YFLAGS PERL perl_archlibexp perl_privlibexp perl_useshrplib perl_embed_ldflags PYTHON python_version python_configdir python_includespec python_libdir python_libspec python_additional_libs HAVE_IPV6 LIBOBJS acx_pthread_config PTHREAD_CC PTHREAD_LIBS PTHREAD_CFLAGS HAVE_POSIX_SIGNALS MSGFMT MSGMERGE XGETTEXT localedir TCLSH TCL_CONFIG_SH TCL_INCLUDE_SPEC TCL_LIB_FILE TCL_LIBS TCL_LIB_SPEC TCL_SHARED_BUILD TCL_SHLIB_LD_LIBS NSGMLS JADE have_docbook DOCBOOKSTYLE COLLATEINDEX SGMLSPL vpath_build LTLIBOBJS' ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS configure_args build build_cpu build_vendor build_os host host_cpu host_vendor host_os PORTNAME docdir enable_nls WANTED_LANGUAGES default_port enable_shared enable_rpath enable_debug DTRACE DTRACEFLAGS enable_dtrace CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP GCC TAS autodepend INCLUDES enable_thread_safety with_tcl with_perl with_python with_krb5 krb_srvtab with_pam with_ldap with_bonjour with_openssl with_zlib EGREP ELF_SYS LDFLAGS_SL AWK FLEX FLEXFLAGS LN_S LD with_gnu_ld ld_R_works RANLIB ac_ct_RANLIB TAR STRIP ac_ct_STRIP STRIP_STATIC_LIB STRIP_SHARED_LIB YACC YFLAGS PERL perl_archlibexp perl_privlibexp perl_useshrplib perl_embed_ldflags PYTHON python_version python_configdir python_includespec python_libdir python_libspec python_additional_libs HAVE_IPV6 LIBOBJS acx_pthread_config PTHREAD_CC PTHREAD_LIBS PTHREAD_CFLAGS HAVE_POSIX_SIGNALS MSGFMT MSGMERGE XGETTEXT localedir TCLSH TCL_CONFIG_SH TCL_INCLUDE_SPEC TCL_LIB_FILE TCL_LIBS TCL_LIB_SPEC TCL_SHARED_BUILD TCL_SHLIB_LD_LIBS NSGMLS JADE have_docbook DOCBOOKSTYLE COLLATEINDEX SGMLSPL vpath_build LTLIBOBJS'
ac_subst_files='' ac_subst_files=''
# Initialize some variables set by options. # Initialize some variables set by options.
...@@ -865,6 +865,7 @@ Optional Features: ...@@ -865,6 +865,7 @@ Optional Features:
--disable-rpath do not embed shared library search path in executables --disable-rpath do not embed shared library search path in executables
--disable-spinlocks do not use spinlocks --disable-spinlocks do not use spinlocks
--enable-debug build with debugging symbols (-g) --enable-debug build with debugging symbols (-g)
--enable-dtrace build with DTrace support
--enable-depend turn on automatic dependency tracking --enable-depend turn on automatic dependency tracking
--enable-cassert enable assertion checks (for debugging) --enable-cassert enable assertion checks (for debugging)
--enable-thread-safety make client libraries thread-safe --enable-thread-safety make client libraries thread-safe
...@@ -1946,6 +1947,82 @@ fi; ...@@ -1946,6 +1947,82 @@ fi;
#
# DTrace
#
# Check whether --enable-dtrace or --disable-dtrace was given.
if test "${enable_dtrace+set}" = set; then
enableval="$enable_dtrace"
case $enableval in
yes)
cat >>confdefs.h <<\_ACEOF
#define ENABLE_DTRACE 1
_ACEOF
for ac_prog in dtrace
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_DTRACE+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$DTRACE"; then
ac_cv_prog_DTRACE="$DTRACE" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_DTRACE="$ac_prog"
echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
fi
fi
DTRACE=$ac_cv_prog_DTRACE
if test -n "$DTRACE"; then
echo "$as_me:$LINENO: result: $DTRACE" >&5
echo "${ECHO_T}$DTRACE" >&6
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
test -n "$DTRACE" && break
done
;;
no)
:
;;
*)
{ { echo "$as_me:$LINENO: error: no argument expected for --enable-dtrace option" >&5
echo "$as_me: error: no argument expected for --enable-dtrace option" >&2;}
{ (exit 1); exit 1; }; }
;;
esac
else
enable_dtrace=no
fi;
# #
# C compiler # C compiler
# #
...@@ -22759,6 +22836,7 @@ enable_shared) ;; ...@@ -22759,6 +22836,7 @@ enable_shared) ;;
enable_rpath) ;; enable_rpath) ;;
enable_spinlocks) ;; enable_spinlocks) ;;
enable_debug) ;; enable_debug) ;;
enable_dtrace) ;;
with_CC) ;; with_CC) ;;
enable_depend) ;; enable_depend) ;;
enable_cassert) ;; enable_cassert) ;;
...@@ -23431,6 +23509,9 @@ s,@default_port@,$default_port,;t t ...@@ -23431,6 +23509,9 @@ s,@default_port@,$default_port,;t t
s,@enable_shared@,$enable_shared,;t t s,@enable_shared@,$enable_shared,;t t
s,@enable_rpath@,$enable_rpath,;t t s,@enable_rpath@,$enable_rpath,;t t
s,@enable_debug@,$enable_debug,;t t s,@enable_debug@,$enable_debug,;t t
s,@DTRACE@,$DTRACE,;t t
s,@DTRACEFLAGS@,$DTRACEFLAGS,;t t
s,@enable_dtrace@,$enable_dtrace,;t t
s,@CC@,$CC,;t t s,@CC@,$CC,;t t
s,@CFLAGS@,$CFLAGS,;t t s,@CFLAGS@,$CFLAGS,;t t
s,@LDFLAGS@,$LDFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t
......
dnl Process this file with autoconf to produce a configure script. dnl Process this file with autoconf to produce a configure script.
dnl $PostgreSQL: pgsql/configure.in,v 1.468 2006/07/11 16:14:50 tgl Exp $ dnl $PostgreSQL: pgsql/configure.in,v 1.469 2006/07/24 16:32:44 petere Exp $
dnl dnl
dnl Developers, please strive to achieve this order: dnl Developers, please strive to achieve this order:
dnl dnl
...@@ -205,6 +205,17 @@ PGAC_ARG_BOOL(enable, debug, no, ...@@ -205,6 +205,17 @@ PGAC_ARG_BOOL(enable, debug, no,
[ --enable-debug build with debugging symbols (-g)]) [ --enable-debug build with debugging symbols (-g)])
AC_SUBST(enable_debug) AC_SUBST(enable_debug)
#
# DTrace
#
PGAC_ARG_BOOL(enable, dtrace, no,
[ --enable-dtrace build with DTrace support],
[AC_DEFINE([ENABLE_DTRACE], 1,
[Define to 1 to enable DTrace support. (--enable-dtrace)])
AC_CHECK_PROGS(DTRACE, dtrace)
AC_SUBST(DTRACEFLAGS)])
AC_SUBST(enable_dtrace)
# #
# C compiler # C compiler
# #
......
<!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.258 2006/06/18 15:38:35 petere Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/installation.sgml,v 1.259 2006/07/24 16:32:44 petere Exp $ -->
<chapter id="installation"> <chapter id="installation">
<title><![%standalone-include[<productname>PostgreSQL</>]]> <title><![%standalone-include[<productname>PostgreSQL</>]]>
...@@ -1007,6 +1007,17 @@ su - postgres ...@@ -1007,6 +1007,17 @@ su - postgres
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><option>--enable-dtrace</option></term>
<listitem>
<para>
Compiles with support for the dynamic tracing tool DTrace.
Operating system support for DTrace is currently only
available in Solaris.
</para>
</listitem>
</varlistentry>
</variablelist> </variablelist>
</para> </para>
......
# -*-makefile-*- # -*-makefile-*-
# $PostgreSQL: pgsql/src/Makefile.global.in,v 1.224 2006/07/21 22:37:37 petere Exp $ # $PostgreSQL: pgsql/src/Makefile.global.in,v 1.225 2006/07/24 16:32:44 petere Exp $
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# All PostgreSQL makefiles include this file and use the variables it sets, # All PostgreSQL makefiles include this file and use the variables it sets,
...@@ -157,6 +157,7 @@ enable_shared = @enable_shared@ ...@@ -157,6 +157,7 @@ enable_shared = @enable_shared@
enable_rpath = @enable_rpath@ enable_rpath = @enable_rpath@
enable_nls = @enable_nls@ enable_nls = @enable_nls@
enable_debug = @enable_debug@ enable_debug = @enable_debug@
enable_dtrace = @enable_dtrace@
enable_thread_safety = @enable_thread_safety@ enable_thread_safety = @enable_thread_safety@
python_includespec = @python_includespec@ python_includespec = @python_includespec@
...@@ -212,6 +213,8 @@ YACC = @YACC@ ...@@ -212,6 +213,8 @@ YACC = @YACC@
YFLAGS = @YFLAGS@ YFLAGS = @YFLAGS@
FLEX = @FLEX@ FLEX = @FLEX@
FLEXFLAGS = @FLEXFLAGS@ $(LFLAGS) FLEXFLAGS = @FLEXFLAGS@ $(LFLAGS)
DTRACE = @DTRACE@
DTRACEFLAGS = @DTRACEFLAGS@
# Linking # Linking
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# #
# Copyright (c) 1994, Regents of the University of California # 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 \ ...@@ -19,7 +19,11 @@ DIRS := access bootstrap catalog parser commands executor lib libpq \
SUBSYSOBJS := $(DIRS:%=%/SUBSYS.o) 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 # We put libpgport into OBJS, so remove it from LIBS
LIBS := $(filter-out -lpgport, $(LIBS)) LIBS := $(filter-out -lpgport, $(LIBS))
...@@ -135,6 +139,10 @@ $(top_builddir)/src/include/utils/fmgroids.h: utils/fmgroids.h ...@@ -135,6 +139,10 @@ $(top_builddir)/src/include/utils/fmgroids.h: utils/fmgroids.h
$(LN_S) ../../../$(subdir)/utils/fmgroids.h . $(LN_S) ../../../$(subdir)/utils/fmgroids.h .
utils/probes.o: utils/probes.d $(SUBSYSOBJS)
$(DTRACE) $(DTRACEFLAGS) -G -s $^
########################################################################## ##########################################################################
distprep: distprep:
...@@ -220,7 +228,7 @@ endif ...@@ -220,7 +228,7 @@ endif
########################################################################## ##########################################################################
clean: clean:
rm -f postgres$(X) $(POSTGRES_IMP) \ rm -f $(LOCALOBJS) postgres$(X) $(POSTGRES_IMP) \
$(top_srcdir)/src/include/parser/parse.h \ $(top_srcdir)/src/include/parser/parse.h \
$(top_builddir)/src/include/utils/fmgroids.h $(top_builddir)/src/include/utils/fmgroids.h
ifeq ($(PORTNAME), cygwin) ifeq ($(PORTNAME), cygwin)
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -1384,6 +1384,8 @@ StartTransaction(void)
XactLockTableInsert(s->transactionId); XactLockTableInsert(s->transactionId);
PG_TRACE1 (transaction__start, s->transactionId);
/* /*
* set transaction_timestamp() (a/k/a now()). We want this to be the * 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 * same as the first command's statement_timestamp(), so don't do a
...@@ -1535,6 +1537,8 @@ CommitTransaction(void) ...@@ -1535,6 +1537,8 @@ CommitTransaction(void)
LWLockRelease(ProcArrayLock); LWLockRelease(ProcArrayLock);
} }
PG_TRACE1 (transaction__commit, s->transactionId);
/* /*
* This is all post-commit cleanup. Note that if an error is raised here, * 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 * it's too late to abort the transaction. This should be just
...@@ -1931,6 +1935,8 @@ AbortTransaction(void) ...@@ -1931,6 +1935,8 @@ AbortTransaction(void)
LWLockRelease(ProcArrayLock); LWLockRelease(ProcArrayLock);
} }
PG_TRACE1 (transaction__abort, s->transactionId);
/* /*
* Post-abort cleanup. See notes in CommitTransaction() concerning * Post-abort cleanup. See notes in CommitTransaction() concerning
* ordering. * ordering.
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 * NOTES
* A lock table is a shared memory hash table. When * A lock table is a shared memory hash table. When
...@@ -796,8 +796,13 @@ LockAcquire(const LOCKTAG *locktag, ...@@ -796,8 +796,13 @@ LockAcquire(const LOCKTAG *locktag,
/* /*
* Sleep till someone wakes me up. * Sleep till someone wakes me up.
*/ */
PG_TRACE2(lock__startwait, locktag->locktag_field2, lockmode);
WaitOnLock(locallock, owner); WaitOnLock(locallock, owner);
PG_TRACE2(lock__endwait, locktag->locktag_field2, lockmode);
/* /*
* NOTE: do not do any material change of state between here and * NOTE: do not do any material change of state between here and
* return. All required changes in locktable state must have been * return. All required changes in locktable state must have been
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * 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) ...@@ -420,6 +420,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
block_counts[lockid]++; block_counts[lockid]++;
#endif #endif
PG_TRACE2(lwlock__startwait, lockid, mode);
for (;;) for (;;)
{ {
/* "false" means cannot accept cancel/die interrupt here. */ /* "false" means cannot accept cancel/die interrupt here. */
...@@ -429,6 +431,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode) ...@@ -429,6 +431,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
extraWaits++; extraWaits++;
} }
PG_TRACE2(lwlock__endwait, lockid, mode);
LOG_LWDEBUG("LWLockAcquire", lockid, "awakened"); LOG_LWDEBUG("LWLockAcquire", lockid, "awakened");
/* Now loop back and try to acquire lock again. */ /* Now loop back and try to acquire lock again. */
...@@ -438,6 +442,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode) ...@@ -438,6 +442,8 @@ LWLockAcquire(LWLockId lockid, LWLockMode mode)
/* We are done updating shared state of the lock itself. */ /* We are done updating shared state of the lock itself. */
SpinLockRelease(&lock->mutex); SpinLockRelease(&lock->mutex);
PG_TRACE2(lwlock__acquire, lockid, mode);
/* Add lock to list of locks held by this backend */ /* Add lock to list of locks held by this backend */
held_lwlocks[num_held_lwlocks++] = lockid; held_lwlocks[num_held_lwlocks++] = lockid;
...@@ -507,11 +513,13 @@ LWLockConditionalAcquire(LWLockId lockid, LWLockMode mode) ...@@ -507,11 +513,13 @@ LWLockConditionalAcquire(LWLockId lockid, LWLockMode mode)
/* Failed to get lock, so release interrupt holdoff */ /* Failed to get lock, so release interrupt holdoff */
RESUME_INTERRUPTS(); RESUME_INTERRUPTS();
LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed"); LOG_LWDEBUG("LWLockConditionalAcquire", lockid, "failed");
PG_TRACE2(lwlock__condacquire__fail, lockid, mode);
} }
else else
{ {
/* Add lock to list of locks held by this backend */ /* Add lock to list of locks held by this backend */
held_lwlocks[num_held_lwlocks++] = lockid; held_lwlocks[num_held_lwlocks++] = lockid;
PG_TRACE2(lwlock__condacquire, lockid, mode);
} }
return !mustwait; return !mustwait;
...@@ -596,6 +604,8 @@ LWLockRelease(LWLockId lockid) ...@@ -596,6 +604,8 @@ LWLockRelease(LWLockId lockid)
/* We are done updating shared state of the lock itself. */ /* We are done updating shared state of the lock itself. */
SpinLockRelease(&lock->mutex); SpinLockRelease(&lock->mutex);
PG_TRACE1(lwlock__release, lockid);
/* /*
* Awaken any waiters I removed from the queue. * Awaken any waiters I removed from the queue.
*/ */
......
/* ----------
* 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);
};
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/c.h,v 1.206 2006/07/06 01:55:51 momjian Exp $ * $PostgreSQL: pgsql/src/include/c.h,v 1.207 2006/07/24 16:32:45 petere Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
#include "pg_config_os.h" /* must be before any system header files */ #include "pg_config_os.h" /* must be before any system header files */
#endif #endif
#include "postgres_ext.h" #include "postgres_ext.h"
#include "pg_trace.h"
#if defined(_MSC_VER) || defined(__BORLANDC__) #if defined(_MSC_VER) || defined(__BORLANDC__)
#define WIN32_ONLY_COMPILER #define WIN32_ONLY_COMPILER
......
...@@ -36,6 +36,9 @@ ...@@ -36,6 +36,9 @@
/* Define to the default TCP port number as a string constant. */ /* Define to the default TCP port number as a string constant. */
#undef DEF_PGPORT_STR #undef DEF_PGPORT_STR
/* Define to 1 to enable DTrace support. (--enable-dtrace) */
#undef ENABLE_DTRACE
/* Define to 1 if you want National Language Support. (--enable-nls) */ /* Define to 1 if you want National Language Support. (--enable-nls) */
#undef ENABLE_NLS #undef ENABLE_NLS
......
/* ----------
* pg_trace.h
*
* Definitions for the PostgreSQL tracing framework
*
* Copyright (c) 2006, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/include/pg_trace.h,v 1.1 2006/07/24 16:32:45 petere Exp $
* ----------
*/
#ifndef PG_TRACE_H
#define PG_TRACE_H
#ifdef ENABLE_DTRACE
#include <sys/sdt.h>
/*
* The PG_TRACE macros are mapped to the appropriate macros used by DTrace.
*
* Only one DTrace provider called "postgresql" will be used for PostgreSQL,
* so the name is hard-coded here to avoid having to specify it in the
* source code.
*/
#define PG_TRACE(name) \
DTRACE_PROBE(postgresql, name)
#define PG_TRACE1(name, arg1) \
DTRACE_PROBE1(postgresql, name, arg1)
#define PG_TRACE2(name, arg1, arg2) \
DTRACE_PROBE2(postgresql, name, arg1, arg2)
#define PG_TRACE3(name, arg1, arg2, arg3) \
DTRACE_PROBE3(postgresql, name, arg1, arg2, arg3)
#define PG_TRACE4(name, arg1, arg2, arg3, arg4) \
DTRACE_PROBE4(postgresql, name, arg1, arg2, arg3, arg4)
#define PG_TRACE5(name, arg1, arg2, arg3, arg4, arg5) \
DTRACE_PROBE5(postgresql, name, arg1, arg2, arg3, arg4, arg5)
#else /* not ENABLE_DTRACE */
/*
* Unless DTrace is explicitly enabled with --enable-dtrace, the PG_TRACE
* macros will expand to no-ops.
*/
#define PG_TRACE(name)
#define PG_TRACE1(name, arg1)
#define PG_TRACE2(name, arg1, arg2)
#define PG_TRACE3(name, arg1, arg2, arg3)
#define PG_TRACE4(name, arg1, arg2, arg3, arg4)
#define PG_TRACE5(name, arg1, arg2, arg3, arg4, arg5)
#endif /* not ENABLE_DTRACE */
#endif /* PG_TRACE_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment