mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-30 22:41:15 +02:00
Fix core dump on root starting pg_autovacuum.
Change conditionals to be more constent with our code if (const == var) => if (var == const).
This commit is contained in:
parent
108f371769
commit
18e5addb96
@ -70,7 +70,7 @@ init_table_info(PGresult *res, int row, db_info * dbi)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == res)
|
if (res == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
new_tbl->dbi = dbi; /* set pointer to db */
|
new_tbl->dbi = dbi; /* set pointer to db */
|
||||||
@ -146,17 +146,17 @@ update_table_thresholds(db_info * dbi, tbl_info * tbl, int vacuum_type)
|
|||||||
int disconnect = 0;
|
int disconnect = 0;
|
||||||
char query[128];
|
char query[128];
|
||||||
|
|
||||||
if (NULL == dbi->conn)
|
if (dbi->conn == NULL)
|
||||||
{
|
{
|
||||||
dbi->conn = db_connect(dbi);
|
dbi->conn = db_connect(dbi);
|
||||||
disconnect = 1;
|
disconnect = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != dbi->conn)
|
if (dbi->conn != NULL)
|
||||||
{
|
{
|
||||||
snprintf(query, sizeof(query), PAGES_QUERY, tbl->relfilenode);
|
snprintf(query, sizeof(query), PAGES_QUERY, tbl->relfilenode);
|
||||||
res = send_query(query, dbi);
|
res = send_query(query, dbi);
|
||||||
if (NULL != res)
|
if (res != NULL)
|
||||||
{
|
{
|
||||||
tbl->reltuples =
|
tbl->reltuples =
|
||||||
atoi(PQgetvalue(res, 0, PQfnumber(res, "reltuples")));
|
atoi(PQgetvalue(res, 0, PQfnumber(res, "reltuples")));
|
||||||
@ -166,7 +166,7 @@ update_table_thresholds(db_info * dbi, tbl_info * tbl, int vacuum_type)
|
|||||||
* update vacuum thresholds only of we just did a vacuum
|
* update vacuum thresholds only of we just did a vacuum
|
||||||
* analyze
|
* analyze
|
||||||
*/
|
*/
|
||||||
if (VACUUM_ANALYZE == vacuum_type)
|
if (vacuum_type == VACUUM_ANALYZE)
|
||||||
{
|
{
|
||||||
tbl->vacuum_threshold =
|
tbl->vacuum_threshold =
|
||||||
(args->vacuum_base_threshold + args->vacuum_scaling_factor * tbl->reltuples);
|
(args->vacuum_base_threshold + args->vacuum_scaling_factor * tbl->reltuples);
|
||||||
@ -208,13 +208,13 @@ update_table_list(db_info * dbi)
|
|||||||
t = 0,
|
t = 0,
|
||||||
found_match = 0;
|
found_match = 0;
|
||||||
|
|
||||||
if (NULL == dbi->conn)
|
if (dbi->conn == NULL)
|
||||||
{
|
{
|
||||||
dbi->conn = db_connect(dbi);
|
dbi->conn = db_connect(dbi);
|
||||||
disconnect = 1;
|
disconnect = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != dbi->conn)
|
if (dbi->conn != NULL)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Get a result set that has all the information we will need to
|
* Get a result set that has all the information we will need to
|
||||||
@ -229,7 +229,7 @@ update_table_list(db_info * dbi)
|
|||||||
* the inner loop, this will determine what tables should be
|
* the inner loop, this will determine what tables should be
|
||||||
* removed
|
* removed
|
||||||
*/
|
*/
|
||||||
while (NULL != tbl_elem)
|
while (tbl_elem != NULL)
|
||||||
{
|
{
|
||||||
tbl = ((tbl_info *) DLE_VAL(tbl_elem));
|
tbl = ((tbl_info *) DLE_VAL(tbl_elem));
|
||||||
found_match = 0;
|
found_match = 0;
|
||||||
@ -243,7 +243,7 @@ update_table_list(db_info * dbi)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (0 == found_match)
|
if (found_match == 0)
|
||||||
{ /* then we didn't find this tbl_elem in
|
{ /* then we didn't find this tbl_elem in
|
||||||
* the result set */
|
* the result set */
|
||||||
Dlelem *elem_to_remove = tbl_elem;
|
Dlelem *elem_to_remove = tbl_elem;
|
||||||
@ -264,7 +264,7 @@ update_table_list(db_info * dbi)
|
|||||||
{
|
{
|
||||||
tbl_elem = DLGetHead(dbi->table_list);
|
tbl_elem = DLGetHead(dbi->table_list);
|
||||||
found_match = 0;
|
found_match = 0;
|
||||||
while (NULL != tbl_elem)
|
while (tbl_elem != NULL)
|
||||||
{
|
{
|
||||||
tbl = ((tbl_info *) DLE_VAL(tbl_elem));
|
tbl = ((tbl_info *) DLE_VAL(tbl_elem));
|
||||||
if (tbl->relfilenode == atoi(PQgetvalue(res, i, PQfnumber(res, "relfilenode"))))
|
if (tbl->relfilenode == atoi(PQgetvalue(res, i, PQfnumber(res, "relfilenode"))))
|
||||||
@ -274,7 +274,7 @@ update_table_list(db_info * dbi)
|
|||||||
}
|
}
|
||||||
tbl_elem = DLGetSucc(tbl_elem);
|
tbl_elem = DLGetSucc(tbl_elem);
|
||||||
}
|
}
|
||||||
if (0 == found_match) /* then we didn't find this result
|
if (found_match == 0) /* then we didn't find this result
|
||||||
* now in the tbl_list */
|
* now in the tbl_list */
|
||||||
{
|
{
|
||||||
DLAddTail(dbi->table_list, DLNewElem(init_table_info(res, i, dbi)));
|
DLAddTail(dbi->table_list, DLNewElem(init_table_info(res, i, dbi)));
|
||||||
@ -335,7 +335,7 @@ free_tbl_list(Dllist *tbl_list)
|
|||||||
Dlelem *tbl_elem = DLGetHead(tbl_list);
|
Dlelem *tbl_elem = DLGetHead(tbl_list);
|
||||||
Dlelem *tbl_elem_to_remove = NULL;
|
Dlelem *tbl_elem_to_remove = NULL;
|
||||||
|
|
||||||
while (NULL != tbl_elem)
|
while (tbl_elem != NULL)
|
||||||
{
|
{
|
||||||
tbl_elem_to_remove = tbl_elem;
|
tbl_elem_to_remove = tbl_elem;
|
||||||
tbl_elem = DLGetSucc(tbl_elem);
|
tbl_elem = DLGetSucc(tbl_elem);
|
||||||
@ -349,7 +349,7 @@ print_table_list(Dllist *table_list)
|
|||||||
{
|
{
|
||||||
Dlelem *table_elem = DLGetHead(table_list);
|
Dlelem *table_elem = DLGetHead(table_list);
|
||||||
|
|
||||||
while (NULL != table_elem)
|
while (table_elem != NULL)
|
||||||
{
|
{
|
||||||
print_table_info(((tbl_info *) DLE_VAL(table_elem)));
|
print_table_info(((tbl_info *) DLE_VAL(table_elem)));
|
||||||
table_elem = DLGetSucc(table_elem);
|
table_elem = DLGetSucc(table_elem);
|
||||||
@ -390,7 +390,7 @@ init_db_list()
|
|||||||
PGresult *res = NULL;
|
PGresult *res = NULL;
|
||||||
|
|
||||||
DLAddHead(db_list, DLNewElem(init_dbinfo((char *) "template1", 0, 0)));
|
DLAddHead(db_list, DLNewElem(init_dbinfo((char *) "template1", 0, 0)));
|
||||||
if (NULL == DLGetHead(db_list))
|
if (DLGetHead(db_list) == NULL)
|
||||||
{ /* Make sure init_dbinfo was successful */
|
{ /* Make sure init_dbinfo was successful */
|
||||||
log_entry("init_db_list(): Error creating db_list for db: template1.");
|
log_entry("init_db_list(): Error creating db_list for db: template1.");
|
||||||
fflush(LOGOUTPUT);
|
fflush(LOGOUTPUT);
|
||||||
@ -404,7 +404,7 @@ init_db_list()
|
|||||||
dbs = ((db_info *) DLE_VAL(DLGetHead(db_list)));
|
dbs = ((db_info *) DLE_VAL(DLGetHead(db_list)));
|
||||||
dbs->conn = db_connect(dbs);
|
dbs->conn = db_connect(dbs);
|
||||||
|
|
||||||
if (NULL != dbs->conn)
|
if (dbs->conn != NULL)
|
||||||
{
|
{
|
||||||
res = send_query(FROZENOID_QUERY, dbs);
|
res = send_query(FROZENOID_QUERY, dbs);
|
||||||
dbs->oid = atoi(PQgetvalue(res, 0, PQfnumber(res, "oid")));
|
dbs->oid = atoi(PQgetvalue(res, 0, PQfnumber(res, "oid")));
|
||||||
@ -430,13 +430,13 @@ init_dbinfo(char *dbname, int oid, int age)
|
|||||||
newdbinfo->dbname = (char *) malloc(strlen(dbname) + 1);
|
newdbinfo->dbname = (char *) malloc(strlen(dbname) + 1);
|
||||||
strcpy(newdbinfo->dbname, dbname);
|
strcpy(newdbinfo->dbname, dbname);
|
||||||
newdbinfo->username = NULL;
|
newdbinfo->username = NULL;
|
||||||
if (NULL != args->user)
|
if (args->user != NULL)
|
||||||
{
|
{
|
||||||
newdbinfo->username = (char *) malloc(strlen(args->user) + 1);
|
newdbinfo->username = (char *) malloc(strlen(args->user) + 1);
|
||||||
strcpy(newdbinfo->username, args->user);
|
strcpy(newdbinfo->username, args->user);
|
||||||
}
|
}
|
||||||
newdbinfo->password = NULL;
|
newdbinfo->password = NULL;
|
||||||
if (NULL != args->password)
|
if (args->password != NULL)
|
||||||
{
|
{
|
||||||
newdbinfo->password = (char *) malloc(strlen(args->password) + 1);
|
newdbinfo->password = (char *) malloc(strlen(args->password) + 1);
|
||||||
strcpy(newdbinfo->password, args->password);
|
strcpy(newdbinfo->password, args->password);
|
||||||
@ -471,13 +471,13 @@ update_db_list(Dllist *db_list)
|
|||||||
fflush(LOGOUTPUT);
|
fflush(LOGOUTPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL == dbi_template1->conn)
|
if (dbi_template1->conn == NULL)
|
||||||
{
|
{
|
||||||
dbi_template1->conn = db_connect(dbi_template1);
|
dbi_template1->conn = db_connect(dbi_template1);
|
||||||
disconnect = 1;
|
disconnect = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != dbi_template1->conn)
|
if (dbi_template1->conn != NULL)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Get a result set that has all the information we will need to
|
* Get a result set that has all the information we will need to
|
||||||
@ -492,7 +492,7 @@ update_db_list(Dllist *db_list)
|
|||||||
* the inner loop, this will determine what databases should be
|
* the inner loop, this will determine what databases should be
|
||||||
* removed
|
* removed
|
||||||
*/
|
*/
|
||||||
while (NULL != db_elem)
|
while (db_elem != NULL)
|
||||||
{
|
{
|
||||||
dbi = ((db_info *) DLE_VAL(db_elem));
|
dbi = ((db_info *) DLE_VAL(db_elem));
|
||||||
found_match = 0;
|
found_match = 0;
|
||||||
@ -512,7 +512,7 @@ update_db_list(Dllist *db_list)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (0 == found_match)
|
if (found_match == 0)
|
||||||
{ /* then we didn't find this db_elem in the
|
{ /* then we didn't find this db_elem in the
|
||||||
* result set */
|
* result set */
|
||||||
Dlelem *elem_to_remove = db_elem;
|
Dlelem *elem_to_remove = db_elem;
|
||||||
@ -533,7 +533,7 @@ update_db_list(Dllist *db_list)
|
|||||||
{
|
{
|
||||||
db_elem = DLGetHead(db_list);
|
db_elem = DLGetHead(db_list);
|
||||||
found_match = 0;
|
found_match = 0;
|
||||||
while (NULL != db_elem)
|
while (db_elem != NULL)
|
||||||
{
|
{
|
||||||
dbi = ((db_info *) DLE_VAL(db_elem));
|
dbi = ((db_info *) DLE_VAL(db_elem));
|
||||||
if (dbi->oid == atoi(PQgetvalue(res, i, PQfnumber(res, "oid"))))
|
if (dbi->oid == atoi(PQgetvalue(res, i, PQfnumber(res, "oid"))))
|
||||||
@ -543,7 +543,7 @@ update_db_list(Dllist *db_list)
|
|||||||
}
|
}
|
||||||
db_elem = DLGetSucc(db_elem);
|
db_elem = DLGetSucc(db_elem);
|
||||||
}
|
}
|
||||||
if (0 == found_match) /* then we didn't find this result
|
if (found_match == 0) /* then we didn't find this result
|
||||||
* now in the tbl_list */
|
* now in the tbl_list */
|
||||||
{
|
{
|
||||||
DLAddTail(db_list, DLNewElem(init_dbinfo
|
DLAddTail(db_list, DLNewElem(init_dbinfo
|
||||||
@ -590,7 +590,7 @@ xid_wraparound_check(db_info * dbi)
|
|||||||
* 500million xacts to work with so we should be able to spread the
|
* 500million xacts to work with so we should be able to spread the
|
||||||
* load of full database vacuums a bit
|
* load of full database vacuums a bit
|
||||||
*/
|
*/
|
||||||
if (1500000000 < dbi->age)
|
if (dbi->age > 1500000000 )
|
||||||
{
|
{
|
||||||
PGresult *res = NULL;
|
PGresult *res = NULL;
|
||||||
|
|
||||||
@ -653,7 +653,7 @@ free_db_list(Dllist *db_list)
|
|||||||
Dlelem *db_elem = DLGetHead(db_list);
|
Dlelem *db_elem = DLGetHead(db_list);
|
||||||
Dlelem *db_elem_to_remove = NULL;
|
Dlelem *db_elem_to_remove = NULL;
|
||||||
|
|
||||||
while (NULL != db_elem)
|
while (db_elem != NULL)
|
||||||
{
|
{
|
||||||
db_elem_to_remove = db_elem;
|
db_elem_to_remove = db_elem;
|
||||||
db_elem = DLGetSucc(db_elem);
|
db_elem = DLGetSucc(db_elem);
|
||||||
@ -668,7 +668,7 @@ print_db_list(Dllist *db_list, int print_table_lists)
|
|||||||
{
|
{
|
||||||
Dlelem *db_elem = DLGetHead(db_list);
|
Dlelem *db_elem = DLGetHead(db_list);
|
||||||
|
|
||||||
while (NULL != db_elem)
|
while (db_elem != NULL)
|
||||||
{
|
{
|
||||||
print_db_info(((db_info *) DLE_VAL(db_elem)), print_table_lists);
|
print_db_info(((db_info *) DLE_VAL(db_elem)), print_table_lists);
|
||||||
db_elem = DLGetSucc(db_elem);
|
db_elem = DLGetSucc(db_elem);
|
||||||
@ -684,13 +684,13 @@ print_db_info(db_info * dbi, int print_tbl_list)
|
|||||||
sprintf(logbuffer, " oid %i InsertThresh: %i DeleteThresh: %i", dbi->oid,
|
sprintf(logbuffer, " oid %i InsertThresh: %i DeleteThresh: %i", dbi->oid,
|
||||||
dbi->analyze_threshold, dbi->vacuum_threshold);
|
dbi->analyze_threshold, dbi->vacuum_threshold);
|
||||||
log_entry(logbuffer);
|
log_entry(logbuffer);
|
||||||
if (NULL != dbi->conn)
|
if (dbi->conn != NULL)
|
||||||
log_entry(" conn is valid, we are connected");
|
log_entry(" conn is valid, we are connected");
|
||||||
else
|
else
|
||||||
log_entry(" conn is null, we are not connected.");
|
log_entry(" conn is null, we are not connected.");
|
||||||
|
|
||||||
fflush(LOGOUTPUT);
|
fflush(LOGOUTPUT);
|
||||||
if (0 < print_tbl_list)
|
if (print_tbl_list > 0)
|
||||||
print_table_list(dbi->table_list);
|
print_table_list(dbi->table_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -706,7 +706,7 @@ db_connect(db_info * dbi)
|
|||||||
PQsetdbLogin(args->host, args->port, NULL, NULL, dbi->dbname,
|
PQsetdbLogin(args->host, args->port, NULL, NULL, dbi->dbname,
|
||||||
dbi->username, dbi->password);
|
dbi->username, dbi->password);
|
||||||
|
|
||||||
if (CONNECTION_OK != PQstatus(db_conn))
|
if (PQstatus(db_conn) != CONNECTION_OK)
|
||||||
{
|
{
|
||||||
sprintf(logbuffer, "Failed connection to database %s with error: %s.",
|
sprintf(logbuffer, "Failed connection to database %s with error: %s.",
|
||||||
dbi->dbname, PQerrorMessage(db_conn));
|
dbi->dbname, PQerrorMessage(db_conn));
|
||||||
@ -721,7 +721,7 @@ db_connect(db_info * dbi)
|
|||||||
void
|
void
|
||||||
db_disconnect(db_info * dbi)
|
db_disconnect(db_info * dbi)
|
||||||
{
|
{
|
||||||
if (NULL != dbi->conn)
|
if (dbi->conn != NULL)
|
||||||
{
|
{
|
||||||
PQfinish(dbi->conn);
|
PQfinish(dbi->conn);
|
||||||
dbi->conn = NULL;
|
dbi->conn = NULL;
|
||||||
@ -731,13 +731,15 @@ db_disconnect(db_info * dbi)
|
|||||||
int
|
int
|
||||||
check_stats_enabled(db_info * dbi)
|
check_stats_enabled(db_info * dbi)
|
||||||
{
|
{
|
||||||
PGresult *res = NULL;
|
PGresult *res;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
res = send_query("SHOW stats_row_level", dbi);
|
res = send_query("SHOW stats_row_level", dbi);
|
||||||
ret =
|
if (res)
|
||||||
strcmp("on", PQgetvalue(res, 0, PQfnumber(res, "stats_row_level")));
|
{
|
||||||
|
ret = strcmp("on", PQgetvalue(res, 0, PQfnumber(res, "stats_row_level")));
|
||||||
PQclear(res);
|
PQclear(res);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -746,7 +748,7 @@ send_query(const char *query, db_info * dbi)
|
|||||||
{
|
{
|
||||||
PGresult *res;
|
PGresult *res;
|
||||||
|
|
||||||
if (NULL == dbi->conn)
|
if (dbi->conn == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (args->debug >= 4)
|
if (args->debug >= 4)
|
||||||
@ -765,8 +767,8 @@ send_query(const char *query, db_info * dbi)
|
|||||||
fflush(LOGOUTPUT);
|
fflush(LOGOUTPUT);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (PQresultStatus(res) != PGRES_TUPLES_OK
|
if (PQresultStatus(res) != PGRES_TUPLES_OK &&
|
||||||
&& PQresultStatus(res) != PGRES_COMMAND_OK)
|
PQresultStatus(res) != PGRES_COMMAND_OK)
|
||||||
{
|
{
|
||||||
sprintf(logbuffer,
|
sprintf(logbuffer,
|
||||||
"Can not refresh statistics information from the database %s.",
|
"Can not refresh statistics information from the database %s.",
|
||||||
@ -785,11 +787,11 @@ send_query(const char *query, db_info * dbi)
|
|||||||
void
|
void
|
||||||
free_cmd_args()
|
free_cmd_args()
|
||||||
{
|
{
|
||||||
if (NULL != args)
|
if (args != NULL)
|
||||||
{
|
{
|
||||||
if (NULL != args->user)
|
if (args->user != NULL)
|
||||||
free(args->user);
|
free(args->user);
|
||||||
if (NULL != args->user)
|
if (args->password != NULL)
|
||||||
free(args->password);
|
free(args->password);
|
||||||
free(args);
|
free(args);
|
||||||
}
|
}
|
||||||
@ -814,7 +816,7 @@ get_cmd_args(int argc, char *argv[])
|
|||||||
* Fixme: Should add some sanity checking such as positive integer
|
* Fixme: Should add some sanity checking such as positive integer
|
||||||
* values etc
|
* values etc
|
||||||
*/
|
*/
|
||||||
while (-1 != (c = getopt(argc, argv, "s:S:v:V:a:A:d:U:P:H:L:p:hD")))
|
while ((c = getopt(argc, argv, "s:S:v:V:a:A:d:U:P:H:L:p:hD")) != -1)
|
||||||
{
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
@ -876,9 +878,9 @@ get_cmd_args(int argc, char *argv[])
|
|||||||
* if values for insert thresholds are not specified, then they
|
* if values for insert thresholds are not specified, then they
|
||||||
* default to 1/2 of the delete values
|
* default to 1/2 of the delete values
|
||||||
*/
|
*/
|
||||||
if (-1 == args->analyze_base_threshold)
|
if (args->analyze_base_threshold == -1)
|
||||||
args->analyze_base_threshold = args->vacuum_base_threshold / 2;
|
args->analyze_base_threshold = args->vacuum_base_threshold / 2;
|
||||||
if (-1 == args->analyze_scaling_factor)
|
if (args->analyze_scaling_factor == -1)
|
||||||
args->analyze_scaling_factor = args->vacuum_scaling_factor / 2;
|
args->analyze_scaling_factor = args->vacuum_scaling_factor / 2;
|
||||||
}
|
}
|
||||||
return args;
|
return args;
|
||||||
@ -979,7 +981,7 @@ main(int argc, char *argv[])
|
|||||||
* them in the args struct */
|
* them in the args struct */
|
||||||
|
|
||||||
/* Dameonize if requested */
|
/* Dameonize if requested */
|
||||||
if (1 == args->daemonize)
|
if (args->daemonize == 1)
|
||||||
daemonize();
|
daemonize();
|
||||||
|
|
||||||
if (args->logfile)
|
if (args->logfile)
|
||||||
@ -998,10 +1000,10 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
/* Init the db list with template1 */
|
/* Init the db list with template1 */
|
||||||
db_list = init_db_list();
|
db_list = init_db_list();
|
||||||
if (NULL == db_list)
|
if (db_list == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (0 != check_stats_enabled(((db_info *) DLE_VAL(DLGetHead(db_list)))))
|
if (check_stats_enabled(((db_info *) DLE_VAL(DLGetHead(db_list)))) != 0)
|
||||||
{
|
{
|
||||||
log_entry("Error: GUC variable stats_row_level must be enabled.");
|
log_entry("Error: GUC variable stats_row_level must be enabled.");
|
||||||
log_entry(" Please fix the problems and try again.");
|
log_entry(" Please fix the problems and try again.");
|
||||||
@ -1019,10 +1021,10 @@ main(int argc, char *argv[])
|
|||||||
|
|
||||||
dbs = ((db_info *) DLE_VAL(db_elem)); /* get pointer to cur_db's
|
dbs = ((db_info *) DLE_VAL(db_elem)); /* get pointer to cur_db's
|
||||||
* db_info struct */
|
* db_info struct */
|
||||||
if (NULL == dbs->conn)
|
if (dbs->conn == NULL)
|
||||||
{
|
{
|
||||||
dbs->conn = db_connect(dbs);
|
dbs->conn = db_connect(dbs);
|
||||||
if (NULL == dbs->conn)
|
if (dbs->conn == NULL)
|
||||||
{ /* Serious problem: We can't connect to
|
{ /* Serious problem: We can't connect to
|
||||||
* template1 */
|
* template1 */
|
||||||
log_entry("Error: Cannot connect to template1, exiting.");
|
log_entry("Error: Cannot connect to template1, exiting.");
|
||||||
@ -1032,27 +1034,27 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 == (loops % UPDATE_INTERVAL)) /* Update the list if it's
|
if (loops % UPDATE_INTERVAL == 0) /* Update the list if it's
|
||||||
* time */
|
* time */
|
||||||
update_db_list(db_list); /* Add and remove databases from
|
update_db_list(db_list); /* Add and remove databases from
|
||||||
* the list */
|
* the list */
|
||||||
|
|
||||||
while (NULL != db_elem)
|
while (db_elem != NULL)
|
||||||
{ /* Loop through databases in list */
|
{ /* Loop through databases in list */
|
||||||
dbs = ((db_info *) DLE_VAL(db_elem)); /* get pointer to
|
dbs = ((db_info *) DLE_VAL(db_elem)); /* get pointer to
|
||||||
* cur_db's db_info
|
* cur_db's db_info
|
||||||
* struct */
|
* struct */
|
||||||
if (NULL == dbs->conn)
|
if (dbs->conn == NULL)
|
||||||
dbs->conn = db_connect(dbs);
|
dbs->conn = db_connect(dbs);
|
||||||
|
|
||||||
if (NULL != dbs->conn)
|
if (dbs->conn != NULL)
|
||||||
{
|
{
|
||||||
if (0 == (loops % UPDATE_INTERVAL)) /* Update the list if
|
if (loops % UPDATE_INTERVAL == 0) /* Update the list if
|
||||||
* it's time */
|
* it's time */
|
||||||
update_table_list(dbs); /* Add and remove tables
|
update_table_list(dbs); /* Add and remove tables
|
||||||
* from the list */
|
* from the list */
|
||||||
|
|
||||||
if (0 == xid_wraparound_check(dbs));
|
if (xid_wraparound_check(dbs) == 0)
|
||||||
{
|
{
|
||||||
res = send_query(TABLE_STATS_QUERY, dbs); /* Get an updated
|
res = send_query(TABLE_STATS_QUERY, dbs); /* Get an updated
|
||||||
* snapshot of this dbs
|
* snapshot of this dbs
|
||||||
@ -1061,7 +1063,7 @@ main(int argc, char *argv[])
|
|||||||
{ /* loop through result set */
|
{ /* loop through result set */
|
||||||
tbl_elem = DLGetHead(dbs->table_list); /* Reset tbl_elem to top
|
tbl_elem = DLGetHead(dbs->table_list); /* Reset tbl_elem to top
|
||||||
* of dbs->table_list */
|
* of dbs->table_list */
|
||||||
while (NULL != tbl_elem)
|
while (tbl_elem != NULL)
|
||||||
{ /* Loop through tables in list */
|
{ /* Loop through tables in list */
|
||||||
tbl = ((tbl_info *) DLE_VAL(tbl_elem)); /* set tbl_info =
|
tbl = ((tbl_info *) DLE_VAL(tbl_elem)); /* set tbl_info =
|
||||||
* current_table */
|
* current_table */
|
||||||
@ -1084,13 +1086,13 @@ main(int argc, char *argv[])
|
|||||||
* not big enough for vacuum then check
|
* not big enough for vacuum then check
|
||||||
* numInserts for analyze
|
* numInserts for analyze
|
||||||
*/
|
*/
|
||||||
if ((tbl->curr_vacuum_count - tbl->CountAtLastVacuum) >= tbl->vacuum_threshold)
|
if (tbl->curr_vacuum_count - tbl->CountAtLastVacuum >= tbl->vacuum_threshold)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* if relisshared = t and database !=
|
* if relisshared = t and database !=
|
||||||
* template1 then only do an analyze
|
* template1 then only do an analyze
|
||||||
*/
|
*/
|
||||||
if ((tbl->relisshared > 0) && (strcmp("template1", dbs->dbname)))
|
if (tbl->relisshared > 0 && strcmp("template1", dbs->dbname))
|
||||||
snprintf(buf, sizeof(buf), "ANALYZE %s", tbl->table_name);
|
snprintf(buf, sizeof(buf), "ANALYZE %s", tbl->table_name);
|
||||||
else
|
else
|
||||||
snprintf(buf, sizeof(buf), "VACUUM ANALYZE %s", tbl->table_name);
|
snprintf(buf, sizeof(buf), "VACUUM ANALYZE %s", tbl->table_name);
|
||||||
@ -1105,7 +1107,7 @@ main(int argc, char *argv[])
|
|||||||
if (args->debug >= 2)
|
if (args->debug >= 2)
|
||||||
print_table_info(tbl);
|
print_table_info(tbl);
|
||||||
}
|
}
|
||||||
else if ((tbl->curr_analyze_count - tbl->CountAtLastAnalyze) >= tbl->analyze_threshold)
|
else if (tbl->curr_analyze_count - tbl->CountAtLastAnalyze >= tbl->analyze_threshold)
|
||||||
{
|
{
|
||||||
snprintf(buf, sizeof(buf), "ANALYZE %s", tbl->table_name);
|
snprintf(buf, sizeof(buf), "ANALYZE %s", tbl->table_name);
|
||||||
if (args->debug >= 1)
|
if (args->debug >= 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user