projects
/
online_analyze.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6373b76
)
Support v16devel
author
Teodor Sigaev
<teodor@sigaev.ru>
Wed, 21 Dec 2022 08:03:43 +0000
(11:03 +0300)
committer
Teodor Sigaev
<teodor@sigaev.ru>
Wed, 21 Dec 2022 08:03:43 +0000
(11:03 +0300)
Marina Polyakova
online_analyze.c
patch
|
blob
|
history
diff --git
a/online_analyze.c
b/online_analyze.c
index
4b7fea6
..
5791dd6
100644
(file)
--- a/
online_analyze.c
+++ b/
online_analyze.c
@@
-132,9
+132,9
@@
typedef struct OnlineAnalyzeTableStat {
Oid tableid;
bool rereadStat;
PgStat_Counter n_tuples;
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;
} OnlineAnalyzeTableStat;
static MemoryContext onlineAnalyzeMemoryContext = NULL;
@@
-499,8
+499,8
@@
makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
else if (operation == CK_ANALYZE)
{
/* only analyze */
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;
if (newTable)
rstat->rereadStat = true;
return;
@@
-523,17
+523,36
@@
makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
if (tabentry)
{
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
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;
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 */
/* 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 */
/* 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 */
/* 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))
{
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);
}
((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)
{
switch(operation)
{
@@
-659,8
+678,13
@@
makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
/* update last analyze timestamp in local memory of backend */
if (tabentry)
{
/* 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;
tabentry->analyze_timestamp = now;
tabentry->changes_since_analyze = 0;
+#endif
}
#if 0
/* force reload stat for new table */
}
#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 >= 90000
if (tabentry)
+#if PG_VERSION_NUM >= 160000
+ tabentry->mod_since_analyze += naffected;
+#else
tabentry->changes_since_analyze += naffected;
tabentry->changes_since_analyze += naffected;
+#endif
#endif
switch(operation)
{
case CK_CREATE:
case CK_INSERT:
#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->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->n_tuples += naffected;
break;
case CK_DELETE:
- rstat->
changes
_since_analyze += naffected;
+ rstat->
mod
_since_analyze += naffected;
break;
case CK_TRUNCATE:
case CK_FASTTRUNCATE:
break;
case CK_TRUNCATE:
case CK_FASTTRUNCATE:
- rstat->
changes
_since_analyze = 0;
+ rstat->
mod
_since_analyze = 0;
rstat->n_tuples = 0;
break;
default:
rstat->n_tuples = 0;
break;
default:
@@
-995,8
+1023,8
@@
onlineAnalyzeHookerUtility(
while((rstat = hash_seq_search(&hs)) != NULL)
{
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;
}
}
}
}
}
}