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:
b7bbbef
)
improve support for fasttruncate
author
Teodor Sigaev
<teodor@sigaev.ru>
Tue, 11 Apr 2017 12:16:50 +0000
(15:16 +0300)
committer
Teodor Sigaev
<teodor@sigaev.ru>
Tue, 11 Apr 2017 12:16:50 +0000
(15:16 +0300)
online_analyze.c
patch
|
blob
|
history
diff --git
a/online_analyze.c
b/online_analyze.c
index
2ef4193
..
22c43e6
100644
(file)
--- a/
online_analyze.c
+++ b/
online_analyze.c
@@
-82,9
+82,11
@@
typedef enum CmdKind
CK_INSERT = CMD_INSERT,
CK_DELETE = CMD_DELETE,
CK_TRUNCATE,
CK_INSERT = CMD_INSERT,
CK_DELETE = CMD_DELETE,
CK_TRUNCATE,
+ CK_FASTTRUNCATE,
CK_CREATE
} CmdKind;
CK_CREATE
} CmdKind;
+
typedef enum
{
OATT_ALL = 0x03,
typedef enum
{
OATT_ALL = 0x03,
@@
-368,6
+370,9
@@
makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
if (relOid == InvalidOid)
return;
if (relOid == InvalidOid)
return;
+ elog(NOTICE,"makeAnalyze operation: %d naffected: %d",
+ operation, (int32)naffected);
+
if (naffected == 0)
/* return if there is no changes */
return;
if (naffected == 0)
/* return if there is no changes */
return;
@@
-443,12
+448,10
@@
makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
Assert(rstat->tableid == relOid);
Assert(rstat->tableid == relOid);
- elog(NOTICE,"makeAnalyze op:%d %u", operation, naffected);
-
- if (operation != CK_TRUNCATE &&
- (found == false || rstat->rereadStat == true))
+ /* do not rered data if it was a truncation */
+ if (operation != CK_TRUNCATE && operation != CK_FASTTRUNCATE &&
+ (newTable == true || rstat->rereadStat == true))
{
{
-
rstat->rereadStat = false;
tabentry = pgstat_fetch_stat_tabentry(relOid);
rstat->rereadStat = false;
tabentry = pgstat_fetch_stat_tabentry(relOid);
@@
-470,7
+473,7
@@
makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
}
if (newTable ||
}
if (newTable ||
- /* force analyze
from after truncat
e */
+ /* force analyze
after truncate, fasttruncate already did analyz
e */
operation == CK_TRUNCATE || (
/* do not analyze too often, if both stamps are exceeded the go */
TimestampDifferenceExceeds(rstat->analyze_timestamp, now, online_analyze_min_interval) &&
operation == CK_TRUNCATE || (
/* do not analyze too often, if both stamps are exceeded the go */
TimestampDifferenceExceeds(rstat->analyze_timestamp, now, online_analyze_min_interval) &&
@@
-553,20
+556,16
@@
makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
switch(operation)
{
switch(operation)
{
+ case CK_CREATE:
case CK_INSERT:
case CK_INSERT:
- rstat->n_tuples += naffected;
- rstat->rereadStat = false;
- break;
case CK_UPDATE:
rstat->n_tuples += naffected;
case CK_UPDATE:
rstat->n_tuples += naffected;
- rstat->rereadStat = true;
- break;
case CK_DELETE:
case CK_DELETE:
- rstat->rereadStat =
true
;
+ rstat->rereadStat =
(reltype == OATT_PERSISTENT)
;
break;
case CK_TRUNCATE:
break;
case CK_TRUNCATE:
+ case CK_FASTTRUNCATE:
rstat->n_tuples = 0;
rstat->n_tuples = 0;
- rstat->rereadStat = false;
break;
default:
break;
break;
default:
break;
@@
-592,6
+591,7
@@
makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
#endif
switch(operation)
{
#endif
switch(operation)
{
+ case CK_CREATE:
case CK_INSERT:
rstat->changes_since_analyze += naffected;
rstat->n_tuples += naffected;
case CK_INSERT:
rstat->changes_since_analyze += naffected;
rstat->n_tuples += naffected;
@@
-603,6
+603,7
@@
makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
rstat->changes_since_analyze += naffected;
break;
case CK_TRUNCATE:
rstat->changes_since_analyze += naffected;
break;
case CK_TRUNCATE:
+ case CK_FASTTRUNCATE:
rstat->changes_since_analyze = 0;
rstat->n_tuples = 0;
break;
rstat->changes_since_analyze = 0;
rstat->n_tuples = 0;
break;
@@
-675,6
+676,7
@@
onlineAnalyzeHooker(QueryDesc *queryDesc)
if (queryDesc->estate)
naffected = queryDesc->estate->es_processed;
if (queryDesc->estate)
naffected = queryDesc->estate->es_processed;
+#if PG_VERSION_NUM >= 90200
if (online_analyze_enable &&
(constval = isFastTruncateCall(queryDesc)) != NULL)
{
if (online_analyze_enable &&
(constval = isFastTruncateCall(queryDesc)) != NULL)
{
@@
-684,12
+686,11
@@
onlineAnalyzeHooker(QueryDesc *queryDesc)
makeRangeVarFromNameList(stringToQualifiedNameList(tblname));
makeAnalyze(RangeVarGetRelid(tblvar,
makeRangeVarFromNameList(stringToQualifiedNameList(tblname));
makeAnalyze(RangeVarGetRelid(tblvar,
-#if PG_VERSION_NUM >= 90200
NoLock,
NoLock,
-#endif
false),
false),
- CK_TRUNCATE, -1);
+ CK_
FAST
TRUNCATE, -1);
}
}
+#endif
if (online_analyze_enable && queryDesc->plannedstmt &&
(queryDesc->operation == CMD_INSERT ||
if (online_analyze_enable && queryDesc->plannedstmt &&
(queryDesc->operation == CMD_INSERT ||