Skip to content
Snippets Groups Projects
Commit 27cb626f authored by Greg Stark's avatar Greg Stark
Browse files

revert to showing buffer counts in explain (buffers)

parent 215cbc90
No related branches found
No related tags found
No related merge requests found
......@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994-5, Regents of the University of California
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.201 2010/02/15 02:36:26 stark Exp $
* $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.202 2010/02/16 20:07:13 stark Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -98,7 +98,7 @@ static void ExplainJSONLineEnding(ExplainState *es);
static void ExplainYAMLLineStarting(ExplainState *es);
static void escape_json(StringInfo buf, const char *str);
static void escape_yaml(StringInfo buf, const char *str);
static double normalize_memory(double amount, char **unit, int *precision);
/*
......@@ -1082,63 +1082,47 @@ ExplainNode(Plan *plan, PlanState *planstate,
if (has_shared || has_local || has_temp)
{
appendStringInfoSpaces(es->str, es->indent * 2);
appendStringInfoString(es->str, "Total Buffer Usage:");
appendStringInfoString(es->str, "Buffers:");
if (has_shared)
{
char *hit_unit, *read_unit, *written_unit;
int hit_prec, read_prec, written_prec;
double hit_mem = normalize_memory((double)usage->shared_blks_hit * BLCKSZ, &hit_unit, &hit_prec);
double read_mem = normalize_memory((double)usage->shared_blks_read * BLCKSZ, &read_unit, &read_prec);
double written_mem = normalize_memory((double)usage->shared_blks_written * BLCKSZ, &written_unit, &written_prec);
appendStringInfoString(es->str, " shared");
appendStringInfo(es->str, " hit=%.*f%s",
hit_prec, hit_mem, hit_unit);
if (usage->shared_blks_hit > 0)
appendStringInfo(es->str, " hit=%ld",
usage->shared_blks_hit);
if (usage->shared_blks_read > 0)
appendStringInfo(es->str, " read=%.*f%s",
read_prec, read_mem, read_unit);
appendStringInfo(es->str, " read=%ld",
usage->shared_blks_read);
if (usage->shared_blks_written > 0)
appendStringInfo(es->str, " written=%.*f%s",
written_prec, written_mem, written_unit);
appendStringInfo(es->str, " written=%ld",
usage->shared_blks_written);
if (has_local || has_temp)
appendStringInfoChar(es->str, ',');
}
if (has_local)
{
char *hit_unit, *read_unit, *written_unit;
int hit_prec, read_prec, written_prec;
double hit_mem = normalize_memory((double)usage->local_blks_hit * BLCKSZ, &hit_unit, &hit_prec);
double read_mem = normalize_memory((double)usage->local_blks_read * BLCKSZ, &read_unit, &read_prec);
double written_mem = normalize_memory((double)usage->local_blks_written * BLCKSZ, &written_unit, &written_prec);
appendStringInfoString(es->str, " local");
if (usage->local_blks_hit > 0)
appendStringInfo(es->str, " hit=%.*f%s",
hit_prec, hit_mem, hit_unit);
if (usage->local_blks_read > 0)
appendStringInfo(es->str, " read=%.*f%s",
read_prec, read_mem, read_unit);
if (usage->local_blks_written > 0)
appendStringInfo(es->str, " written=%.*f%s",
written_prec, written_mem, written_unit);
appendStringInfoString(es->str, " local");
if (usage->local_blks_hit > 0)
appendStringInfo(es->str, " hit=%ld",
usage->local_blks_hit);
if (usage->local_blks_read > 0)
appendStringInfo(es->str, " read=%ld",
usage->local_blks_read);
if (usage->local_blks_written > 0)
appendStringInfo(es->str, " written=%ld",
usage->local_blks_written);
if (has_temp)
appendStringInfoChar(es->str, ',');
}
if (has_temp)
{
char *read_unit, *written_unit;
int read_prec, written_prec;
double read_mem = normalize_memory((double)usage->temp_blks_read * BLCKSZ, &read_unit, &read_prec);
double written_mem = normalize_memory((double)usage->temp_blks_written * BLCKSZ, &written_unit, &written_prec);
appendStringInfoString(es->str, " temp");
if (usage->temp_blks_read > 0)
appendStringInfo(es->str, " read=%.*f%s",
read_prec, read_mem, read_unit);
if (usage->temp_blks_written > 0)
appendStringInfo(es->str, " written=%.*f%s",
written_prec, written_mem, written_unit);
appendStringInfo(es->str, " read=%ld",
usage->temp_blks_read);
if (usage->temp_blks_written > 0)
appendStringInfo(es->str, " written=%ld",
usage->temp_blks_written);
}
appendStringInfoChar(es->str, '\n');
}
......@@ -2170,36 +2154,3 @@ escape_yaml(StringInfo buf, const char *str)
appendStringInfo(buf, "%s", str);
}
/*
* For a quantity of bytes pick a reasonable display unit for it and
* return the quantity in that unit. Also return the unit name and a
* reasonable precision via the reference parameters.
*/
static double normalize_memory(double amount, char **unit, int *precision)
{
static char *units[] = {"bytes", "kB", "MB", "GB", "TB", "PB"};
char **u = units, **last = units + (sizeof(units)/sizeof(*units)-1);
while (amount > 1024.0 && u < last)
{
amount /= 1024.0;
u += 1;
}
*unit = *u;
/* if it's bytes or kB then don't print decimals since that's less
* than blocksize, otherwise always print 3 significant digits */
if (u == units || u == units+1 )
*precision = 0;
else if (amount < 10)
*precision = 2;
else if (amount < 100)
*precision = 1;
else
*precision = 0;
return amount;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment