Wed Jun 27 08:51:38 PDT 2007
- Previous message: [Slony1-commit] slony1-engine/src/backend slony1_base.sql slony1_funcs.sql
- Next message: [Slony1-commit] slony1-engine/src/xxid Makefile xxid.v83.sql
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Update of /home/cvsd/slony1/slony1-engine/src/slon In directory main.slony.info:/tmp/cvs-serv9117/src/slon Modified Files: cleanup_thread.c Log Message: Major revision to cleanup thread: - Use pair of SPs to calculate the list of tables to be vacuumed - All logic for checking the list against autovac "lives" in SPs - Result: significant simplification to C code in cleanup thread Index: cleanup_thread.c =================================================================== RCS file: /home/cvsd/slony1/slony1-engine/src/slon/cleanup_thread.c,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** cleanup_thread.c 20 Apr 2007 20:53:18 -0000 1.37 --- cleanup_thread.c 27 Jun 2007 15:51:36 -0000 1.38 *************** *** 78,83 **** int vac_enable = SLON_VACUUM_FREQUENCY; char *vacuum_action; ! slon_log(SLON_DEBUG1, "cleanupThread: thread starts\n"); /* --- 78,84 ---- int vac_enable = SLON_VACUUM_FREQUENCY; char *vacuum_action; + int ntuples; ! slon_log(SLON_CONFIG, "cleanupThread: thread starts\n"); /* *************** *** 89,93 **** vac_bias = rand() % (SLON_CLEANUP_SLEEP * 166); } ! slon_log(SLON_DEBUG4, "cleanupThread: bias = %d\n", vac_bias); /* --- 90,94 ---- vac_bias = rand() % (SLON_CLEANUP_SLEEP * 166); } ! slon_log(SLON_CONFIG, "cleanupThread: bias = %d\n", vac_bias); /* *************** *** 139,143 **** PQclear(res); gettimeofday(&tv_end, NULL); ! slon_log(SLON_DEBUG1, "cleanupThread: %8.3f seconds for cleanupEvent()\n", TIMEVAL_DIFF(&tv_start, &tv_end)); --- 140,144 ---- PQclear(res); gettimeofday(&tv_end, NULL); ! slon_log(SLON_INFO, "cleanupThread: %8.3f seconds for cleanupEvent()\n", TIMEVAL_DIFF(&tv_start, &tv_end)); *************** *** 219,223 **** PQclear(res); gettimeofday(&tv_end, NULL); ! slon_log(SLON_DEBUG1, "cleanupThread: %8.3f seconds for delete logs\n", TIMEVAL_DIFF(&tv_start, &tv_end)); --- 220,224 ---- PQclear(res); gettimeofday(&tv_end, NULL); ! slon_log(SLON_INFO, "cleanupThread: %8.3f seconds for delete logs\n", TIMEVAL_DIFF(&tv_start, &tv_end)); *************** *** 233,274 **** { unsigned long latest_xid; - int a_vac = 0; - - vac_count = 0; - - dstring_init(&query3); - /* - * if we are running a version >= 8.1, check to see - * if autovacuum is enabled, if so we should only run - * analyze on the tables in table_list[], otherwise it - * is ok to vacuum analyze - */ - - if (conn->pg_version >=80100) - { - dstring_reset(&query3); - slon_mkquery(&query3, "show autovacuum"); - res = PQexec(dbconn, dstring_data(&query3)); - if (PQresultStatus(res) != PGRES_TUPLES_OK) - { - slon_log(SLON_ERROR, - "cleanupThread: \"%s\" - %s", - dstring_data(&query3), PQresultErrorMessage(res)); - - /* - * slon_retry(); break; - */ - } - else if (strncmp(PQgetvalue(res, 0, 0), "on", 2) == 0) - { - /* - * autovacuum is on - */ - a_vac=1; - } - PQclear(res); - dstring_reset(&query3); - } latest_xid = get_earliest_xid(dbconn); vacuum_action = ""; --- 234,238 ---- *************** *** 276,280 **** { ! slon_log(SLON_DEBUG4, "cleanupThread: xid %d still active - analyze instead\n", earliest_xid); --- 240,244 ---- { ! slon_log(SLON_INFO, "cleanupThread: xid %d still active - analyze instead\n", earliest_xid); *************** *** 282,286 **** else { ! if ((vac_enable == vac_frequency) && (a_vac==0)) { vacuum_action = "vacuum "; --- 246,250 ---- else { ! if (vac_enable == vac_frequency) { vacuum_action = "vacuum "; *************** *** 294,360 **** */ gettimeofday(&tv_start, NULL); - for (t = 0; table_list[t] != NULL ; t++) - { ! sprintf(tstring, table_list[t], rtcfg_namespace); ! if (a_vac==1) ! { ! slon_mkquery(&query3,"select (case when pga.enabled ISNULL THEN true ELSE pga.enabled END) " ! "from \"pg_catalog\".pg_namespace PGN, \"pg_catalog\".pg_class PGC LEFT OUTER JOIN " ! "\"pg_catalog\".pg_autovacuum pga ON (PGC.oid = pga.vacrelid) where PGC.relnamespace = PGN.oid " ! "and %s.slon_quote_input('%s')=%s.slon_quote_brute(PGN.nspname) || '.' || %s.slon_quote_brute(PGC.relname);", ! rtcfg_namespace,tstring, rtcfg_namespace, rtcfg_namespace); ! res = PQexec(dbconn, dstring_data(&query3)); ! if (PQresultStatus(res) != PGRES_TUPLES_OK) /* query error */ ! { ! slon_log(SLON_ERROR, ! "cleanupThread: \"%s\" - %s", ! dstring_data(&query3), PQresultErrorMessage(res)); ! /* ! * slon_retry(); break; ! */ ! } ! else /* no errors */ ! { ! if (PQntuples(res) == 1) /* we want 1 and only 1 row, otherwise skip */ ! { ! if (strncmp(PQgetvalue(res, 0, 0), "f", 1) == 0) ! { ! /* ! * pg_avac is NOT enabled for this table ! * so this means we need to handel it internaly ! */ ! if (vac_enable == vac_frequency) ! { ! vacuum_action = "vacuum "; ! } ! } ! else ! { ! vacuum_action = ""; ! } ! } ! } ! PQclear(res); ! } ! dstring_reset(&query3); ! slon_mkquery(&query3,"%s analyze %s;",vacuum_action, tstring); ! res = PQexec(dbconn, dstring_data(&query3)); if (PQresultStatus(res) != PGRES_COMMAND_OK) /* query error */ { slon_log(SLON_ERROR, "cleanupThread: \"%s\" - %s", ! dstring_data(&query3), PQresultErrorMessage(res)); /* * slon_retry(); break; */ } ! PQclear(res); dstring_reset(&query3); } gettimeofday(&tv_end, NULL); ! slon_log(SLON_DEBUG2, "cleanupThread: %8.3f seconds for vacuuming\n", TIMEVAL_DIFF(&tv_start, &tv_end)); --- 258,305 ---- */ gettimeofday(&tv_start, NULL); ! slon_mkquery(&query2, "select nspname, relname from %s.TablesToVacuum();", rtcfg_namespace); ! res = PQexec(dbconn, dstring_data(&query2)); ! /* for each table... and we should set up the ! * query to return not only the table name, ! * but also a boolean to support what's in the ! * SELECT below; that'll nicely simplify this ! * process... */ ! ! if (PQresultStatus(res) != PGRES_TUPLES_OK) /* query error */ ! { ! slon_log(SLON_ERROR, ! "cleanupThread: \"%s\" - %s", ! dstring_data(&query2), PQresultErrorMessage(res)); ! } ! ntuples = PQntuples(res); ! slon_log(SLON_DEBUG1, "cleanupThread: number of tables to clean: %d\n", ntuples); ! for (t = 0; t < ntuples ; t++) ! { ! char *tab_nspname = PQgetvalue(res, t, 0); ! char *tab_relname = PQgetvalue(res, t, 1); ! ! slon_log (SLON_DEBUG1, "cleanupThread: %s analyze \"%s\".%s;\n", ! vacuum_action, tab_nspname, tab_relname); ! dstring_init(&query3); ! slon_mkquery (&query3, "%s analyze \"%s\".%s;", ! vacuum_action, tab_nspname, tab_relname); ! res2 = PQexec(dbconn, dstring_data(&query3)); if (PQresultStatus(res) != PGRES_COMMAND_OK) /* query error */ { slon_log(SLON_ERROR, "cleanupThread: \"%s\" - %s", ! dstring_data(&query3), PQresultErrorMessage(res2)); /* * slon_retry(); break; */ } ! PQclear(res2); dstring_reset(&query3); } gettimeofday(&tv_end, NULL); ! slon_log(SLON_INFO, "cleanupThread: %8.3f seconds for vacuuming\n", TIMEVAL_DIFF(&tv_start, &tv_end)); *************** *** 416,420 **** } xid = strtoll(PQgetvalue(res, 0, 0), NULL, 10); ! slon_log(SLON_DEBUG3, "cleanupThread: minxid: %d\n", xid); PQclear(res); dstring_free(&query1); --- 361,365 ---- } xid = strtoll(PQgetvalue(res, 0, 0), NULL, 10); ! slon_log(SLON_DEBUG1, "cleanupThread: minxid: %d\n", xid); PQclear(res); dstring_free(&query1);
- Previous message: [Slony1-commit] slony1-engine/src/backend slony1_base.sql slony1_funcs.sql
- Next message: [Slony1-commit] slony1-engine/src/xxid Makefile xxid.v83.sql
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-commit mailing list