aboutsummaryrefslogtreecommitdiff
path: root/contrib/pgstattuple/pgstattuple.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/pgstattuple/pgstattuple.c')
-rw-r--r--contrib/pgstattuple/pgstattuple.c147
1 files changed, 74 insertions, 73 deletions
diff --git a/contrib/pgstattuple/pgstattuple.c b/contrib/pgstattuple/pgstattuple.c
index e88be905011..45e92298100 100644
--- a/contrib/pgstattuple/pgstattuple.c
+++ b/contrib/pgstattuple/pgstattuple.c
@@ -1,5 +1,5 @@
/*
- * $Header: /cvsroot/pgsql/contrib/pgstattuple/pgstattuple.c,v 1.1 2001/10/01 01:52:38 ishii Exp $
+ * $Header: /cvsroot/pgsql/contrib/pgstattuple/pgstattuple.c,v 1.2 2001/10/25 05:49:20 momjian Exp $
*
* Copyright (c) 2001 Tatsuo Ishii
*
@@ -42,90 +42,91 @@ extern Datum pgstattuple(PG_FUNCTION_ARGS);
Datum
pgstattuple(PG_FUNCTION_ARGS)
{
- Name p = PG_GETARG_NAME(0);
-
- Relation rel;
- HeapScanDesc scan;
- HeapTuple tuple;
- BlockNumber nblocks;
- BlockNumber block = InvalidBlockNumber;
- double table_len;
- uint64 tuple_len = 0;
- uint64 dead_tuple_len = 0;
- uint32 tuple_count = 0;
- uint32 dead_tuple_count = 0;
- double tuple_percent;
- double dead_tuple_percent;
-
- Buffer buffer = InvalidBuffer;
- uint64 free_space = 0; /* free/reusable space in bytes */
- double free_percent; /* free/reusable space in % */
-
- rel = heap_openr(NameStr(*p), NoLock);
- nblocks = RelationGetNumberOfBlocks(rel);
- scan = heap_beginscan(rel, false, SnapshotAny, 0, NULL);
-
- while ((tuple = heap_getnext(scan,0)))
- {
- if (HeapTupleSatisfiesNow(tuple->t_data))
+ Name p = PG_GETARG_NAME(0);
+
+ Relation rel;
+ HeapScanDesc scan;
+ HeapTuple tuple;
+ BlockNumber nblocks;
+ BlockNumber block = InvalidBlockNumber;
+ double table_len;
+ uint64 tuple_len = 0;
+ uint64 dead_tuple_len = 0;
+ uint32 tuple_count = 0;
+ uint32 dead_tuple_count = 0;
+ double tuple_percent;
+ double dead_tuple_percent;
+
+ Buffer buffer = InvalidBuffer;
+ uint64 free_space = 0; /* free/reusable space in bytes */
+ double free_percent; /* free/reusable space in % */
+
+ rel = heap_openr(NameStr(*p), NoLock);
+ nblocks = RelationGetNumberOfBlocks(rel);
+ scan = heap_beginscan(rel, false, SnapshotAny, 0, NULL);
+
+ while ((tuple = heap_getnext(scan, 0)))
{
- tuple_len += tuple->t_len;
- tuple_count++;
+ if (HeapTupleSatisfiesNow(tuple->t_data))
+ {
+ tuple_len += tuple->t_len;
+ tuple_count++;
+ }
+ else
+ {
+ dead_tuple_len += tuple->t_len;
+ dead_tuple_count++;
+ }
+
+ if (!BlockNumberIsValid(block) ||
+ block != BlockIdGetBlockNumber(&tuple->t_self.ip_blkid))
+ {
+ block = BlockIdGetBlockNumber(&tuple->t_self.ip_blkid);
+ buffer = ReadBuffer(rel, block);
+ free_space += PageGetFreeSpace((Page) BufferGetPage(buffer));
+ ReleaseBuffer(buffer);
+ }
}
- else
+ heap_endscan(scan);
+ heap_close(rel, NoLock);
+
+ table_len = (double) nblocks *BLCKSZ;
+
+ if (nblocks == 0)
{
- dead_tuple_len += tuple->t_len;
- dead_tuple_count++;
+ tuple_percent = 0.0;
+ dead_tuple_percent = 0.0;
+ free_percent = 0.0;
}
-
- if (!BlockNumberIsValid(block) ||
- block != BlockIdGetBlockNumber(&tuple->t_self.ip_blkid))
+ else
{
- block = BlockIdGetBlockNumber(&tuple->t_self.ip_blkid);
- buffer = ReadBuffer(rel, block);
- free_space += PageGetFreeSpace((Page)BufferGetPage(buffer));
- ReleaseBuffer(buffer);
+ tuple_percent = (double) tuple_len *100.0 / table_len;
+ dead_tuple_percent = (double) dead_tuple_len *100.0 / table_len;
+ free_percent = (double) free_space *100.0 / table_len;
}
- }
- heap_endscan(scan);
- heap_close(rel, NoLock);
-
- table_len = (double)nblocks*BLCKSZ;
-
- if (nblocks == 0)
- {
- tuple_percent = 0.0;
- dead_tuple_percent = 0.0;
- free_percent = 0.0;
- }
- else
- {
- tuple_percent = (double)tuple_len*100.0/table_len;
- dead_tuple_percent = (double)dead_tuple_len*100.0/table_len;
- free_percent = (double)free_space*100.0/table_len;
- }
- elog(NOTICE,"physical length: %.2fMB live tuples: %u (%.2fMB, %.2f%%) dead tuples: %u (%.2fMB, %.2f%%) free/reusable space: %.2fMB (%.2f%%) overhead: %.2f%%",
+ elog(NOTICE, "physical length: %.2fMB live tuples: %u (%.2fMB, %.2f%%) dead tuples: %u (%.2fMB, %.2f%%) free/reusable space: %.2fMB (%.2f%%) overhead: %.2f%%",
- table_len/1024/1024, /* phsical length in MB */
+ table_len / 1024 / 1024, /* phsical length in MB */
- tuple_count, /* number of live tuples */
- (double)tuple_len/1024/1024, /* live tuples in MB */
- tuple_percent, /* live tuples in % */
+ tuple_count, /* number of live tuples */
+ (double) tuple_len / 1024 / 1024, /* live tuples in MB */
+ tuple_percent, /* live tuples in % */
- dead_tuple_count, /* number of dead tuples */
- (double)dead_tuple_len/1024/1024, /* dead tuples in MB */
- dead_tuple_percent, /* dead tuples in % */
+ dead_tuple_count, /* number of dead tuples */
+ (double) dead_tuple_len / 1024 / 1024, /* dead tuples in MB */
+ dead_tuple_percent, /* dead tuples in % */
- (double)free_space/1024/1024, /* free/available space in MB */
+ (double) free_space / 1024 / 1024, /* free/available space in
+ * MB */
- free_percent, /* free/available space in % */
+ free_percent, /* free/available space in % */
- /* overhead in % */
- (nblocks == 0)?0.0: 100.0
- - tuple_percent
- - dead_tuple_percent
- - free_percent);
+ /* overhead in % */
+ (nblocks == 0) ? 0.0 : 100.0
+ - tuple_percent
+ - dead_tuple_percent
+ - free_percent);
- PG_RETURN_FLOAT8(dead_tuple_percent);
+ PG_RETURN_FLOAT8(dead_tuple_percent);
}