From 92cfb7a4e0a7f925f59e4ba1a5c6a68d6eae86e4 Mon Sep 17 00:00:00 2001 From: Teodor Sigaev Date: Wed, 21 Dec 2022 11:03:43 +0300 Subject: [PATCH] Support v16devel Marina Polyakova --- online_analyze.c | 72 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/online_analyze.c b/online_analyze.c index 4b7fea6..5791dd6 100644 --- a/online_analyze.c +++ b/online_analyze.c @@ -132,9 +132,9 @@ typedef struct OnlineAnalyzeTableStat { Oid tableid; bool rereadStat; PgStat_Counter n_tuples; - PgStat_Counter changes_since_analyze; - TimestampTz autovac_analyze_timestamp; - TimestampTz analyze_timestamp; + PgStat_Counter mod_since_analyze; + TimestampTz last_autoanalyze_time; + TimestampTz last_analyze_time; } OnlineAnalyzeTableStat; static MemoryContext onlineAnalyzeMemoryContext = NULL; @@ -499,8 +499,8 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected) else if (operation == CK_ANALYZE) { /* only analyze */ - rstat->changes_since_analyze = 0; - rstat->analyze_timestamp = now; + rstat->mod_since_analyze = 0; + rstat->last_analyze_time = now; if (newTable) rstat->rereadStat = true; return; @@ -523,17 +523,36 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected) if (tabentry) { - rstat->n_tuples = tabentry->n_dead_tuples + tabentry->n_live_tuples; - rstat->changes_since_analyze = -#if PG_VERSION_NUM >= 90000 + rstat->n_tuples = +#if PG_VERSION_NUM >= 160000 + tabentry->dead_tuples + tabentry->live_tuples; +#else + tabentry->n_dead_tuples + tabentry->n_live_tuples; +#endif + + rstat->mod_since_analyze = +#if PG_VERSION_NUM >= 160000 + tabentry->mod_since_analyze; +#elif PG_VERSION_NUM >= 90000 tabentry->changes_since_analyze; #else tabentry->n_live_tuples + tabentry->n_dead_tuples - tabentry->last_anl_tuples; #endif - rstat->autovac_analyze_timestamp = + + rstat->last_autoanalyze_time = +#if PG_VERSION_NUM >= 160000 + tabentry->last_autoanalyze_time; +#else tabentry->autovac_analyze_timestamp; - rstat->analyze_timestamp = tabentry->analyze_timestamp; +#endif + + rstat->last_analyze_time = +#if PG_VERSION_NUM >= 160000 + tabentry->last_analyze_time; +#else + tabentry->analyze_timestamp; +#endif } } @@ -541,12 +560,12 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected) /* force analyze after truncate, fasttruncate already did analyze */ operation == CK_TRUNCATE || ( /* do not analyze too often, if both stamps are exceeded the go */ - TimestampDifferenceExceeds(rstat->analyze_timestamp, now, online_analyze_min_interval) && - TimestampDifferenceExceeds(rstat->autovac_analyze_timestamp, now, online_analyze_min_interval) && + TimestampDifferenceExceeds(rstat->last_analyze_time, now, online_analyze_min_interval) && + TimestampDifferenceExceeds(rstat->last_autoanalyze_time, now, online_analyze_min_interval) && /* do not analyze too small tables */ - rstat->n_tuples + rstat->changes_since_analyze + naffected > online_analyze_lower_limit && + rstat->n_tuples + rstat->mod_since_analyze + naffected > online_analyze_lower_limit && /* be in sync with relation_needs_vacanalyze */ - ((double)(rstat->changes_since_analyze + naffected)) >= + ((double)(rstat->mod_since_analyze + naffected)) >= online_analyze_scale_factor * ((double)rstat->n_tuples) + (double)online_analyze_threshold)) { @@ -634,8 +653,8 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected) ((double)secs) + ((double)microsecs)/1.0e6); } - rstat->autovac_analyze_timestamp = now; - rstat->changes_since_analyze = 0; + rstat->last_autoanalyze_time = now; + rstat->mod_since_analyze = 0; switch(operation) { @@ -659,8 +678,13 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected) /* update last analyze timestamp in local memory of backend */ if (tabentry) { +#if PG_VERSION_NUM >= 160000 + tabentry->last_analyze_time = now; + tabentry->mod_since_analyze = 0; +#else tabentry->analyze_timestamp = now; tabentry->changes_since_analyze = 0; +#endif } #if 0 /* force reload stat for new table */ @@ -672,25 +696,29 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected) { #if PG_VERSION_NUM >= 90000 if (tabentry) +#if PG_VERSION_NUM >= 160000 + tabentry->mod_since_analyze += naffected; +#else tabentry->changes_since_analyze += naffected; +#endif #endif switch(operation) { case CK_CREATE: case CK_INSERT: - rstat->changes_since_analyze += naffected; + rstat->mod_since_analyze += naffected; rstat->n_tuples += naffected; break; case CK_UPDATE: - rstat->changes_since_analyze += 2 * naffected; + rstat->mod_since_analyze += 2 * naffected; rstat->n_tuples += naffected; break; case CK_DELETE: - rstat->changes_since_analyze += naffected; + rstat->mod_since_analyze += naffected; break; case CK_TRUNCATE: case CK_FASTTRUNCATE: - rstat->changes_since_analyze = 0; + rstat->mod_since_analyze = 0; rstat->n_tuples = 0; break; default: @@ -995,8 +1023,8 @@ onlineAnalyzeHookerUtility( while((rstat = hash_seq_search(&hs)) != NULL) { - rstat->changes_since_analyze = 0; - rstat->analyze_timestamp = now; + rstat->mod_since_analyze = 0; + rstat->last_analyze_time = now; } } } -- 2.46.1