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:
def4c58
)
cleanup formatting
author
Teodor Sigaev
<teodor@sigaev.ru>
Mon, 29 Aug 2016 14:25:16 +0000
(17:25 +0300)
committer
Teodor Sigaev
<teodor@sigaev.ru>
Mon, 29 Aug 2016 14:25:16 +0000
(17:25 +0300)
online_analyze.c
patch
|
blob
|
history
diff --git
a/online_analyze.c
b/online_analyze.c
index
4c3e044
..
0414a81
100644
(file)
--- a/
online_analyze.c
+++ b/
online_analyze.c
@@
-6,13
+6,13
@@
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ *
notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
+ *
notice, this list of conditions and the following disclaimer in the
+ *
documentation and/or other materials provided with the distribution.
* 3. Neither the name of the author nor the names of any co-contributors
* 3. Neither the name of the author nor the names of any co-contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
+ *
may be used to endorse or promote products derived from this software
+ *
without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY CONTRIBUTORS ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
*
* THIS SOFTWARE IS PROVIDED BY CONTRIBUTORS ``AS IS'' AND ANY EXPRESS
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@
-74,7
+74,7
@@
typedef enum
OATT_NONE = 0x00
} OnlineAnalyzeTableType;
OATT_NONE = 0x00
} OnlineAnalyzeTableType;
-static const struct config_enum_entry online_analyze_table_type_options[] =
+static const struct config_enum_entry online_analyze_table_type_options[] =
{
{"all", OATT_ALL, false},
{"persistent", OATT_PERSISTENT, false},
{
{"all", OATT_ALL, false},
{"persistent", OATT_PERSISTENT, false},
@@
-105,11
+105,11
@@
oid_cmp(const void *a, const void *b)
static const char *
tableListAssign(const char * newval, bool doit, TableList *tbl)
{
static const char *
tableListAssign(const char * newval, bool doit, TableList *tbl)
{
- char *rawname;
- List *namelist;
- ListCell *l;
- Oid *newOids = NULL;
- int nOids = 0,
+ char
*rawname;
+ List
*namelist;
+ ListCell
*l;
+ Oid
*newOids = NULL;
+ int
nOids = 0,
i = 0;
rawname = pstrdup(newval);
i = 0;
rawname = pstrdup(newval);
@@
-122,18
+122,19
@@
tableListAssign(const char * newval, bool doit, TableList *tbl)
nOids = list_length(namelist);
newOids = malloc(sizeof(Oid) * (nOids+1));
if (!newOids)
nOids = list_length(namelist);
newOids = malloc(sizeof(Oid) * (nOids+1));
if (!newOids)
- elog(ERROR,"could not allocate %d bytes", (int)(sizeof(Oid) * (nOids+1)));
+ elog(ERROR,"could not allocate %d bytes",
+ (int)(sizeof(Oid) * (nOids+1)));
}
foreach(l, namelist)
{
}
foreach(l, namelist)
{
- char
*curname = (char *) lfirst(l);
+ char *curname = (char *) lfirst(l);
#if PG_VERSION_NUM >= 90200
#if PG_VERSION_NUM >= 90200
- Oid
relOid = RangeVarGetRelid(makeRangeVarFromNameList(stringToQualifiedNameList(curname)),
-
NoLock, true);
+ Oid
relOid = RangeVarGetRelid(makeRangeVarFromNameList(
+
stringToQualifiedNameList(curname)),
NoLock, true);
#else
#else
- Oid
relOid = RangeVarGetRelid(makeRangeVarFromNameList(stringToQualifiedNameList(curname)),
-
true);
+ Oid
relOid = RangeVarGetRelid(makeRangeVarFromNameList(
+
stringToQualifiedNameList(curname)),
true);
#endif
if (relOid == InvalidOid)
#endif
if (relOid == InvalidOid)
@@
-226,7
+227,7
@@
includeTablesAssign(const char *newval, void *extra)
tableListAssign(newval, true, &excludeTables);
}
tableListAssign(newval, true, &excludeTables);
}
-#else /* PG_VERSION_NUM < 90100 */
+#else /* PG_VERSION_NUM < 90100 */
static const char *
excludeTablesAssign(const char * newval, bool doit, GucSource source)
static const char *
excludeTablesAssign(const char * newval, bool doit, GucSource source)
@@
-245,8
+246,8
@@
includeTablesAssign(const char * newval, bool doit, GucSource source)
static const char*
tableListShow(TableList *tbl)
{
static const char*
tableListShow(TableList *tbl)
{
- char *val, *ptr;
- int i,
+ char *val, *ptr;
+ int
i,
len;
len = 1 /* \0 */ + tbl->nTables * (2 * NAMEDATALEN + 2 /* ', ' */ + 1 /* . */);
len;
len = 1 /* \0 */ + tbl->nTables * (2 * NAMEDATALEN + 2 /* ', ' */ + 1 /* . */);
@@
-254,9
+255,9
@@
tableListShow(TableList *tbl)
*ptr ='\0';
for(i=0; i<tbl->nTables; i++)
{
*ptr ='\0';
for(i=0; i<tbl->nTables; i++)
{
- char *relname = get_rel_name(tbl->tables[i]);
- Oid nspOid = get_rel_namespace(tbl->tables[i]);
- char *nspname = get_namespace_name(nspOid);
+ char *relname = get_rel_name(tbl->tables[i]);
+ Oid
nspOid = get_rel_namespace(tbl->tables[i]);
+ char *nspname = get_namespace_name(nspOid);
if ( relname == NULL || nspOid == InvalidOid || nspname == NULL )
continue;
if ( relname == NULL || nspOid == InvalidOid || nspname == NULL )
continue;
@@
-321,7
+322,7
@@
static void
makeAnalyze(Oid relOid, CmdType operation, int32 naffected)
{
PgStat_StatTabEntry *tabentry;
makeAnalyze(Oid relOid, CmdType operation, int32 naffected)
{
PgStat_StatTabEntry *tabentry;
- TimestampTz now = GetCurrentTimestamp();
+ TimestampTz
now = GetCurrentTimestamp();
if (relOid == InvalidOid)
return;
if (relOid == InvalidOid)
return;
@@
-348,11
+349,11
@@
makeAnalyze(Oid relOid, CmdType operation, int32 naffected)
tabentry == NULL /* a new table */ ||
(
/* do not analyze too often, if both stamps are exceeded the go */
tabentry == NULL /* a new table */ ||
(
/* do not analyze too often, if both stamps are exceeded the go */
- TimestampDifferenceExceeds(tabentry->analyze_timestamp, now, online_analyze_min_interval) &&
+ TimestampDifferenceExceeds(tabentry->analyze_timestamp, now, online_analyze_min_interval) &&
TimestampDifferenceExceeds(tabentry->autovac_analyze_timestamp, now, online_analyze_min_interval) &&
/* be in sync with relation_needs_vacanalyze */
((double)(changes_since_analyze(tabentry) + naffected)) >=
TimestampDifferenceExceeds(tabentry->autovac_analyze_timestamp, now, online_analyze_min_interval) &&
/* be in sync with relation_needs_vacanalyze */
((double)(changes_since_analyze(tabentry) + naffected)) >=
- online_analyze_scale_factor * ((double)(tabentry->n_dead_tuples + tabentry->n_live_tuples)) +
+ online_analyze_scale_factor * ((double)(tabentry->n_dead_tuples + tabentry->n_live_tuples)) +
(double)online_analyze_threshold
)
)
(double)online_analyze_threshold
)
)
@@
-372,7
+373,8
@@
makeAnalyze(Oid relOid, CmdType operation, int32 naffected)
switch(online_analyze_table_type)
{
case OATT_ALL:
switch(online_analyze_table_type)
{
case OATT_ALL:
- if (matchOid(&excludeTables, relOid) == true && matchOid(&includeTables, relOid) == false)
+ if (matchOid(&excludeTables, relOid) == true &&
+ matchOid(&includeTables, relOid) == false)
return;
break;
case OATT_NONE:
return;
break;
case OATT_NONE:
@@
-387,7
+389,7
@@
makeAnalyze(Oid relOid, CmdType operation, int32 naffected)
OnlineAnalyzeTableType reltype;
rel = RelationIdGetRelation(relOid);
OnlineAnalyzeTableType reltype;
rel = RelationIdGetRelation(relOid);
- reltype =
+ reltype =
#if PG_VERSION_NUM >= 90100
(rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP)
#else
#if PG_VERSION_NUM >= 90100
(rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP)
#else
@@
-397,9
+399,11
@@
makeAnalyze(Oid relOid, CmdType operation, int32 naffected)
RelationClose(rel);
/*
RelationClose(rel);
/*
- * skip analyze if relation's type doesn't not match online_analyze_table_type
+ * skip analyze if relation's type doesn't not match
+ * online_analyze_table_type
*/
*/
- if ((online_analyze_table_type & reltype) == 0 || matchOid(&excludeTables, relOid) == true)
+ if ((online_analyze_table_type & reltype) == 0 ||
+ matchOid(&excludeTables, relOid) == true)
{
if (matchOid(&includeTables, relOid) == false)
return;
{
if (matchOid(&includeTables, relOid) == false)
return;
@@
-446,7
+450,8
@@
makeAnalyze(Oid relOid, CmdType operation, int32 naffected)
, true
#endif
#else
, true
#endif
#else
- makeRangeVarFromOid(relOid), VACOPT_ANALYZE | ((online_analyze_verbose) ? VACOPT_VERBOSE : 0),
+ makeRangeVarFromOid(relOid),
+ VACOPT_ANALYZE | ((online_analyze_verbose) ? VACOPT_VERBOSE : 0),
&vacstmt, NULL, true, GetAccessStrategy(BAS_VACUUM)
#endif
);
&vacstmt, NULL, true, GetAccessStrategy(BAS_VACUUM)
#endif
);
@@
-458,8
+463,9
@@
makeAnalyze(Oid relOid, CmdType operation, int32 naffected)
endStamp = GetCurrentTimestamp();
TimestampDifference(startStamp, endStamp, &secs, µsecs);
endStamp = GetCurrentTimestamp();
TimestampDifference(startStamp, endStamp, &secs, µsecs);
- elog(INFO, "analyze \"%s\" took %.02f seconds",
- get_rel_name(relOid), ((double)secs) + ((double)microsecs)/1.0e6);
+ elog(INFO, "analyze \"%s\" took %.02f seconds",
+ get_rel_name(relOid),
+ ((double)secs) + ((double)microsecs)/1.0e6);
}
}
@@
-496,7
+502,8
@@
onlineAnalyzeHooker(QueryDesc *queryDesc)
queryDesc->operation == CMD_UPDATE ||
queryDesc->operation == CMD_DELETE
#if PG_VERSION_NUM < 90200
queryDesc->operation == CMD_UPDATE ||
queryDesc->operation == CMD_DELETE
#if PG_VERSION_NUM < 90200
- || (queryDesc->operation == CMD_SELECT && queryDesc->plannedstmt->intoClause)
+ || (queryDesc->operation == CMD_SELECT &&
+ queryDesc->plannedstmt->intoClause)
#endif
))
{
#endif
))
{
@@
-516,7
+523,7
@@
onlineAnalyzeHooker(QueryDesc *queryDesc)
foreach(l, queryDesc->plannedstmt->resultRelations)
{
foreach(l, queryDesc->plannedstmt->resultRelations)
{
- int n = lfirst_int(l);
+ int
n = lfirst_int(l);
RangeTblEntry *rte = list_nth(queryDesc->plannedstmt->rtable, n-1);
if (rte->rtekind == RTE_RELATION)
RangeTblEntry *rte = list_nth(queryDesc->plannedstmt->rtable, n-1);
if (rte->rtekind == RTE_RELATION)
@@
-535,7
+542,7
@@
onlineAnalyzeHooker(QueryDesc *queryDesc)
static void
onlineAnalyzeHookerUtility(Node *parsetree, const char *queryString,
#if PG_VERSION_NUM >= 90300
static void
onlineAnalyzeHookerUtility(Node *parsetree, const char *queryString,
#if PG_VERSION_NUM >= 90300
- ProcessUtilityContext context, ParamListInfo params,
+ ProcessUtilityContext context, ParamListInfo params,
#else
ParamListInfo params, bool isTopLevel,
#endif
#else
ParamListInfo params, bool isTopLevel,
#endif
@@
-546,7
+553,7
@@
onlineAnalyzeHookerUtility(Node *parsetree, const char *queryString,
tblname = (RangeVar*)copyObject(((CreateTableAsStmt*)parsetree)->into->rel);
if (oldProcessUtilityHook)
tblname = (RangeVar*)copyObject(((CreateTableAsStmt*)parsetree)->into->rel);
if (oldProcessUtilityHook)
- oldProcessUtilityHook(parsetree, queryString,
+ oldProcessUtilityHook(parsetree, queryString,
#if PG_VERSION_NUM >= 90300
context, params,
#else
#if PG_VERSION_NUM >= 90300
context, params,
#else
@@
-554,9
+561,9
@@
onlineAnalyzeHookerUtility(Node *parsetree, const char *queryString,
#endif
dest, completionTag);
else
#endif
dest, completionTag);
else
- standard_ProcessUtility(parsetree, queryString,
+ standard_ProcessUtility(parsetree, queryString,
#if PG_VERSION_NUM >= 90300
#if PG_VERSION_NUM >= 90300
- context, params,
+ context, params,
#else
params, isTopLevel,
#endif
#else
params, isTopLevel,
#endif
@@
-565,7
+572,7
@@
onlineAnalyzeHookerUtility(Node *parsetree, const char *queryString,
if (tblname) {
Oid tblOid = RangeVarGetRelid(tblname, NoLock, true);
if (tblname) {
Oid tblOid = RangeVarGetRelid(tblname, NoLock, true);
- makeAnalyze(tblOid, CMD_INSERT, -1);
+ makeAnalyze(tblOid, CMD_INSERT, -1);
}
}
#endif
}
}
#endif
@@
-623,7
+630,7
@@
_PG_init(void)
NULL
);
NULL
);
- DefineCustomRealVariable(
+
DefineCustomRealVariable(
"online_analyze.scale_factor",
"fraction of table size to start on-line analyze",
"fraction of table size to start on-line analyze",
"online_analyze.scale_factor",
"fraction of table size to start on-line analyze",
"fraction of table size to start on-line analyze",
@@
-644,7
+651,7
@@
_PG_init(void)
NULL
);
NULL
);
- DefineCustomIntVariable(
+
DefineCustomIntVariable(
"online_analyze.threshold",
"min number of row updates before on-line analyze",
"min number of row updates before on-line analyze",
"online_analyze.threshold",
"min number of row updates before on-line analyze",
"min number of row updates before on-line analyze",
@@
-665,7
+672,7
@@
_PG_init(void)
NULL
);
NULL
);
- DefineCustomRealVariable(
+
DefineCustomRealVariable(
"online_analyze.min_interval",
"minimum time interval between analyze call (in milliseconds)",
"minimum time interval between analyze call (in milliseconds)",
"online_analyze.min_interval",
"minimum time interval between analyze call (in milliseconds)",
"minimum time interval between analyze call (in milliseconds)",
@@
-697,7
+704,7
@@
_PG_init(void)
online_analyze_table_type_options,
PGC_USERSET,
#if PG_VERSION_NUM >= 80400
online_analyze_table_type_options,
PGC_USERSET,
#if PG_VERSION_NUM >= 80400
- GUC_NOT_IN_SAMPLE,
+
GUC_NOT_IN_SAMPLE,
#if PG_VERSION_NUM >= 90100
NULL,
#endif
#if PG_VERSION_NUM >= 90100
NULL,
#endif
@@
-706,7
+713,7
@@
_PG_init(void)
NULL
);
NULL
);
- DefineCustomStringVariable(
+
DefineCustomStringVariable(
"online_analyze.exclude_tables",
"List of tables which will not online analyze",
NULL,
"online_analyze.exclude_tables",
"List of tables which will not online analyze",
NULL,
@@
-725,7
+732,7
@@
_PG_init(void)
excludeTablesShow
);
excludeTablesShow
);
- DefineCustomStringVariable(
+
DefineCustomStringVariable(
"online_analyze.include_tables",
"List of tables which will online analyze",
NULL,
"online_analyze.include_tables",
"List of tables which will online analyze",
NULL,