Add number of compressed hypertables to stat

This change includes telemetry fixes which extends HypertablesStat
with num_hypertables_compressed. It also updates the way how the
number of regular hypertables is calculated, which is now treated as a
non-compressed and not related to continuous aggregates.
This commit is contained in:
Dmitry Simonenko 2019-12-02 16:29:26 +03:00 committed by Erik Nordström
parent d5f5d92790
commit 11ef10332e
3 changed files with 26 additions and 48 deletions

View File

@ -391,49 +391,20 @@ hypertable_scan_limit_internal(ScanKeyData *scankey, int num_scankeys, int index
return ts_scanner_scan(&scanctx); return ts_scanner_scan(&scanctx);
} }
/* Number of user-created hypertables (doesn't count internal hypertables for compression or /* Is a user hypertable without compression or continuous aggs */
* continuous aggs) */ static bool
int hypertable_is_user_table(Hypertable *ht)
ts_number_of_user_hypertables()
{ {
int count = 0; ContinuousAggHypertableStatus status = ts_continuous_agg_hypertable_status(ht->fd.id);
ScanIterator iterator =
ts_scan_iterator_create(HYPERTABLE, AccessExclusiveLock, CurrentMemoryContext);
ts_scanner_foreach(&iterator) return !ht->fd.compressed && status != HypertableIsMaterialization;
{
TupleInfo *ti = ts_scan_iterator_tuple_info(&iterator);
Hypertable *ht = ts_hypertable_from_tupleinfo(ti);
if (!hypertable_is_compressed_or_materialization(ht))
count++;
}
return count;
}
/* Number of hypertables with compression enabled */
int
ts_number_compressed_hypertables()
{
int count = 0;
ScanIterator iterator =
ts_scan_iterator_create(HYPERTABLE, AccessExclusiveLock, CurrentMemoryContext);
ts_scanner_foreach(&iterator)
{
TupleInfo *ti = ts_scan_iterator_tuple_info(&iterator);
Hypertable *ht = ts_hypertable_from_tupleinfo(ti);
if (ht->fd.compressed_hypertable_id != INVALID_HYPERTABLE_ID)
count++;
}
return count;
} }
static ScanTupleResult static ScanTupleResult
hypertable_tuple_add_stat(TupleInfo *ti, void *data) hypertable_tuple_add_stat(TupleInfo *ti, void *data)
{ {
HypertablesStat *stat = data; HypertablesStat *stat = data;
Hypertable *ht = ts_hypertable_from_tupleinfo(ti);
bool isnull; bool isnull;
Datum datum; Datum datum;
@ -453,6 +424,7 @@ hypertable_tuple_add_stat(TupleInfo *ti, void *data)
break; break;
default: default:
Assert(replication_factor >= 1); Assert(replication_factor >= 1);
Assert(!ht->fd.compressed);
stat->num_hypertables_distributed++; stat->num_hypertables_distributed++;
if (replication_factor > 1) if (replication_factor > 1)
stat->num_hypertables_distributed_and_replicated++; stat->num_hypertables_distributed_and_replicated++;
@ -461,9 +433,16 @@ hypertable_tuple_add_stat(TupleInfo *ti, void *data)
} }
else else
{ {
stat->num_hypertables_regular++; /* Number of user-created hypertables (doesn't count internal hypertables
* for compression or continuous aggs) */
if (hypertable_is_user_table(ht))
stat->num_hypertables_user++;
} }
/* Number of hypertables with compression enabled */
if (TS_HYPERTABLE_HAS_COMPRESSION(ht))
stat->num_hypertables_compressed++;
return SCAN_CONTINUE; return SCAN_CONTINUE;
} }

View File

@ -63,13 +63,10 @@ enum Anum_create_hypertable
#define Natts_create_hypertable (_Anum_create_hypertable_max - 1) #define Natts_create_hypertable (_Anum_create_hypertable_max - 1)
extern int ts_number_of_user_hypertables(void);
extern int ts_number_compressed_hypertables(void);
typedef struct HypertablesStat typedef struct HypertablesStat
{ {
int num_hypertables_regular; int num_hypertables_user;
int num_hypertables_compressed;
int num_hypertables_distributed_members; int num_hypertables_distributed_members;
int num_hypertables_distributed; int num_hypertables_distributed;
int num_hypertables_distributed_and_replicated; int num_hypertables_distributed_and_replicated;

View File

@ -185,24 +185,26 @@ get_size(int64 size)
static char * static char *
get_num_hypertables() get_num_hypertables()
{ {
// HypertablesStat stat; HypertablesStat stat;
StringInfo buf = makeStringInfo(); StringInfo buf = makeStringInfo();
// memset(&stat, 0, sizeof(stat)); memset(&stat, 0, sizeof(stat));
// ts_number_of_hypertables(&stat); ts_number_of_hypertables(&stat);
//
// appendStringInfo(buf, "%d", stat.num_hypertables_total);
appendStringInfo(buf, "%d", ts_number_of_user_hypertables()); appendStringInfo(buf, "%d", stat.num_hypertables_user);
return buf->data; return buf->data;
} }
static char * static char *
get_num_compressed_hypertables() get_num_compressed_hypertables()
{ {
HypertablesStat stat;
StringInfo buf = makeStringInfo(); StringInfo buf = makeStringInfo();
appendStringInfo(buf, "%d", ts_number_compressed_hypertables()); memset(&stat, 0, sizeof(stat));
ts_number_of_hypertables(&stat);
appendStringInfo(buf, "%d", stat.num_hypertables_compressed);
return buf->data; return buf->data;
} }