summaryrefslogtreecommitdiff
path: root/contrib/pg_autovacuum/pg_autovacuum.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/pg_autovacuum/pg_autovacuum.h')
-rw-r--r--contrib/pg_autovacuum/pg_autovacuum.h130
1 files changed, 81 insertions, 49 deletions
diff --git a/contrib/pg_autovacuum/pg_autovacuum.h b/contrib/pg_autovacuum/pg_autovacuum.h
index 18a85bc3d4..63a3196536 100644
--- a/contrib/pg_autovacuum/pg_autovacuum.h
+++ b/contrib/pg_autovacuum/pg_autovacuum.h
@@ -2,80 +2,112 @@
* Header file for pg_autovacuum.c
* (c) 2003 Matthew T. O'Connor
*/
+
#include "postgres_fe.h"
#include <unistd.h>
+#ifdef __GLIBC__
+#include <getopt.h>
+#endif
#include <sys/time.h>
+/* These next two lines are correct when pg_autovaccum is compiled
+ from within the postgresql source tree */
#include "libpq-fe.h"
#include "lib/dllist.h"
+/* Had to change the last two lines to compile on
+ Redhat outside of postgresql source tree */
+/*
+#include "/usr/include/libpq-fe.h"
+#include "/usr/include/pgsql/server/lib/dllist.h"
+*/
#define AUTOVACUUM_DEBUG 1
-#define BASETHRESHOLD 100
-#define SCALINGFACTOR 2
-#define SLEEPVALUE 1
-#define SLEEPSCALINGFACTOR 0
+#define VACBASETHRESHOLD 1000
+#define VACSCALINGFACTOR 2
+#define SLEEPBASEVALUE 300
+#define SLEEPSCALINGFACTOR 2
#define UPDATE_INTERVAL 2
+
+/* these two constants are used to tell update_table_stats what operation we just perfomred */
+#define VACUUM_ANALYZE 0
+#define ANALYZE_ONLY 1
+
#define TABLE_STATS_ALL "select a.relfilenode,a.relname,a.relnamespace,a.relpages,a.reltuples,b.schemaname,b.n_tup_ins,b.n_tup_upd,b.n_tup_del from pg_class a, pg_stat_all_tables b where a.relfilenode=b.relid"
#define TABLE_STATS_USER "select a.relfilenode,a.relname,a.relnamespace,a.relpages,a.reltuples,b.schemaname,b.n_tup_ins,b.n_tup_upd,b.n_tup_del from pg_class a, pg_stat_user_tables b where a.relfilenode=b.relid"
#define FRONTEND
+#define PAGES_QUERY "select relfilenode,reltuples,relpages from pg_class where relfilenode=%i"
+#define FROZENOID_QUERY "select oid,age(datfrozenxid) from pg_database where datname = 'template1'"
+#define FROZENOID_QUERY2 "select oid,datname,age(datfrozenxid) from pg_database where datname!='template0'"
-struct cmdargs{
- int tuple_base_threshold,sleep_base_value,debug;
- float tuple_scaling_factor,sleep_scaling_factor;
- char *user, *password, *host, *port;
-}; typedef struct cmdargs cmd_args;
+/* define cmd_args stucture */
+struct cmdargs
+{
+ int vacuum_base_threshold, analyze_base_threshold, sleep_base_value, debug, daemonize;
+ float vacuum_scaling_factor, analyze_scaling_factor, sleep_scaling_factor;
+ char *user, *password, *host, *logfile, *port;
+};
+typedef struct cmdargs cmd_args;
/* define cmd_args as global so we can get to them everywhere */
-cmd_args *args;
-
-struct tableinfo{
- char *schema_name,*table_name;
- int insertThreshold,deleteThreshold;
- int relfilenode,reltuples,relpages;
- long InsertsAtLastAnalyze; /* equal to: inserts + updates as of the last analyze or initial values at startup */
- long DeletesAtLastVacuum; /* equal to: deletes + updates as of the last vacuum or initial values at startup */
- }; typedef struct tableinfo tbl_info;
+cmd_args *args;
/* Might need to add a time value for last time the whold database was vacuumed.
I think we need to guarantee this happens approx every 1Million TX's */
-struct dbinfo{
- int oid,age;
- int insertThreshold,deleteThreshold; /* Use these as defaults for table thresholds */
- PGconn *conn;
- char *dbname,*username,*password;
- Dllist *table_list;
- }; typedef struct dbinfo db_info;
+struct dbinfo
+{
+ int oid, age;
+ int analyze_threshold, vacuum_threshold; /* Use these as defaults for table thresholds */
+ PGconn *conn;
+ char *dbname, *username, *password;
+ Dllist *table_list;
+};
+typedef struct dbinfo db_info;
+
+struct tableinfo
+{
+ char *schema_name, *table_name;
+ int relfilenode, reltuples, relpages;
+ long analyze_threshold, vacuum_threshold;
+ long CountAtLastAnalyze; /* equal to: inserts + updates as of the last analyze or initial values at startup */
+ long CountAtLastVacuum; /* equal to: deletes + updates as of the last vacuum or initial values at startup */
+ long curr_analyze_count, curr_vacuum_count; /* Latest values from stats system */
+ db_info *dbi; /* pointer to the database that this table belongs to */
+};
+typedef struct tableinfo tbl_info;
/* Functions for dealing with command line arguements */
-static cmd_args *get_cmd_args(int argc,char *argv[]);
-static void print_cmd_args(void);
-static void free_cmd_args(void);
+static cmd_args *get_cmd_args (int argc, char *argv[]);
+static void print_cmd_args (void);
+static void free_cmd_args (void);
+static void usage (void);
/* Functions for managing database lists */
-static Dllist *init_db_list(void);
-static db_info *init_dbinfo(char *dbname,int oid,int age);
-static void update_db_list(Dllist *db_list);
-static void remove_db_from_list(Dlelem *db_to_remove);
-static void print_db_info(db_info *dbi,int print_table_list);
-static void print_db_list(Dllist *db_list,int print_table_lists);
-static int xid_wraparound_check(db_info *dbi);
-static void free_db_list(Dllist *db_list);
+static Dllist *init_db_list (void);
+static db_info *init_dbinfo (char *dbname, int oid, int age);
+static void update_db_list (Dllist * db_list);
+static void remove_db_from_list (Dlelem * db_to_remove);
+static void print_db_info (db_info * dbi, int print_table_list);
+static void print_db_list (Dllist * db_list, int print_table_lists);
+static int xid_wraparound_check (db_info * dbi);
+static void free_db_list (Dllist * db_list);
/* Functions for managing table lists */
-static tbl_info *init_table_info(PGresult *conn, int row);
-static void update_table_list(db_info *dbi);
-static void remove_table_from_list(Dlelem *tbl_to_remove);
-static void print_table_list(Dllist *tbl_node);
-static void print_table_info(tbl_info *tbl);
-static void update_table_thresholds(db_info *dbi,tbl_info *tbl);
-static void free_tbl_list(Dllist *tbl_list);
+static tbl_info *init_table_info (PGresult * conn, int row, db_info *dbi);
+static void update_table_list (db_info * dbi);
+static void remove_table_from_list (Dlelem * tbl_to_remove);
+static void print_table_list (Dllist * tbl_node);
+static void print_table_info (tbl_info * tbl);
+static void update_table_thresholds (db_info * dbi, tbl_info * tbl, int vacuum_type);
+static void free_tbl_list (Dllist * tbl_list);
/* A few database helper functions */
-static int check_stats_enabled(db_info *dbi);
-static PGconn *db_connect(db_info *dbi);
-static void db_disconnect(db_info *dbi);
-static PGresult *send_query(const char *query,db_info *dbi);
-static char *query_table_stats(db_info *dbi);
-
+static int check_stats_enabled (db_info * dbi);
+static PGconn *db_connect (db_info * dbi);
+static void db_disconnect (db_info * dbi);
+static PGresult *send_query (const char *query, db_info * dbi);
+static char *query_table_stats (db_info * dbi);
+/* Other Generally needed Functions */
+static void daemonize(void);
+static void log_entry (const char *logentry);