22#include "catalog/pg_authid_d.h"
30#include "utils/wait_event_types.h"
36#define MEMORY_CONTEXT_IDENT_DISPLAY_SIZE 1024
69 HTAB *context_id_lookup)
71#define PG_GET_BACKEND_MEMORY_CONTEXTS_COLS 10
104 memset(nulls, 0,
sizeof(nulls));
113 if (
ident && strcmp(
name,
"dynahash") == 0)
126 int idlen = strlen(
ident);
136 memcpy(clipped_ident,
ident, idlen);
137 clipped_ident[idlen] =
'\0';
167 const char *context_type;
171 case T_AllocSetContext:
172 context_type =
"AllocSet";
174 case T_GenerationContext:
175 context_type =
"Generation";
178 context_type =
"Slab";
181 context_type =
"Bump";
184 context_type =
"???";
201 HTAB *context_id_lookup;
207 context_id_lookup =
hash_create(
"pg_get_backend_memory_contexts",
305 (
errmsg(
"PID %d is not a PostgreSQL server process", pid)));
314 (
errmsg(
"could not send signal to process %d: %m", pid)));
354#define MEMSTATS_WAIT_TIMEOUT 100
363 bool proc_is_aux =
false;
391 errmsg(
"PID %d is not a PostgreSQL server process", pid));
412 errmsg(
"could not send signal to process %d: %m", pid));
480 errmsg(
"PID %d is no longer a PostgreSQL server process",
491 if (msecs > 0 && msecs < (timeout * 1000))
502 ((timeout * 1000) - msecs), WAIT_EVENT_MEM_CXT_PUBLISH))
552#define PG_GET_PROCESS_MEMORY_CONTEXTS_COLS 12
561 Datum *path_datum = NULL;
562 int *path_int = NULL;
565 memset(nulls, 0,
sizeof(nulls));
604 memcxt_info[
i].freespace);
ArrayType * construct_array_builtin(Datum *elems, int nelems, Oid elmtype)
long TimestampDifferenceMilliseconds(TimestampTz start_time, TimestampTz stop_time)
TimestampTz GetCurrentTimestamp(void)
static Datum values[MAXATTR]
#define CStringGetTextDatum(s)
bool ConditionVariableCancelSleep(void)
bool ConditionVariableTimedSleep(ConditionVariable *cv, long timeout, uint32 wait_event_info)
void ConditionVariableInit(ConditionVariable *cv)
dsa_area * dsa_attach(dsa_handle handle)
void * dsa_get_address(dsa_area *area, dsa_pointer dp)
void dsa_pin_mapping(dsa_area *area)
#define InvalidDsaPointer
#define DSA_HANDLE_INVALID
#define DsaPointerIsValid(x)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
void hash_destroy(HTAB *hashp)
HTAB * hash_create(const char *tabname, long nelem, const HASHCTL *info, int flags)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
Datum Int64GetDatum(int64 X)
#define PG_GETARG_FLOAT8(n)
#define PG_GETARG_INT32(n)
#define PG_GETARG_BOOL(n)
#define PG_RETURN_BOOL(x)
void InitMaterializedSRF(FunctionCallInfo fcinfo, bits32 flags)
Datum path_length(PG_FUNCTION_ARGS)
Assert(PointerIsAligned(start, uint64))
List * lappend(List *list, void *datum)
List * lcons_int(int datum, List *list)
void list_free(List *list)
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockRelease(LWLock *lock)
void LWLockInitialize(LWLock *lock, int tranche_id)
@ LWTRANCHE_MEMORY_CONTEXT_REPORTING_PROC
@ LWTRANCHE_MEMORY_CONTEXT_REPORTING_STATE
int pg_mbcliplen(const char *mbstr, int len, int limit)
MemoryContext TopMemoryContext
MemoryContext CurrentMemoryContext
dsa_area * MemoryStatsDsaArea
Size MemoryContextReportingShmemSize(void)
const char * ContextTypeToString(NodeTag type)
struct MemoryStatsBackendState * memCxtState
static Datum int_list_to_array(const List *list)
Datum pg_get_process_memory_contexts(PG_FUNCTION_ARGS)
#define PG_GET_PROCESS_MEMORY_CONTEXTS_COLS
static void PutMemoryContextsStatsTupleStore(Tuplestorestate *tupstore, TupleDesc tupdesc, MemoryContext context, HTAB *context_id_lookup)
Datum pg_log_backend_memory_contexts(PG_FUNCTION_ARGS)
#define PG_GET_BACKEND_MEMORY_CONTEXTS_COLS
struct MemoryStatsCtl * memCxtArea
void MemoryContextReportingShmemInit(void)
#define MEMORY_CONTEXT_IDENT_DISPLAY_SIZE
Datum pg_get_backend_memory_contexts(PG_FUNCTION_ARGS)
#define MemoryContextIsValid(context)
struct MemoryStatsContextId MemoryStatsContextId
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
static int list_length(const List *l)
#define foreach_current_index(var_or_cell)
#define foreach_ptr(type, var, lst)
#define foreach_int(var, lst)
static Datum PointerGetDatum(const void *X)
static Datum Int32GetDatum(int32 X)
#define NUM_AUXILIARY_PROCS
#define GetNumberFromPGProc(proc)
PGPROC * BackendPidGetProc(int pid)
#define INVALID_PROC_NUMBER
int SendProcSignal(pid_t pid, ProcSignalReason reason, ProcNumber procNumber)
@ PROCSIG_GET_MEMORY_CONTEXT
@ PROCSIG_LOG_MEMORY_CONTEXT
Size add_size(Size s1, Size s2)
Size mul_size(Size s1, Size s2)
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
PGPROC * AuxiliaryPidGetProc(int pid)
const MemoryContextMethods * methods
void(* stats)(MemoryContext context, MemoryStatsPrintFunc printfunc, void *passthru, MemoryContextCounters *totals, bool print_to_stderr)
dsa_pointer memstats_dsa_pointer
dsa_handle memstats_dsa_handle
Tuplestorestate * setResult
void tuplestore_putvalues(Tuplestorestate *state, TupleDesc tdesc, const Datum *values, const bool *isnull)
static Datum TimestampTzGetDatum(TimestampTz X)