⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 instrument.c

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 C
字号:
/*------------------------------------------------------------------------- * * instrument.c *	 functions for instrumentation of plan execution * * * Copyright (c) 2001-2005, PostgreSQL Global Development Group * * IDENTIFICATION *	  $PostgreSQL: pgsql/src/backend/executor/instrument.c,v 1.13 2005/10/15 02:49:17 momjian Exp $ * *------------------------------------------------------------------------- */#include "postgres.h"#include <unistd.h>#include "executor/instrument.h"/* Allocate new instrumentation structure(s) */Instrumentation *InstrAlloc(int n){	Instrumentation *instr = palloc0(n * sizeof(Instrumentation));	/* we don't need to do any initialization except zero 'em */	return instr;}/* Entry to a plan node */voidInstrStartNode(Instrumentation *instr){	if (INSTR_TIME_IS_ZERO(instr->starttime))		INSTR_TIME_SET_CURRENT(instr->starttime);	else		elog(DEBUG2, "InstrStartNode called twice in a row");}/* Exit from a plan node */voidInstrStopNode(Instrumentation *instr, bool returnedTuple){	instr_time	endtime;	/* count the returned tuples */	if (returnedTuple)		instr->tuplecount += 1;	if (INSTR_TIME_IS_ZERO(instr->starttime))	{		elog(DEBUG2, "InstrStopNode called without start");		return;	}	INSTR_TIME_SET_CURRENT(endtime);#ifndef WIN32	instr->counter.tv_sec += endtime.tv_sec - instr->starttime.tv_sec;	instr->counter.tv_usec += endtime.tv_usec - instr->starttime.tv_usec;	/* Normalize after each add to avoid overflow/underflow of tv_usec */	while (instr->counter.tv_usec < 0)	{		instr->counter.tv_usec += 1000000;		instr->counter.tv_sec--;	}	while (instr->counter.tv_usec >= 1000000)	{		instr->counter.tv_usec -= 1000000;		instr->counter.tv_sec++;	}#else							/* WIN32 */	instr->counter.QuadPart += (endtime.QuadPart - instr->starttime.QuadPart);#endif	INSTR_TIME_SET_ZERO(instr->starttime);	/* Is this the first tuple of this cycle? */	if (!instr->running)	{		instr->running = true;		instr->firsttuple = INSTR_TIME_GET_DOUBLE(instr->counter);	}}/* As above, but count multiple tuples returned at once */voidInstrStopNodeMulti(Instrumentation *instr, double nTuples){	/* count the returned tuples */	instr->tuplecount += nTuples;	/* delegate the rest */	InstrStopNode(instr, false);}/* Finish a run cycle for a plan node */voidInstrEndLoop(Instrumentation *instr){	double		totaltime;	/* Skip if nothing has happened, or already shut down */	if (!instr->running)		return;	if (!INSTR_TIME_IS_ZERO(instr->starttime))		elog(DEBUG2, "InstrEndLoop called on running node");	/* Accumulate per-cycle statistics into totals */	totaltime = INSTR_TIME_GET_DOUBLE(instr->counter);	instr->startup += instr->firsttuple;	instr->total += totaltime;	instr->ntuples += instr->tuplecount;	instr->nloops += 1;	/* Reset for next cycle (if any) */	instr->running = false;	INSTR_TIME_SET_ZERO(instr->starttime);	INSTR_TIME_SET_ZERO(instr->counter);	instr->firsttuple = 0;	instr->tuplecount = 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -