diff options
Diffstat (limited to 'src/backend/executor')
-rw-r--r-- | src/backend/executor/execMain.c | 12 | ||||
-rw-r--r-- | src/backend/executor/execProcnode.c | 4 | ||||
-rw-r--r-- | src/backend/executor/functions.c | 4 | ||||
-rw-r--r-- | src/backend/executor/instrument.c | 47 | ||||
-rw-r--r-- | src/backend/executor/spi.c | 4 |
5 files changed, 54 insertions, 17 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index ebb6d8ea82c..25d26f84468 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -26,7 +26,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.337 2009/12/11 18:14:43 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.338 2009/12/15 04:57:47 rhaas Exp $ * *------------------------------------------------------------------------- */ @@ -180,7 +180,7 @@ standard_ExecutorStart(QueryDesc *queryDesc, int eflags) */ estate->es_snapshot = RegisterSnapshot(queryDesc->snapshot); estate->es_crosscheck_snapshot = RegisterSnapshot(queryDesc->crosscheck_snapshot); - estate->es_instrument = queryDesc->doInstrument; + estate->es_instrument = queryDesc->instrument_options; /* * Initialize the plan state tree @@ -859,7 +859,7 @@ InitResultRelInfo(ResultRelInfo *resultRelInfo, Relation resultRelationDesc, Index resultRelationIndex, CmdType operation, - bool doInstrument) + int instrument_options) { /* * Check valid relkind ... parser and/or planner should have noticed this @@ -914,10 +914,8 @@ InitResultRelInfo(ResultRelInfo *resultRelInfo, palloc0(n * sizeof(FmgrInfo)); resultRelInfo->ri_TrigWhenExprs = (List **) palloc0(n * sizeof(List *)); - if (doInstrument) - resultRelInfo->ri_TrigInstrument = InstrAlloc(n); - else - resultRelInfo->ri_TrigInstrument = NULL; + if (instrument_options) + resultRelInfo->ri_TrigInstrument = InstrAlloc(n, instrument_options); } else { diff --git a/src/backend/executor/execProcnode.c b/src/backend/executor/execProcnode.c index 21b973d3f89..ee867d9ddea 100644 --- a/src/backend/executor/execProcnode.c +++ b/src/backend/executor/execProcnode.c @@ -12,7 +12,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/execProcnode.c,v 1.68 2009/10/12 18:10:41 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/executor/execProcnode.c,v 1.69 2009/12/15 04:57:47 rhaas Exp $ * *------------------------------------------------------------------------- */ @@ -321,7 +321,7 @@ ExecInitNode(Plan *node, EState *estate, int eflags) /* Set up instrumentation for this node if requested */ if (estate->es_instrument) - result->instrument = InstrAlloc(1); + result->instrument = InstrAlloc(1, estate->es_instrument); return result; } diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 7a9c319c7b4..8ac98236ec3 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/functions.c,v 1.137 2009/12/14 02:15:51 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/executor/functions.c,v 1.138 2009/12/15 04:57:47 rhaas Exp $ * *------------------------------------------------------------------------- */ @@ -414,7 +414,7 @@ postquel_start(execution_state *es, SQLFunctionCachePtr fcache) fcache->src, snapshot, InvalidSnapshot, dest, - fcache->paramLI, false); + fcache->paramLI, 0); else es->qd = CreateUtilityQueryDesc(es->stmt, fcache->src, diff --git a/src/backend/executor/instrument.c b/src/backend/executor/instrument.c index eeac0d0d955..cd76698ea26 100644 --- a/src/backend/executor/instrument.c +++ b/src/backend/executor/instrument.c @@ -7,7 +7,7 @@ * Copyright (c) 2001-2009, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/instrument.c,v 1.22 2009/01/01 17:23:41 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/executor/instrument.c,v 1.23 2009/12/15 04:57:47 rhaas Exp $ * *------------------------------------------------------------------------- */ @@ -17,14 +17,28 @@ #include "executor/instrument.h" +BufferUsage pgBufferUsage; + +static void BufferUsageAccumDiff(BufferUsage *dst, + const BufferUsage *add, const BufferUsage *sub); /* Allocate new instrumentation structure(s) */ Instrumentation * -InstrAlloc(int n) +InstrAlloc(int n, int instrument_options) { - Instrumentation *instr = palloc0(n * sizeof(Instrumentation)); + Instrumentation *instr; + + /* timer is always required for now */ + Assert(instrument_options & INSTRUMENT_TIMER); - /* we don't need to do any initialization except zero 'em */ + instr = palloc0(n * sizeof(Instrumentation)); + if (instrument_options & INSTRUMENT_BUFFERS) + { + int i; + + for (i = 0; i < n; i++) + instr[i].needs_bufusage = true; + } return instr; } @@ -37,6 +51,10 @@ InstrStartNode(Instrumentation *instr) INSTR_TIME_SET_CURRENT(instr->starttime); else elog(DEBUG2, "InstrStartNode called twice in a row"); + + /* initialize buffer usage per plan node */ + if (instr->needs_bufusage) + instr->bufusage_start = pgBufferUsage; } /* Exit from a plan node */ @@ -59,6 +77,11 @@ InstrStopNode(Instrumentation *instr, double nTuples) INSTR_TIME_SET_ZERO(instr->starttime); + /* Adds delta of buffer usage to node's count. */ + if (instr->needs_bufusage) + BufferUsageAccumDiff(&instr->bufusage, + &pgBufferUsage, &instr->bufusage_start); + /* Is this the first tuple of this cycle? */ if (!instr->running) { @@ -95,3 +118,19 @@ InstrEndLoop(Instrumentation *instr) instr->firsttuple = 0; instr->tuplecount = 0; } + +static void +BufferUsageAccumDiff(BufferUsage *dst, + const BufferUsage *add, + const BufferUsage *sub) +{ + /* dst += add - sub */ + dst->shared_blks_hit += add->shared_blks_hit - sub->shared_blks_hit; + dst->shared_blks_read += add->shared_blks_read - sub->shared_blks_read; + dst->shared_blks_written += add->shared_blks_written - sub->shared_blks_written; + dst->local_blks_hit += add->local_blks_hit - sub->local_blks_hit; + dst->local_blks_read += add->local_blks_read - sub->local_blks_read; + dst->local_blks_written += add->local_blks_written - sub->local_blks_written; + dst->temp_blks_read += add->temp_blks_read - sub->temp_blks_read; + dst->temp_blks_written += add->temp_blks_written - sub->temp_blks_written; +} diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index fcea0a1e623..09644950c1d 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/spi.c,v 1.211 2009/11/04 22:26:06 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/executor/spi.c,v 1.212 2009/12/15 04:57:47 rhaas Exp $ * *------------------------------------------------------------------------- */ @@ -1908,7 +1908,7 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI, plansource->query_string, snap, crosscheck_snapshot, dest, - paramLI, false); + paramLI, 0); res = _SPI_pquery(qdesc, fire_triggers, canSetTag ? tcount : 0); FreeQueryDesc(qdesc); |