mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
pgindent run on all C files. Java run to follow. initdb/regression
tests pass.
This commit is contained in:
@ -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);
|
||||
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;
|
||||
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 % */
|
||||
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);
|
||||
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))
|
||||
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);
|
||||
}
|
||||
}
|
||||
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
|
||||
{
|
||||
dead_tuple_len += tuple->t_len;
|
||||
dead_tuple_count++;
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
heap_endscan(scan);
|
||||
heap_close(rel, NoLock);
|
||||
elog(NOTICE, "physical length: %.2fMB live tuples: %u (%.2fMB, %.2f%%) dead tuples: %u (%.2fMB, %.2f%%) free/reusable space: %.2fMB (%.2f%%) overhead: %.2f%%",
|
||||
|
||||
table_len = (double)nblocks*BLCKSZ;
|
||||
table_len / 1024 / 1024, /* phsical length in MB */
|
||||
|
||||
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;
|
||||
}
|
||||
tuple_count, /* number of live tuples */
|
||||
(double) tuple_len / 1024 / 1024, /* live tuples in MB */
|
||||
tuple_percent, /* live tuples in % */
|
||||
|
||||
elog(NOTICE,"physical length: %.2fMB live tuples: %u (%.2fMB, %.2f%%) dead tuples: %u (%.2fMB, %.2f%%) free/reusable space: %.2fMB (%.2f%%) overhead: %.2f%%",
|
||||
dead_tuple_count, /* number of dead tuples */
|
||||
(double) dead_tuple_len / 1024 / 1024, /* dead tuples in MB */
|
||||
dead_tuple_percent, /* dead tuples in % */
|
||||
|
||||
table_len/1024/1024, /* phsical length in MB */
|
||||
(double) free_space / 1024 / 1024, /* free/available space in
|
||||
* MB */
|
||||
|
||||
tuple_count, /* number of live tuples */
|
||||
(double)tuple_len/1024/1024, /* live tuples in MB */
|
||||
tuple_percent, /* live tuples in % */
|
||||
free_percent, /* free/available space in % */
|
||||
|
||||
dead_tuple_count, /* number of dead tuples */
|
||||
(double)dead_tuple_len/1024/1024, /* dead tuples in MB */
|
||||
dead_tuple_percent, /* dead tuples in % */
|
||||
/* overhead in % */
|
||||
(nblocks == 0) ? 0.0 : 100.0
|
||||
- tuple_percent
|
||||
- dead_tuple_percent
|
||||
- free_percent);
|
||||
|
||||
(double)free_space/1024/1024, /* free/available space in MB */
|
||||
|
||||
free_percent, /* free/available space in % */
|
||||
|
||||
/* 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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user