From: Cédric Villemain Date: Tue, 8 Mar 2011 22:21:45 +0000 (+0100) Subject: Add total memory output to pgsysconf*() X-Git-Tag: 1.0~27 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=b96dbe21dc16fc67185b31f87e4171bb55ac8449;p=pgfincore.git Add total memory output to pgsysconf*() --- diff --git a/ChangeLog b/ChangeLog index 8057234..d66a309 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,7 +2,8 @@ * 0.5.0 - Output varbit containing vector information with pgmincore*() - Add Debian packaging (Dimitri Fontaine) - Update to work with PostgreSQL >= 9.1 (Jeff Janes) - - Add function pgsysconf_pretty() + - Add total number of pages of memory with pgsysconf() + - Add function pgsysconf_pretty() 04/30/2010 Cédric Villemain diff --git a/pgfincore.c b/pgfincore.c index 53c670a..21603f9 100644 --- a/pgfincore.c +++ b/pgfincore.c @@ -41,7 +41,7 @@ PG_MODULE_MAGIC; #endif /* } */ -#define PGSYSCONF_COLS 2 +#define PGSYSCONF_COLS 3 #define PGFINCORE_COLS 6 /* @@ -53,7 +53,7 @@ PG_MODULE_MAGIC; typedef struct { int action; /* the action mincore, fadvise...*/ - Relation rel; /* the relation */ + Relation rel; /* the relation */ unsigned int segcount; /* the segment current number */ char *relationpath; /* the relation path */ } pgfincore_fctx; @@ -103,16 +103,18 @@ pgsysconf(PG_FUNCTION_ARGS) tupdesc = CreateTemplateTupleDesc(PGSYSCONF_COLS, false); TupleDescInitEntry(tupdesc, (AttrNumber) 1, "block_size", INT8OID, -1, 0); - TupleDescInitEntry(tupdesc, (AttrNumber) 2, "block_free", INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 2, "block_free", INT8OID, -1, 0); + TupleDescInitEntry(tupdesc, (AttrNumber) 3, "total_blocks", INT8OID, -1, 0); tupdesc = BlessTupleDesc(tupdesc); values[0] = Int64GetDatum(sysconf(_SC_PAGESIZE)); /* Page size */ - values[1] = Int64GetDatum(sysconf(_SC_AVPHYS_PAGES)); /* free page in memory */ + values[1] = Int64GetDatum(sysconf(_SC_AVPHYS_PAGES)); /* free page in memory */ + values[2] = Int64GetDatum(sysconf(_SC_PHYS_PAGES)); /* total memory */ memset(nulls, 0, sizeof(nulls)); tuple = heap_form_tuple(tupdesc, values, nulls); - elog(DEBUG1, "pgsysconf: page_size %lld bytes, free page in memory %lld", - (int64) values[0], (int64) values[1]); + elog(DEBUG1, "pgsysconf: page_size %lld bytes, free page in memory %lld, total memory pages %lld", + (int64) values[0], (int64) values[1], (int64) values[2]); PG_RETURN_DATUM( HeapTupleGetDatum(tuple) ); } diff --git a/pgfincore.sql.in b/pgfincore.sql.in index e87dba5..6b4c9fa 100644 --- a/pgfincore.sql.in +++ b/pgfincore.sql.in @@ -1,19 +1,22 @@ SET search_path = public; CREATE OR REPLACE FUNCTION -pgsysconf(OUT block_size bigint, - OUT block_free bigint) +pgsysconf(OUT block_size bigint, + OUT block_free bigint, + OUT total_blocks bigint) RETURNS record AS 'MODULE_PATHNAME' LANGUAGE C; CREATE OR REPLACE FUNCTION -pgsysconf_pretty(OUT block_size text, - OUT free_memory text) +pgsysconf_pretty(OUT block_size text, + OUT free_memory text, + OUT total_memory text) RETURNS record AS ' select pg_size_pretty(block_size) as block_size, - pg_size_pretty(block_free * block_size) as free_memory + pg_size_pretty(block_free * block_size) as free_memory, + pg_size_pretty(total_blocks * block_size) as total_memory from pgsysconf()' LANGUAGE SQL;