Add support for additional DTrace probes.
Robert Lor
This commit is contained in:
parent
3df4fa6968
commit
227f817c1f
@ -41,7 +41,7 @@
|
|||||||
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2009, 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/backend/access/transam/slru.c,v 1.45 2009/01/01 17:23:36 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/access/transam/slru.c,v 1.46 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -57,6 +57,7 @@
|
|||||||
#include "storage/fd.h"
|
#include "storage/fd.h"
|
||||||
#include "storage/shmem.h"
|
#include "storage/shmem.h"
|
||||||
#include "miscadmin.h"
|
#include "miscadmin.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -372,6 +373,7 @@ SimpleLruReadPage(SlruCtl ctl, int pageno, bool write_ok,
|
|||||||
{
|
{
|
||||||
SlruShared shared = ctl->shared;
|
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 */
|
/* Outer loop handles restart if we must wait for someone else's I/O */
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -399,6 +401,7 @@ SimpleLruReadPage(SlruCtl ctl, int pageno, bool write_ok,
|
|||||||
}
|
}
|
||||||
/* Otherwise, it's ready to use */
|
/* Otherwise, it's ready to use */
|
||||||
SlruRecentlyUsed(shared, slotno);
|
SlruRecentlyUsed(shared, slotno);
|
||||||
|
TRACE_POSTGRESQL_SLRU_READPAGE_DONE(slotno);
|
||||||
return slotno;
|
return slotno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -446,6 +449,7 @@ SimpleLruReadPage(SlruCtl ctl, int pageno, bool write_ok,
|
|||||||
SlruReportIOError(ctl, pageno, xid);
|
SlruReportIOError(ctl, pageno, xid);
|
||||||
|
|
||||||
SlruRecentlyUsed(shared, slotno);
|
SlruRecentlyUsed(shared, slotno);
|
||||||
|
TRACE_POSTGRESQL_SLRU_READPAGE_DONE(slotno);
|
||||||
return slotno;
|
return slotno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -470,6 +474,8 @@ SimpleLruReadPage_ReadOnly(SlruCtl ctl, int pageno, TransactionId xid)
|
|||||||
SlruShared shared = ctl->shared;
|
SlruShared shared = ctl->shared;
|
||||||
int slotno;
|
int slotno;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_SLRU_READPAGE_READONLY((uintptr_t)ctl, pageno, xid);
|
||||||
|
|
||||||
/* Try to find the page while holding only shared lock */
|
/* Try to find the page while holding only shared lock */
|
||||||
LWLockAcquire(shared->ControlLock, LW_SHARED);
|
LWLockAcquire(shared->ControlLock, LW_SHARED);
|
||||||
|
|
||||||
@ -511,6 +517,8 @@ SimpleLruWritePage(SlruCtl ctl, int slotno, SlruFlush fdata)
|
|||||||
int pageno = shared->page_number[slotno];
|
int pageno = shared->page_number[slotno];
|
||||||
bool ok;
|
bool ok;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_SLRU_WRITEPAGE_START((uintptr_t)ctl, pageno, slotno);
|
||||||
|
|
||||||
/* If a write is in progress, wait for it to finish */
|
/* If a write is in progress, wait for it to finish */
|
||||||
while (shared->page_status[slotno] == SLRU_PAGE_WRITE_IN_PROGRESS &&
|
while (shared->page_status[slotno] == SLRU_PAGE_WRITE_IN_PROGRESS &&
|
||||||
shared->page_number[slotno] == pageno)
|
shared->page_number[slotno] == pageno)
|
||||||
@ -525,7 +533,10 @@ SimpleLruWritePage(SlruCtl ctl, int slotno, SlruFlush fdata)
|
|||||||
if (!shared->page_dirty[slotno] ||
|
if (!shared->page_dirty[slotno] ||
|
||||||
shared->page_status[slotno] != SLRU_PAGE_VALID ||
|
shared->page_status[slotno] != SLRU_PAGE_VALID ||
|
||||||
shared->page_number[slotno] != pageno)
|
shared->page_number[slotno] != pageno)
|
||||||
|
{
|
||||||
|
TRACE_POSTGRESQL_SLRU_WRITEPAGE_DONE();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mark the slot write-busy, and clear the dirtybit. After this point, a
|
* Mark the slot write-busy, and clear the dirtybit. After this point, a
|
||||||
@ -569,6 +580,8 @@ SimpleLruWritePage(SlruCtl ctl, int slotno, SlruFlush fdata)
|
|||||||
/* Now it's okay to ereport if we failed */
|
/* Now it's okay to ereport if we failed */
|
||||||
if (!ok)
|
if (!ok)
|
||||||
SlruReportIOError(ctl, pageno, InvalidTransactionId);
|
SlruReportIOError(ctl, pageno, InvalidTransactionId);
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_SLRU_WRITEPAGE_DONE();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -593,6 +606,8 @@ SlruPhysicalReadPage(SlruCtl ctl, int pageno, int slotno)
|
|||||||
|
|
||||||
SlruFileName(ctl, path, segno);
|
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
|
* 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
|
* commands to set the commit status of transactions whose bits are in
|
||||||
@ -607,6 +622,7 @@ SlruPhysicalReadPage(SlruCtl ctl, int pageno, int slotno)
|
|||||||
{
|
{
|
||||||
slru_errcause = SLRU_OPEN_FAILED;
|
slru_errcause = SLRU_OPEN_FAILED;
|
||||||
slru_errno = errno;
|
slru_errno = errno;
|
||||||
|
TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(false, slru_errcause, slru_errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -614,6 +630,7 @@ SlruPhysicalReadPage(SlruCtl ctl, int pageno, int slotno)
|
|||||||
(errmsg("file \"%s\" doesn't exist, reading as zeroes",
|
(errmsg("file \"%s\" doesn't exist, reading as zeroes",
|
||||||
path)));
|
path)));
|
||||||
MemSet(shared->page_buffer[slotno], 0, BLCKSZ);
|
MemSet(shared->page_buffer[slotno], 0, BLCKSZ);
|
||||||
|
TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(true, -1, -1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -622,6 +639,7 @@ SlruPhysicalReadPage(SlruCtl ctl, int pageno, int slotno)
|
|||||||
slru_errcause = SLRU_SEEK_FAILED;
|
slru_errcause = SLRU_SEEK_FAILED;
|
||||||
slru_errno = errno;
|
slru_errno = errno;
|
||||||
close(fd);
|
close(fd);
|
||||||
|
TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(false, slru_errcause, slru_errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -631,6 +649,7 @@ SlruPhysicalReadPage(SlruCtl ctl, int pageno, int slotno)
|
|||||||
slru_errcause = SLRU_READ_FAILED;
|
slru_errcause = SLRU_READ_FAILED;
|
||||||
slru_errno = errno;
|
slru_errno = errno;
|
||||||
close(fd);
|
close(fd);
|
||||||
|
TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(false, slru_errcause, slru_errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -638,9 +657,12 @@ SlruPhysicalReadPage(SlruCtl ctl, int pageno, int slotno)
|
|||||||
{
|
{
|
||||||
slru_errcause = SLRU_CLOSE_FAILED;
|
slru_errcause = SLRU_CLOSE_FAILED;
|
||||||
slru_errno = errno;
|
slru_errno = errno;
|
||||||
|
TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(false, slru_errcause, slru_errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_SLRU_READPAGE_PHYSICAL_DONE(true, -1, -1);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -668,6 +690,8 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruFlush fdata)
|
|||||||
char path[MAXPGPATH];
|
char path[MAXPGPATH];
|
||||||
int fd = -1;
|
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
|
* 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
|
* write out data before associated WAL records. This is the same action
|
||||||
@ -753,6 +777,7 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruFlush fdata)
|
|||||||
{
|
{
|
||||||
slru_errcause = SLRU_OPEN_FAILED;
|
slru_errcause = SLRU_OPEN_FAILED;
|
||||||
slru_errno = errno;
|
slru_errno = errno;
|
||||||
|
TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause, slru_errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -781,6 +806,7 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruFlush fdata)
|
|||||||
slru_errno = errno;
|
slru_errno = errno;
|
||||||
if (!fdata)
|
if (!fdata)
|
||||||
close(fd);
|
close(fd);
|
||||||
|
TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause, slru_errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -794,6 +820,7 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruFlush fdata)
|
|||||||
slru_errno = errno;
|
slru_errno = errno;
|
||||||
if (!fdata)
|
if (!fdata)
|
||||||
close(fd);
|
close(fd);
|
||||||
|
TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause, slru_errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -808,6 +835,7 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruFlush fdata)
|
|||||||
slru_errcause = SLRU_FSYNC_FAILED;
|
slru_errcause = SLRU_FSYNC_FAILED;
|
||||||
slru_errno = errno;
|
slru_errno = errno;
|
||||||
close(fd);
|
close(fd);
|
||||||
|
TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause, slru_errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -815,10 +843,12 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruFlush fdata)
|
|||||||
{
|
{
|
||||||
slru_errcause = SLRU_CLOSE_FAILED;
|
slru_errcause = SLRU_CLOSE_FAILED;
|
||||||
slru_errno = errno;
|
slru_errno = errno;
|
||||||
|
TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(false, slru_errcause, slru_errno);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_SLRU_WRITEPAGE_PHYSICAL_DONE(true, -1, -1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/execScan.c,v 1.44 2009/01/01 17:23:41 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/execScan.c,v 1.45 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "executor/executor.h"
|
#include "executor/executor.h"
|
||||||
#include "miscadmin.h"
|
#include "miscadmin.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
|
|
||||||
|
|
||||||
@ -60,6 +61,8 @@ ExecScan(ScanState *node,
|
|||||||
qual = node->ps.qual;
|
qual = node->ps.qual;
|
||||||
projInfo = node->ps.ps_ProjInfo;
|
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
|
* If we have neither a qual to check nor a projection to do, just skip
|
||||||
* all the overhead and return the raw scan tuple.
|
* all the overhead and return the raw scan tuple.
|
||||||
|
@ -61,7 +61,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/executor/nodeAgg.c,v 1.164 2009/01/01 17:23:41 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeAgg.c,v 1.165 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -79,6 +79,7 @@
|
|||||||
#include "parser/parse_agg.h"
|
#include "parser/parse_agg.h"
|
||||||
#include "parser/parse_coerce.h"
|
#include "parser/parse_coerce.h"
|
||||||
#include "parser/parse_oper.h"
|
#include "parser/parse_oper.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/acl.h"
|
#include "utils/acl.h"
|
||||||
#include "utils/builtins.h"
|
#include "utils/builtins.h"
|
||||||
#include "utils/lsyscache.h"
|
#include "utils/lsyscache.h"
|
||||||
@ -814,6 +815,8 @@ ExecAgg(AggState *node)
|
|||||||
if (node->agg_done)
|
if (node->agg_done)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_AGG((uintptr_t)node, ((Agg *) node->ss.ps.plan)->aggstrategy);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check to see if we're still projecting out tuples from a previous agg
|
* Check to see if we're still projecting out tuples from a previous agg
|
||||||
* tuple (because there is a function-returning-set in the projection
|
* tuple (because there is a function-returning-set in the projection
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* locate group boundaries.
|
* locate group boundaries.
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeGroup.c,v 1.73 2009/01/01 17:23:41 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeGroup.c,v 1.74 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
#include "executor/executor.h"
|
#include "executor/executor.h"
|
||||||
#include "executor/nodeGroup.h"
|
#include "executor/nodeGroup.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -49,6 +50,8 @@ ExecGroup(GroupState *node)
|
|||||||
numCols = ((Group *) node->ss.ps.plan)->numCols;
|
numCols = ((Group *) node->ss.ps.plan)->numCols;
|
||||||
grpColIdx = ((Group *) node->ss.ps.plan)->grpColIdx;
|
grpColIdx = ((Group *) node->ss.ps.plan)->grpColIdx;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_GROUP((uintptr_t)node, numCols);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check to see if we're still projecting out tuples from a previous group
|
* Check to see if we're still projecting out tuples from a previous group
|
||||||
* tuple (because there is a function-returning-set in the projection
|
* tuple (because there is a function-returning-set in the projection
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeHash.c,v 1.118 2009/03/21 00:04:38 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeHash.c,v 1.119 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -33,6 +33,7 @@
|
|||||||
#include "executor/nodeHashjoin.h"
|
#include "executor/nodeHashjoin.h"
|
||||||
#include "miscadmin.h"
|
#include "miscadmin.h"
|
||||||
#include "parser/parse_expr.h"
|
#include "parser/parse_expr.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/dynahash.h"
|
#include "utils/dynahash.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
#include "utils/lsyscache.h"
|
#include "utils/lsyscache.h"
|
||||||
@ -79,6 +80,8 @@ MultiExecHash(HashState *node)
|
|||||||
ExprContext *econtext;
|
ExprContext *econtext;
|
||||||
uint32 hashvalue;
|
uint32 hashvalue;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_HASH_MULTI((uintptr_t)node);
|
||||||
|
|
||||||
/* must provide our own instrumentation support */
|
/* must provide our own instrumentation support */
|
||||||
if (node->ps.instrument)
|
if (node->ps.instrument)
|
||||||
InstrStartNode(node->ps.instrument);
|
InstrStartNode(node->ps.instrument);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeHashjoin.c,v 1.98 2009/03/21 00:04:38 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeHashjoin.c,v 1.99 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -19,6 +19,7 @@
|
|||||||
#include "executor/hashjoin.h"
|
#include "executor/hashjoin.h"
|
||||||
#include "executor/nodeHash.h"
|
#include "executor/nodeHash.h"
|
||||||
#include "executor/nodeHashjoin.h"
|
#include "executor/nodeHashjoin.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
|
|
||||||
|
|
||||||
@ -61,6 +62,8 @@ ExecHashJoin(HashJoinState *node)
|
|||||||
uint32 hashvalue;
|
uint32 hashvalue;
|
||||||
int batchno;
|
int batchno;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_HASHJOIN((uintptr_t)node);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get information from HashJoin node
|
* get information from HashJoin node
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeLimit.c,v 1.36 2009/03/04 10:55:00 petere Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeLimit.c,v 1.37 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include "executor/executor.h"
|
#include "executor/executor.h"
|
||||||
#include "executor/nodeLimit.h"
|
#include "executor/nodeLimit.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
|
|
||||||
static void recompute_limits(LimitState *node);
|
static void recompute_limits(LimitState *node);
|
||||||
|
|
||||||
@ -41,6 +42,8 @@ ExecLimit(LimitState *node)
|
|||||||
TupleTableSlot *slot;
|
TupleTableSlot *slot;
|
||||||
PlanState *outerPlan;
|
PlanState *outerPlan;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_LIMIT((uintptr_t)node);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get information from the node
|
* get information from the node
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeMaterial.c,v 1.66 2009/03/27 18:30:21 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeMaterial.c,v 1.67 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -24,6 +24,7 @@
|
|||||||
#include "executor/executor.h"
|
#include "executor/executor.h"
|
||||||
#include "executor/nodeMaterial.h"
|
#include "executor/nodeMaterial.h"
|
||||||
#include "miscadmin.h"
|
#include "miscadmin.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
* ExecMaterial
|
* ExecMaterial
|
||||||
@ -45,6 +46,8 @@ ExecMaterial(MaterialState *node)
|
|||||||
bool eof_tuplestore;
|
bool eof_tuplestore;
|
||||||
TupleTableSlot *slot;
|
TupleTableSlot *slot;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_MATERIAL((uintptr_t)node);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get state info from node
|
* get state info from node
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeMergejoin.c,v 1.94 2009/01/01 17:23:42 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeMergejoin.c,v 1.95 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -98,6 +98,7 @@
|
|||||||
#include "executor/execdefs.h"
|
#include "executor/execdefs.h"
|
||||||
#include "executor/nodeMergejoin.h"
|
#include "executor/nodeMergejoin.h"
|
||||||
#include "miscadmin.h"
|
#include "miscadmin.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/acl.h"
|
#include "utils/acl.h"
|
||||||
#include "utils/lsyscache.h"
|
#include "utils/lsyscache.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
@ -565,6 +566,8 @@ ExecMergeJoin(MergeJoinState *node)
|
|||||||
bool doFillOuter;
|
bool doFillOuter;
|
||||||
bool doFillInner;
|
bool doFillInner;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_MERGEJOIN((uintptr_t)node);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get information from node
|
* get information from node
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeNestloop.c,v 1.50 2009/01/01 17:23:42 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeNestloop.c,v 1.51 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include "executor/execdebug.h"
|
#include "executor/execdebug.h"
|
||||||
#include "executor/nodeNestloop.h"
|
#include "executor/nodeNestloop.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
|
|
||||||
|
|
||||||
@ -67,6 +68,8 @@ ExecNestLoop(NestLoopState *node)
|
|||||||
List *otherqual;
|
List *otherqual;
|
||||||
ExprContext *econtext;
|
ExprContext *econtext;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_NESTLOOP((uintptr_t)node);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get information from the node
|
* get information from the node
|
||||||
*/
|
*/
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeSetOp.c,v 1.28 2009/01/01 17:23:42 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeSetOp.c,v 1.29 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -46,6 +46,7 @@
|
|||||||
|
|
||||||
#include "executor/executor.h"
|
#include "executor/executor.h"
|
||||||
#include "executor/nodeSetOp.h"
|
#include "executor/nodeSetOp.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
|
|
||||||
|
|
||||||
@ -196,6 +197,8 @@ ExecSetOp(SetOpState *node)
|
|||||||
SetOp *plannode = (SetOp *) node->ps.plan;
|
SetOp *plannode = (SetOp *) node->ps.plan;
|
||||||
TupleTableSlot *resultTupleSlot = node->ps.ps_ResultTupleSlot;
|
TupleTableSlot *resultTupleSlot = node->ps.ps_ResultTupleSlot;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_SETOP((uintptr_t)node);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the previously-returned tuple needs to be returned more than once,
|
* If the previously-returned tuple needs to be returned more than once,
|
||||||
* keep returning it.
|
* keep returning it.
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeSort.c,v 1.63 2009/01/01 17:23:42 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeSort.c,v 1.64 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -18,6 +18,7 @@
|
|||||||
#include "executor/execdebug.h"
|
#include "executor/execdebug.h"
|
||||||
#include "executor/nodeSort.h"
|
#include "executor/nodeSort.h"
|
||||||
#include "miscadmin.h"
|
#include "miscadmin.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/tuplesort.h"
|
#include "utils/tuplesort.h"
|
||||||
|
|
||||||
|
|
||||||
@ -53,6 +54,8 @@ ExecSort(SortState *node)
|
|||||||
dir = estate->es_direction;
|
dir = estate->es_direction;
|
||||||
tuplesortstate = (Tuplesortstate *) node->tuplesortstate;
|
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
|
* If first time through, read all tuples from outer plan and pass them to
|
||||||
* tuplesort.c. Subsequent calls just fetch tuples from tuplesort.
|
* tuplesort.c. Subsequent calls just fetch tuples from tuplesort.
|
||||||
|
@ -7,7 +7,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/executor/nodeSubplan.c,v 1.96 2009/01/01 17:23:42 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeSubplan.c,v 1.97 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -24,6 +24,7 @@
|
|||||||
#include "executor/nodeSubplan.h"
|
#include "executor/nodeSubplan.h"
|
||||||
#include "nodes/makefuncs.h"
|
#include "nodes/makefuncs.h"
|
||||||
#include "optimizer/clauses.h"
|
#include "optimizer/clauses.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/array.h"
|
#include "utils/array.h"
|
||||||
#include "utils/lsyscache.h"
|
#include "utils/lsyscache.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
@ -92,6 +93,8 @@ ExecHashSubPlan(SubPlanState *node,
|
|||||||
ExprContext *innerecontext = node->innerecontext;
|
ExprContext *innerecontext = node->innerecontext;
|
||||||
TupleTableSlot *slot;
|
TupleTableSlot *slot;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_SUBPLAN_HASH((uintptr_t)node);
|
||||||
|
|
||||||
/* Shouldn't have any direct correlation Vars */
|
/* Shouldn't have any direct correlation Vars */
|
||||||
if (subplan->parParam != NIL || node->args != NIL)
|
if (subplan->parParam != NIL || node->args != NIL)
|
||||||
elog(ERROR, "hashed subplan with direct correlation not supported");
|
elog(ERROR, "hashed subplan with direct correlation not supported");
|
||||||
@ -227,6 +230,8 @@ ExecScanSubPlan(SubPlanState *node,
|
|||||||
ListCell *l;
|
ListCell *l;
|
||||||
ArrayBuildState *astate = NULL;
|
ArrayBuildState *astate = NULL;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_SUBPLAN_SCAN((uintptr_t)node);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We are probably in a short-lived expression-evaluation context. Switch
|
* We are probably in a short-lived expression-evaluation context. Switch
|
||||||
* to the per-query context for manipulating the child plan's chgParam,
|
* to the per-query context for manipulating the child plan's chgParam,
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/executor/nodeUnique.c,v 1.58 2009/01/01 17:23:42 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/executor/nodeUnique.c,v 1.59 2009/04/02 19:14:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include "executor/executor.h"
|
#include "executor/executor.h"
|
||||||
#include "executor/nodeUnique.h"
|
#include "executor/nodeUnique.h"
|
||||||
|
#include "pg_trace.h"
|
||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
|
|
||||||
|
|
||||||
@ -50,6 +51,8 @@ ExecUnique(UniqueState *node)
|
|||||||
TupleTableSlot *slot;
|
TupleTableSlot *slot;
|
||||||
PlanState *outerPlan;
|
PlanState *outerPlan;
|
||||||
|
|
||||||
|
TRACE_POSTGRESQL_EXECUTOR_UNIQUE((uintptr_t)node);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get information from the node
|
* get information from the node
|
||||||
*/
|
*/
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2006-2009, PostgreSQL Global Development Group
|
* Copyright (c) 2006-2009, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/probes.d,v 1.9 2009/03/23 01:52:38 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/probes.d,v 1.10 2009/04/02 19:14:34 momjian Exp $
|
||||||
* ----------
|
* ----------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -15,6 +15,7 @@
|
|||||||
* in probe definitions, as they cause compilation errors on Mac OS X 10.5.
|
* in probe definitions, as they cause compilation errors on Mac OS X 10.5.
|
||||||
*/
|
*/
|
||||||
#define LocalTransactionId unsigned int
|
#define LocalTransactionId unsigned int
|
||||||
|
#define TransactionId unsigned int
|
||||||
#define LWLockId int
|
#define LWLockId int
|
||||||
#define LWLockMode int
|
#define LWLockMode int
|
||||||
#define LOCKMODE int
|
#define LOCKMODE int
|
||||||
@ -90,4 +91,29 @@ provider postgresql {
|
|||||||
probe xlog__switch();
|
probe xlog__switch();
|
||||||
probe wal__buffer__write__dirty__start();
|
probe wal__buffer__write__dirty__start();
|
||||||
probe wal__buffer__write__dirty__done();
|
probe wal__buffer__write__dirty__done();
|
||||||
|
|
||||||
|
probe slru__readpage__start(unsigned long, int, bool, TransactionId);
|
||||||
|
probe slru__readpage__done(int);
|
||||||
|
probe slru__readpage__readonly(unsigned long, int, TransactionId);
|
||||||
|
probe slru__writepage__start(unsigned long, int, int);
|
||||||
|
probe slru__writepage__done();
|
||||||
|
probe slru__readpage__physical__start(unsigned long, char *, int, int);
|
||||||
|
probe slru__readpage__physical__done(int, int, int);
|
||||||
|
probe slru__writepage__physical__start(unsigned long, int, int);
|
||||||
|
probe slru__writepage__physical__done(int, int, int);
|
||||||
|
|
||||||
|
probe executor__scan(unsigned long, unsigned int, unsigned long);
|
||||||
|
probe executor__agg(unsigned long, int);
|
||||||
|
probe executor__group(unsigned long, int);
|
||||||
|
probe executor__hash__multi(unsigned long);
|
||||||
|
probe executor__hashjoin(unsigned long);
|
||||||
|
probe executor__limit(unsigned long);
|
||||||
|
probe executor__material(unsigned long);
|
||||||
|
probe executor__mergejoin(unsigned long);
|
||||||
|
probe executor__nestloop(unsigned long);
|
||||||
|
probe executor__setop(unsigned long);
|
||||||
|
probe executor__sort(unsigned long, int);
|
||||||
|
probe executor__subplan__hash(unsigned long);
|
||||||
|
probe executor__subplan__scan(unsigned long);
|
||||||
|
probe executor__unique(unsigned long);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user