mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
revert to showing buffer counts in explain (buffers)
This commit is contained in:
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1994-5, Regents of the University of California
|
* Portions Copyright (c) 1994-5, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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 ExplainYAMLLineStarting(ExplainState *es);
|
||||||
static void escape_json(StringInfo buf, const char *str);
|
static void escape_json(StringInfo buf, const char *str);
|
||||||
static void escape_yaml(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)
|
if (has_shared || has_local || has_temp)
|
||||||
{
|
{
|
||||||
appendStringInfoSpaces(es->str, es->indent * 2);
|
appendStringInfoSpaces(es->str, es->indent * 2);
|
||||||
appendStringInfoString(es->str, "Total Buffer Usage:");
|
appendStringInfoString(es->str, "Buffers:");
|
||||||
|
|
||||||
if (has_shared)
|
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");
|
appendStringInfoString(es->str, " shared");
|
||||||
appendStringInfo(es->str, " hit=%.*f%s",
|
if (usage->shared_blks_hit > 0)
|
||||||
hit_prec, hit_mem, hit_unit);
|
appendStringInfo(es->str, " hit=%ld",
|
||||||
|
usage->shared_blks_hit);
|
||||||
if (usage->shared_blks_read > 0)
|
if (usage->shared_blks_read > 0)
|
||||||
appendStringInfo(es->str, " read=%.*f%s",
|
appendStringInfo(es->str, " read=%ld",
|
||||||
read_prec, read_mem, read_unit);
|
usage->shared_blks_read);
|
||||||
if (usage->shared_blks_written > 0)
|
if (usage->shared_blks_written > 0)
|
||||||
appendStringInfo(es->str, " written=%.*f%s",
|
appendStringInfo(es->str, " written=%ld",
|
||||||
written_prec, written_mem, written_unit);
|
usage->shared_blks_written);
|
||||||
if (has_local || has_temp)
|
if (has_local || has_temp)
|
||||||
appendStringInfoChar(es->str, ',');
|
appendStringInfoChar(es->str, ',');
|
||||||
}
|
}
|
||||||
if (has_local)
|
if (has_local)
|
||||||
{
|
{
|
||||||
char *hit_unit, *read_unit, *written_unit;
|
appendStringInfoString(es->str, " local");
|
||||||
int hit_prec, read_prec, written_prec;
|
if (usage->local_blks_hit > 0)
|
||||||
double hit_mem = normalize_memory((double)usage->local_blks_hit * BLCKSZ, &hit_unit, &hit_prec);
|
appendStringInfo(es->str, " hit=%ld",
|
||||||
double read_mem = normalize_memory((double)usage->local_blks_read * BLCKSZ, &read_unit, &read_prec);
|
usage->local_blks_hit);
|
||||||
double written_mem = normalize_memory((double)usage->local_blks_written * BLCKSZ, &written_unit, &written_prec);
|
if (usage->local_blks_read > 0)
|
||||||
|
appendStringInfo(es->str, " read=%ld",
|
||||||
appendStringInfoString(es->str, " local");
|
usage->local_blks_read);
|
||||||
if (usage->local_blks_hit > 0)
|
if (usage->local_blks_written > 0)
|
||||||
appendStringInfo(es->str, " hit=%.*f%s",
|
appendStringInfo(es->str, " written=%ld",
|
||||||
hit_prec, hit_mem, hit_unit);
|
usage->local_blks_written);
|
||||||
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);
|
|
||||||
if (has_temp)
|
if (has_temp)
|
||||||
appendStringInfoChar(es->str, ',');
|
appendStringInfoChar(es->str, ',');
|
||||||
}
|
}
|
||||||
if (has_temp)
|
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");
|
appendStringInfoString(es->str, " temp");
|
||||||
if (usage->temp_blks_read > 0)
|
if (usage->temp_blks_read > 0)
|
||||||
appendStringInfo(es->str, " read=%.*f%s",
|
appendStringInfo(es->str, " read=%ld",
|
||||||
read_prec, read_mem, read_unit);
|
usage->temp_blks_read);
|
||||||
if (usage->temp_blks_written > 0)
|
if (usage->temp_blks_written > 0)
|
||||||
appendStringInfo(es->str, " written=%.*f%s",
|
appendStringInfo(es->str, " written=%ld",
|
||||||
written_prec, written_mem, written_unit);
|
usage->temp_blks_written);
|
||||||
}
|
}
|
||||||
appendStringInfoChar(es->str, '\n');
|
appendStringInfoChar(es->str, '\n');
|
||||||
}
|
}
|
||||||
@ -2170,36 +2154,3 @@ escape_yaml(StringInfo buf, const char *str)
|
|||||||
|
|
||||||
appendStringInfo(buf, "%s", 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;
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user