Merge pull request #382 from EngineeredVirus/main
PG-542: Performance improvement of pg_stat_monitor.pull/383/head
commit
ce32f6f15d
|
@ -87,7 +87,7 @@ CREATE FUNCTION pg_stat_monitor_internal(
|
||||||
OUT username text,
|
OUT username text,
|
||||||
OUT dbid oid,
|
OUT dbid oid,
|
||||||
OUT datname text,
|
OUT datname text,
|
||||||
OUT client_ip int4,
|
OUT client_ip int8,
|
||||||
|
|
||||||
OUT queryid int8, -- 4
|
OUT queryid int8, -- 4
|
||||||
OUT planid int8,
|
OUT planid int8,
|
||||||
|
|
|
@ -63,6 +63,11 @@ do \
|
||||||
strlcpy((char *)_str_dst[i], _str_src[i], _len2); \
|
strlcpy((char *)_str_dst[i], _str_src[i], _len2); \
|
||||||
}while(0)
|
}while(0)
|
||||||
|
|
||||||
|
#define PGSM_INVALID_IP_MASK 0xFFFFFFFF
|
||||||
|
|
||||||
|
#define pgsm_client_ip_is_valid() \
|
||||||
|
(pgsm_client_ip != PGSM_INVALID_IP_MASK)
|
||||||
|
|
||||||
/*---- Initicalization Function Declarations ----*/
|
/*---- Initicalization Function Declarations ----*/
|
||||||
void _PG_init(void);
|
void _PG_init(void);
|
||||||
|
|
||||||
|
@ -81,6 +86,8 @@ static int hist_bucket_count_user;
|
||||||
static int hist_bucket_count_total;
|
static int hist_bucket_count_total;
|
||||||
int64 hist_bucket_timings[MAX_RESPONSE_BUCKET + 2][2]; /* Start and end timings */
|
int64 hist_bucket_timings[MAX_RESPONSE_BUCKET + 2][2]; /* Start and end timings */
|
||||||
|
|
||||||
|
static uint32 pgsm_client_ip = PGSM_INVALID_IP_MASK;
|
||||||
|
|
||||||
/* The array to store outer layer query id*/
|
/* The array to store outer layer query id*/
|
||||||
uint64 *nested_queryids;
|
uint64 *nested_queryids;
|
||||||
char **nested_query_txts;
|
char **nested_query_txts;
|
||||||
|
@ -1382,7 +1389,7 @@ pgsm_update_entry(pgsmEntry *entry,
|
||||||
e->counters.time.max_time = exec_total_time;
|
e->counters.time.max_time = exec_total_time;
|
||||||
}
|
}
|
||||||
|
|
||||||
index = get_histogram_bucket(exec_total_time);
|
index = get_histogram_bucket(exec_total_time * 1000.0);
|
||||||
e->counters.resp_calls[index]++;
|
e->counters.resp_calls[index]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1615,8 +1622,6 @@ pgsm_create_hash_entry(uint64 bucket_id, uint64 queryid, PlanInfo *plan_info)
|
||||||
MemoryContext oldctx;
|
MemoryContext oldctx;
|
||||||
char *datname = NULL;
|
char *datname = NULL;
|
||||||
char *username = NULL;
|
char *username = NULL;
|
||||||
static bool is_ip_set = false;
|
|
||||||
static uint32 ip = 0;
|
|
||||||
|
|
||||||
/* Create an entry in the pgsm memory context */
|
/* Create an entry in the pgsm memory context */
|
||||||
oldctx = MemoryContextSwitchTo(pgsm_get_ss()->pgsm_mem_cxt);
|
oldctx = MemoryContextSwitchTo(pgsm_get_ss()->pgsm_mem_cxt);
|
||||||
|
@ -1633,13 +1638,10 @@ pgsm_create_hash_entry(uint64 bucket_id, uint64 queryid, PlanInfo *plan_info)
|
||||||
entry->key.appid = pgsm_hash_string((const char *)app_name_ptr, app_name_len);
|
entry->key.appid = pgsm_hash_string((const char *)app_name_ptr, app_name_len);
|
||||||
|
|
||||||
/* client address */
|
/* client address */
|
||||||
if (!is_ip_set)
|
if (!pgsm_client_ip_is_valid())
|
||||||
{
|
pgsm_client_ip = pg_get_client_addr(&found_client_addr);
|
||||||
ip = pg_get_client_addr(&found_client_addr);
|
|
||||||
is_ip_set = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry->key.ip = ip;
|
entry->key.ip = pgsm_client_ip;
|
||||||
|
|
||||||
/* PlanID, if there is one */
|
/* PlanID, if there is one */
|
||||||
entry->key.planid = plan_info ? plan_info->planid : 0;
|
entry->key.planid = plan_info ? plan_info->planid : 0;
|
||||||
|
@ -2012,7 +2014,7 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo,
|
||||||
int64 bucketid = entry->key.bucket_id;
|
int64 bucketid = entry->key.bucket_id;
|
||||||
Oid dbid = entry->key.dbid;
|
Oid dbid = entry->key.dbid;
|
||||||
Oid userid = entry->key.userid;
|
Oid userid = entry->key.userid;
|
||||||
uint32 ip = entry->key.ip;
|
uint64 ip = (uint64)entry->key.ip;
|
||||||
uint64 planid = entry->key.planid;
|
uint64 planid = entry->key.planid;
|
||||||
uint64 pgsm_query_id = entry->pgsm_query_id;
|
uint64 pgsm_query_id = entry->pgsm_query_id;
|
||||||
dsa_area *query_dsa_area;
|
dsa_area *query_dsa_area;
|
||||||
|
|
Loading…
Reference in New Issue