PG-1907 Use int64 instead of uint64 for ids
There is no need to use unsigned values for hash ids as we cast them to signed values in SQL output anyways.pull/571/head
parent
e032dfaa6d
commit
f5003d3000
|
|
@ -97,7 +97,7 @@ static int hist_bucket_count_total;
|
||||||
static uint32 pgsm_client_ip = PGSM_INVALID_IP_MASK;
|
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;
|
int64 *nested_queryids;
|
||||||
char **nested_query_txts;
|
char **nested_query_txts;
|
||||||
List *lentries = NIL;
|
List *lentries = NIL;
|
||||||
|
|
||||||
|
|
@ -195,13 +195,13 @@ DECLARE_HOOK(void pgsm_ProcessUtility, PlannedStmt *pstmt, const char *queryStri
|
||||||
DestReceiver *dest,
|
DestReceiver *dest,
|
||||||
QueryCompletion *qc);
|
QueryCompletion *qc);
|
||||||
#endif
|
#endif
|
||||||
static uint64 pgsm_hash_string(const char *str, int len);
|
static int64 pgsm_hash_string(const char *str, int len);
|
||||||
char *unpack_sql_state(int sql_state);
|
char *unpack_sql_state(int sql_state);
|
||||||
|
|
||||||
static pgsmEntry *pgsm_create_hash_entry(uint64 bucket_id, uint64 queryid, PlanInfo *plan_info);
|
static pgsmEntry *pgsm_create_hash_entry(uint64 bucket_id, int64 queryid, PlanInfo *plan_info);
|
||||||
static void pgsm_add_to_list(pgsmEntry *entry, char *query_text, int query_len);
|
static void pgsm_add_to_list(pgsmEntry *entry, char *query_text, int query_len);
|
||||||
static pgsmEntry *pgsm_get_entry_for_query(uint64 queryid, PlanInfo *plan_info, const char *query_text, int query_len, bool create, CmdType cmd_type);
|
static pgsmEntry *pgsm_get_entry_for_query(int64 queryid, PlanInfo *plan_info, const char *query_text, int query_len, bool create, CmdType cmd_type);
|
||||||
static uint64 get_pgsm_query_id_hash(const char *norm_query, int len);
|
static int64 get_pgsm_query_id_hash(const char *norm_query, int len);
|
||||||
|
|
||||||
static void pgsm_cleanup_callback(void *arg);
|
static void pgsm_cleanup_callback(void *arg);
|
||||||
static void pgsm_store_error(const char *query, ErrorData *edata);
|
static void pgsm_store_error(const char *query, ErrorData *edata);
|
||||||
|
|
@ -248,7 +248,7 @@ static void RecordConstLocation(JumbleState *jstate, int location);
|
||||||
* relevant part of the string.
|
* relevant part of the string.
|
||||||
*/
|
*/
|
||||||
static const char *CleanQuerytext(const char *query, int *location, int *len);
|
static const char *CleanQuerytext(const char *query, int *location, int *len);
|
||||||
static uint64 get_query_id(JumbleState *jstate, Query *query);
|
static int64 get_query_id(JumbleState *jstate, Query *query);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char *generate_normalized_query(JumbleState *jstate, const char *query,
|
static char *generate_normalized_query(JumbleState *jstate, const char *query,
|
||||||
|
|
@ -336,7 +336,7 @@ _PG_init(void)
|
||||||
prev_ExecutorCheckPerms_hook = ExecutorCheckPerms_hook;
|
prev_ExecutorCheckPerms_hook = ExecutorCheckPerms_hook;
|
||||||
ExecutorCheckPerms_hook = HOOK(pgsm_ExecutorCheckPerms);
|
ExecutorCheckPerms_hook = HOOK(pgsm_ExecutorCheckPerms);
|
||||||
|
|
||||||
nested_queryids = (uint64 *) malloc(sizeof(uint64) * max_stack_depth);
|
nested_queryids = (int64 *) malloc(sizeof(int64) * max_stack_depth);
|
||||||
nested_query_txts = (char **) malloc(sizeof(char *) * max_stack_depth);
|
nested_query_txts = (char **) malloc(sizeof(char *) * max_stack_depth);
|
||||||
|
|
||||||
system_init = true;
|
system_init = true;
|
||||||
|
|
@ -431,7 +431,7 @@ pgsm_post_parse_analyze_internal(ParseState *pstate, Query *query, JumbleState *
|
||||||
if (query->utilityStmt)
|
if (query->utilityStmt)
|
||||||
{
|
{
|
||||||
if (pgsm_track_utility && IsA(query->utilityStmt, ExecuteStmt))
|
if (pgsm_track_utility && IsA(query->utilityStmt, ExecuteStmt))
|
||||||
query->queryId = UINT64CONST(0);
|
query->queryId = INT64CONST(0);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -448,8 +448,8 @@ pgsm_post_parse_analyze_internal(ParseState *pstate, Query *query, JumbleState *
|
||||||
* If we are unlucky enough to get a hash of zero, use 1 instead, to
|
* If we are unlucky enough to get a hash of zero, use 1 instead, to
|
||||||
* prevent confusion with the utility-statement case.
|
* prevent confusion with the utility-statement case.
|
||||||
*/
|
*/
|
||||||
if (query->queryId == UINT64CONST(0))
|
if (query->queryId == INT64CONST(0))
|
||||||
query->queryId = UINT64CONST(1);
|
query->queryId = INT64CONST(1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Let's save the normalized query so that we can save the data without in
|
* Let's save the normalized query so that we can save the data without in
|
||||||
|
|
@ -564,7 +564,7 @@ pgsm_ExecutorStart(QueryDesc *queryDesc, int eflags)
|
||||||
* utility statements.
|
* utility statements.
|
||||||
*/
|
*/
|
||||||
if (pgsm_enabled(nesting_level) &&
|
if (pgsm_enabled(nesting_level) &&
|
||||||
queryDesc->plannedstmt->queryId != UINT64CONST(0))
|
queryDesc->plannedstmt->queryId != INT64CONST(0))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Set up to track total elapsed time in ExecutorRun. Make sure the
|
* Set up to track total elapsed time in ExecutorRun. Make sure the
|
||||||
|
|
@ -626,7 +626,7 @@ pgsm_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count)
|
||||||
nesting_level--;
|
nesting_level--;
|
||||||
if (nesting_level >= 0 && nesting_level < max_stack_depth)
|
if (nesting_level >= 0 && nesting_level < max_stack_depth)
|
||||||
{
|
{
|
||||||
nested_queryids[nesting_level] = UINT64CONST(0);
|
nested_queryids[nesting_level] = INT64CONST(0);
|
||||||
if (nested_query_txts[nesting_level])
|
if (nested_query_txts[nesting_level])
|
||||||
free(nested_query_txts[nesting_level]);
|
free(nested_query_txts[nesting_level]);
|
||||||
nested_query_txts[nesting_level] = NULL;
|
nested_query_txts[nesting_level] = NULL;
|
||||||
|
|
@ -637,7 +637,7 @@ pgsm_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count)
|
||||||
nesting_level--;
|
nesting_level--;
|
||||||
if (nesting_level >= 0 && nesting_level < max_stack_depth)
|
if (nesting_level >= 0 && nesting_level < max_stack_depth)
|
||||||
{
|
{
|
||||||
nested_queryids[nesting_level] = UINT64CONST(0);
|
nested_queryids[nesting_level] = INT64CONST(0);
|
||||||
if (nested_query_txts[nesting_level])
|
if (nested_query_txts[nesting_level])
|
||||||
free(nested_query_txts[nesting_level]);
|
free(nested_query_txts[nesting_level]);
|
||||||
nested_query_txts[nesting_level] = NULL;
|
nested_query_txts[nesting_level] = NULL;
|
||||||
|
|
@ -698,7 +698,7 @@ pgsm_explain(QueryDesc *queryDesc)
|
||||||
static void
|
static void
|
||||||
pgsm_ExecutorEnd(QueryDesc *queryDesc)
|
pgsm_ExecutorEnd(QueryDesc *queryDesc)
|
||||||
{
|
{
|
||||||
uint64 queryId = queryDesc->plannedstmt->queryId;
|
int64 queryId = queryDesc->plannedstmt->queryId;
|
||||||
SysInfo sys_info;
|
SysInfo sys_info;
|
||||||
PlanInfo plan_info;
|
PlanInfo plan_info;
|
||||||
PlanInfo *plan_ptr = NULL;
|
PlanInfo *plan_ptr = NULL;
|
||||||
|
|
@ -733,12 +733,12 @@ pgsm_ExecutorEnd(QueryDesc *queryDesc)
|
||||||
MemoryContextSwitchTo(oldctx);
|
MemoryContextSwitchTo(oldctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (queryId != UINT64CONST(0) && queryDesc->totaltime && pgsm_enabled(nesting_level))
|
if (queryId != INT64CONST(0) && queryDesc->totaltime && pgsm_enabled(nesting_level))
|
||||||
{
|
{
|
||||||
entry = pgsm_get_entry_for_query(queryId, plan_ptr, (char *) queryDesc->sourceText, strlen(queryDesc->sourceText), true, queryDesc->operation);
|
entry = pgsm_get_entry_for_query(queryId, plan_ptr, (char *) queryDesc->sourceText, strlen(queryDesc->sourceText), true, queryDesc->operation);
|
||||||
if (!entry)
|
if (!entry)
|
||||||
{
|
{
|
||||||
elog(DEBUG2, "[pg_stat_monitor] pgsm_ExecutorEnd: Failed to find entry for [%lu] %s.", queryId, queryDesc->sourceText);
|
elog(DEBUG2, "[pg_stat_monitor] pgsm_ExecutorEnd: Failed to find entry for [%lld] %s.", queryId, queryDesc->sourceText);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -861,7 +861,7 @@ static PlannedStmt *
|
||||||
pgsm_planner_hook(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams)
|
pgsm_planner_hook(Query *parse, const char *query_string, int cursorOptions, ParamListInfo boundParams)
|
||||||
{
|
{
|
||||||
PlannedStmt *result;
|
PlannedStmt *result;
|
||||||
|
int64 queryId = parse->queryId;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We can't process the query if no query_string is provided, as
|
* We can't process the query if no query_string is provided, as
|
||||||
|
|
@ -883,7 +883,7 @@ pgsm_planner_hook(Query *parse, const char *query_string, int cursorOptions, Par
|
||||||
enabled = pgsm_enabled(plan_nested_level + nesting_level);
|
enabled = pgsm_enabled(plan_nested_level + nesting_level);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (enabled && pgsm_track_planning && query_string && parse->queryId != UINT64CONST(0))
|
if (enabled && pgsm_track_planning && query_string && queryId != INT64CONST(0))
|
||||||
{
|
{
|
||||||
pgsmEntry *entry = NULL;
|
pgsmEntry *entry = NULL;
|
||||||
instr_time start;
|
instr_time start;
|
||||||
|
|
@ -904,7 +904,7 @@ pgsm_planner_hook(Query *parse, const char *query_string, int cursorOptions, Par
|
||||||
INSTR_TIME_SET_CURRENT(start);
|
INSTR_TIME_SET_CURRENT(start);
|
||||||
|
|
||||||
if (MemoryContextIsValid(MessageContext))
|
if (MemoryContextIsValid(MessageContext))
|
||||||
entry = pgsm_get_entry_for_query(parse->queryId, NULL, query_string, strlen(query_string), true, parse->commandType);
|
entry = pgsm_get_entry_for_query(queryId, NULL, query_string, strlen(query_string), true, parse->commandType);
|
||||||
|
|
||||||
#if PG_VERSION_NUM >= 170000
|
#if PG_VERSION_NUM >= 170000
|
||||||
nesting_level++;
|
nesting_level++;
|
||||||
|
|
@ -1026,7 +1026,7 @@ pgsm_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
Node *parsetree = pstmt->utilityStmt;
|
Node *parsetree = pstmt->utilityStmt;
|
||||||
uint64 queryId = 0;
|
int64 queryId = 0;
|
||||||
bool enabled = pgsm_track_utility && pgsm_enabled(nesting_level);
|
bool enabled = pgsm_track_utility && pgsm_enabled(nesting_level);
|
||||||
|
|
||||||
#if PG_VERSION_NUM < 140000
|
#if PG_VERSION_NUM < 140000
|
||||||
|
|
@ -1046,7 +1046,7 @@ pgsm_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
|
||||||
* level.
|
* level.
|
||||||
*/
|
*/
|
||||||
if (enabled)
|
if (enabled)
|
||||||
pstmt->queryId = UINT64CONST(0);
|
pstmt->queryId = INT64CONST(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -1265,11 +1265,10 @@ pgsm_ProcessUtility(PlannedStmt *pstmt, const char *queryString,
|
||||||
* identifying the query, without normalizing constants. Used when hashing
|
* identifying the query, without normalizing constants. Used when hashing
|
||||||
* utility statements.
|
* utility statements.
|
||||||
*/
|
*/
|
||||||
static uint64
|
static int64
|
||||||
pgsm_hash_string(const char *str, int len)
|
pgsm_hash_string(const char *str, int len)
|
||||||
{
|
{
|
||||||
return DatumGetUInt64(hash_any_extended((const unsigned char *) str,
|
return DatumGetInt64(hash_any_extended((const unsigned char *) str, len, 0));
|
||||||
len, 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static PgBackendStatus *
|
static PgBackendStatus *
|
||||||
|
|
@ -1636,7 +1635,7 @@ static void
|
||||||
pgsm_store_error(const char *query, ErrorData *edata)
|
pgsm_store_error(const char *query, ErrorData *edata)
|
||||||
{
|
{
|
||||||
pgsmEntry *entry;
|
pgsmEntry *entry;
|
||||||
uint64 queryid = 0;
|
int64 queryid = 0;
|
||||||
int len = strlen(query);
|
int len = strlen(query);
|
||||||
|
|
||||||
if (!query || len == 0)
|
if (!query || len == 0)
|
||||||
|
|
@ -1670,7 +1669,7 @@ pgsm_add_to_list(pgsmEntry *entry, char *query_text, int query_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
static pgsmEntry *
|
static pgsmEntry *
|
||||||
pgsm_get_entry_for_query(uint64 queryid, PlanInfo *plan_info, const char *query_text, int query_len, bool create, CmdType cmd_type)
|
pgsm_get_entry_for_query(int64 queryid, PlanInfo *plan_info, const char *query_text, int query_len, bool create, CmdType cmd_type)
|
||||||
{
|
{
|
||||||
pgsmEntry *entry = NULL;
|
pgsmEntry *entry = NULL;
|
||||||
ListCell *lc = NULL;
|
ListCell *lc = NULL;
|
||||||
|
|
@ -1729,7 +1728,7 @@ pgsm_cleanup_callback(void *arg)
|
||||||
* The bucket_id may not be known at this stage. So pass any value that you may wish.
|
* The bucket_id may not be known at this stage. So pass any value that you may wish.
|
||||||
*/
|
*/
|
||||||
static pgsmEntry *
|
static pgsmEntry *
|
||||||
pgsm_create_hash_entry(uint64 bucket_id, uint64 queryid, PlanInfo *plan_info)
|
pgsm_create_hash_entry(uint64 bucket_id, int64 queryid, PlanInfo *plan_info)
|
||||||
{
|
{
|
||||||
pgsmEntry *entry;
|
pgsmEntry *entry;
|
||||||
int sec_ctx;
|
int sec_ctx;
|
||||||
|
|
@ -1898,7 +1897,7 @@ pgsm_store(pgsmEntry *entry)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
entry->key.parentid = UINT64CONST(0);
|
entry->key.parentid = INT64CONST(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if PG_VERSION_NUM >= 170000
|
#if PG_VERSION_NUM >= 170000
|
||||||
|
|
@ -2189,13 +2188,13 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo,
|
||||||
Counters tmp;
|
Counters tmp;
|
||||||
pgsmHashKey tmpkey;
|
pgsmHashKey tmpkey;
|
||||||
double stddev;
|
double stddev;
|
||||||
uint64 queryid = entry->key.queryid;
|
int64 queryid = entry->key.queryid;
|
||||||
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;
|
||||||
uint64 ip = (uint64) entry->key.ip;
|
uint32 ip = entry->key.ip;
|
||||||
uint64 planid = entry->key.planid;
|
int64 planid = entry->key.planid;
|
||||||
uint64 pgsm_query_id = entry->pgsm_query_id;
|
int64 pgsm_query_id = entry->pgsm_query_id;
|
||||||
dsa_area *query_dsa_area;
|
dsa_area *query_dsa_area;
|
||||||
char *query_ptr;
|
char *query_ptr;
|
||||||
char *query_txt = NULL;
|
char *query_txt = NULL;
|
||||||
|
|
@ -2241,7 +2240,7 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* read the parent query text if any */
|
/* read the parent query text if any */
|
||||||
if (tmpkey.parentid != UINT64CONST(0))
|
if (tmpkey.parentid != INT64CONST(0))
|
||||||
{
|
{
|
||||||
if (DsaPointerIsValid(tmp.info.parent_query))
|
if (DsaPointerIsValid(tmp.info.parent_query))
|
||||||
{
|
{
|
||||||
|
|
@ -2277,12 +2276,12 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo,
|
||||||
nulls[i++] = true;
|
nulls[i++] = true;
|
||||||
|
|
||||||
/* queryid at column number 6 */
|
/* queryid at column number 6 */
|
||||||
values[i++] = UInt64GetDatum(queryid);
|
values[i++] = Int64GetDatum(queryid);
|
||||||
|
|
||||||
/* planid at column number 7 */
|
/* planid at column number 7 */
|
||||||
if (planid)
|
if (planid)
|
||||||
{
|
{
|
||||||
values[i++] = UInt64GetDatum(planid);
|
values[i++] = Int64GetDatum(planid);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -2322,14 +2321,14 @@ pg_stat_monitor_internal(FunctionCallInfo fcinfo,
|
||||||
|
|
||||||
/* pgsm_query_id at column number 10 */
|
/* pgsm_query_id at column number 10 */
|
||||||
if (pgsm_query_id)
|
if (pgsm_query_id)
|
||||||
values[i++] = UInt64GetDatum(pgsm_query_id);
|
values[i++] = Int64GetDatum(pgsm_query_id);
|
||||||
else
|
else
|
||||||
nulls[i++] = true;
|
nulls[i++] = true;
|
||||||
|
|
||||||
/* parentid at column number 11 */
|
/* parentid at column number 11 */
|
||||||
if (tmpkey.parentid != UINT64CONST(0))
|
if (tmpkey.parentid != INT64CONST(0))
|
||||||
{
|
{
|
||||||
values[i++] = UInt64GetDatum(tmpkey.parentid);
|
values[i++] = Int64GetDatum(tmpkey.parentid);
|
||||||
values[i++] = CStringGetTextDatum(parent_query_txt);
|
values[i++] = CStringGetTextDatum(parent_query_txt);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -2630,13 +2629,13 @@ get_next_wbucket(pgsmSharedState *pgsm)
|
||||||
* newline, tab, or any other type. Trailing and leading spaces
|
* newline, tab, or any other type. Trailing and leading spaces
|
||||||
* are also removed before calculating the hash.
|
* are also removed before calculating the hash.
|
||||||
*/
|
*/
|
||||||
uint64
|
int64
|
||||||
get_pgsm_query_id_hash(const char *norm_query, int norm_len)
|
get_pgsm_query_id_hash(const char *norm_query, int norm_len)
|
||||||
{
|
{
|
||||||
char *query;
|
char *query;
|
||||||
char *q_iter;
|
char *q_iter;
|
||||||
char *norm_q_iter = (char *) norm_query;
|
char *norm_q_iter = (char *) norm_query;
|
||||||
uint64 pgsm_query_id = 0;
|
int64 pgsm_query_id = 0;
|
||||||
|
|
||||||
if (!pgsm_enable_pgsm_query_id)
|
if (!pgsm_enable_pgsm_query_id)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -3964,10 +3963,10 @@ extract_query_comments(const char *query, char *comments, size_t max_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if PG_VERSION_NUM < 140000
|
#if PG_VERSION_NUM < 140000
|
||||||
static uint64
|
static int64
|
||||||
get_query_id(JumbleState *jstate, Query *query)
|
get_query_id(JumbleState *jstate, Query *query)
|
||||||
{
|
{
|
||||||
uint64 queryid;
|
int64 queryid;
|
||||||
|
|
||||||
/* Set up workspace for query jumbling */
|
/* Set up workspace for query jumbling */
|
||||||
jstate->jumble = (unsigned char *) palloc(JUMBLE_SIZE);
|
jstate->jumble = (unsigned char *) palloc(JUMBLE_SIZE);
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@ typedef struct CallTime
|
||||||
|
|
||||||
typedef struct PlanInfo
|
typedef struct PlanInfo
|
||||||
{
|
{
|
||||||
uint64 planid; /* plan identifier */
|
int64 planid; /* plan identifier */
|
||||||
char plan_text[PLAN_TEXT_LEN]; /* plan text */
|
char plan_text[PLAN_TEXT_LEN]; /* plan text */
|
||||||
size_t plan_len; /* strlen(plan_text) */
|
size_t plan_len; /* strlen(plan_text) */
|
||||||
} PlanInfo;
|
} PlanInfo;
|
||||||
|
|
@ -192,14 +192,14 @@ typedef struct PlanInfo
|
||||||
typedef struct pgsmHashKey
|
typedef struct pgsmHashKey
|
||||||
{
|
{
|
||||||
uint64 bucket_id; /* bucket number */
|
uint64 bucket_id; /* bucket number */
|
||||||
uint64 queryid; /* query identifier */
|
int64 queryid; /* query identifier */
|
||||||
uint64 planid; /* plan identifier */
|
int64 planid; /* plan identifier */
|
||||||
uint64 appid; /* hash of application name */
|
int64 appid; /* hash of application name */
|
||||||
Oid userid; /* user OID */
|
Oid userid; /* user OID */
|
||||||
Oid dbid; /* database OID */
|
Oid dbid; /* database OID */
|
||||||
uint32 ip; /* client ip address */
|
uint32 ip; /* client ip address */
|
||||||
bool toplevel; /* query executed at top level */
|
bool toplevel; /* query executed at top level */
|
||||||
uint64 parentid; /* parent queryid of current query */
|
int64 parentid; /* parent queryId of current query */
|
||||||
} pgsmHashKey;
|
} pgsmHashKey;
|
||||||
|
|
||||||
typedef struct QueryInfo
|
typedef struct QueryInfo
|
||||||
|
|
@ -337,7 +337,7 @@ typedef struct Counters
|
||||||
typedef struct pgsmEntry
|
typedef struct pgsmEntry
|
||||||
{
|
{
|
||||||
pgsmHashKey key; /* hash key of entry - MUST BE FIRST */
|
pgsmHashKey key; /* hash key of entry - MUST BE FIRST */
|
||||||
uint64 pgsm_query_id; /* pgsm generate normalized query hash */
|
int64 pgsm_query_id; /* pgsm generate normalized query hash */
|
||||||
char datname[NAMEDATALEN]; /* database name */
|
char datname[NAMEDATALEN]; /* database name */
|
||||||
char username[NAMEDATALEN]; /* user name */
|
char username[NAMEDATALEN]; /* user name */
|
||||||
Counters counters; /* the statistics for this query */
|
Counters counters; /* the statistics for this query */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue