From 27cb626f7a28abd18c0e8a34fc8d6674b0f6cdf3 Mon Sep 17 00:00:00 2001
From: Greg Stark <stark@mit.edu>
Date: Tue, 16 Feb 2010 20:07:13 +0000
Subject: [PATCH] revert to showing buffer counts in explain (buffers)

---
 src/backend/commands/explain.c | 99 +++++++++-------------------------
 1 file changed, 25 insertions(+), 74 deletions(-)

diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index 38ccc845854..4195e2c6802 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -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;
-}
-- 
GitLab