* 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
- * 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
- * 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
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},
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);
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)
{
- char *curname = (char *) lfirst(l);
+ char *curname = (char *) lfirst(l);
#if PG_VERSION_NUM >= 90200
- Oid relOid = RangeVarGetRelid(makeRangeVarFromNameList(stringToQualifiedNameList(curname)),
- NoLock, true);
+ Oid relOid = RangeVarGetRelid(makeRangeVarFromNameList(
+ stringToQualifiedNameList(curname)), NoLock, true);
#else
- Oid relOid = RangeVarGetRelid(makeRangeVarFromNameList(stringToQualifiedNameList(curname)),
- true);
+ Oid relOid = RangeVarGetRelid(makeRangeVarFromNameList(
+ stringToQualifiedNameList(curname)), true);
#endif
if (relOid == InvalidOid)
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*
tableListShow(TableList *tbl)
{
- char *val, *ptr;
- int i,
+ char *val, *ptr;
+ int i,
len;
len = 1 /* \0 */ + tbl->nTables * (2 * NAMEDATALEN + 2 /* ', ' */ + 1 /* . */);
*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;
makeAnalyze(Oid relOid, CmdType operation, int32 naffected)
{
PgStat_StatTabEntry *tabentry;
- TimestampTz now = GetCurrentTimestamp();
+ TimestampTz now = GetCurrentTimestamp();
if (relOid == InvalidOid)
return;
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)) >=
- 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
)
)
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:
OnlineAnalyzeTableType reltype;
rel = RelationIdGetRelation(relOid);
- reltype =
+ reltype =
#if PG_VERSION_NUM >= 90100
(rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP)
#else
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;
, 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
);
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);
}
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
))
{
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)
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
tblname = (RangeVar*)copyObject(((CreateTableAsStmt*)parsetree)->into->rel);
if (oldProcessUtilityHook)
- oldProcessUtilityHook(parsetree, queryString,
+ oldProcessUtilityHook(parsetree, queryString,
#if PG_VERSION_NUM >= 90300
context, params,
#else
#endif
dest, completionTag);
else
- standard_ProcessUtility(parsetree, queryString,
+ standard_ProcessUtility(parsetree, queryString,
#if PG_VERSION_NUM >= 90300
- context, params,
+ context, params,
#else
params, isTopLevel,
#endif
if (tblname) {
Oid tblOid = RangeVarGetRelid(tblname, NoLock, true);
- makeAnalyze(tblOid, CMD_INSERT, -1);
+ makeAnalyze(tblOid, CMD_INSERT, -1);
}
}
#endif
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",
NULL
);
- DefineCustomIntVariable(
+ DefineCustomIntVariable(
"online_analyze.threshold",
"min number of row updates before on-line analyze",
"min number of row updates before on-line analyze",
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_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
NULL
);
- DefineCustomStringVariable(
+ DefineCustomStringVariable(
"online_analyze.exclude_tables",
"List of tables which will not online analyze",
NULL,
excludeTablesShow
);
- DefineCustomStringVariable(
+ DefineCustomStringVariable(
"online_analyze.include_tables",
"List of tables which will online analyze",
NULL,