From: Teemu Toivola Date: Thu, 9 May 2019 20:39:15 +0000 (+0300) Subject: checkpoint wal database every 4 hours, add debug timing for daemon startup sequence X-Git-Tag: v2.3~36 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d4982070f395bcecc7c8eaf9ea236afc70142a1e;p=vnstat checkpoint wal database every 4 hours, add debug timing for daemon startup sequence --- diff --git a/src/common.h b/src/common.h index c61dcc3..0b93803 100644 --- a/src/common.h +++ b/src/common.h @@ -232,6 +232,7 @@ and most can be changed later from the config file. #define PIDFILE "/var/run/vnstat/vnstat.pid" #define IS64BIT -2 #define WALDB 0 +#define WALDBCHECKPOINTINTERVALMINS 240 /* no transparency by default */ #define TRANSBG 0 diff --git a/src/daemon.c b/src/daemon.c index 6c08993..3bd9bfa 100644 --- a/src/daemon.c +++ b/src/daemon.c @@ -265,6 +265,7 @@ void initdstate(DSTATE *s) s->cleanuphour = getcurrenthour(); s->dbretrycount = 0; s->dcache = NULL; + s->prevwaldbcheckpoint = time(NULL); } void preparedatabases(DSTATE *s) diff --git a/src/daemon.h b/src/daemon.h index a09bb33..5a5865d 100644 --- a/src/daemon.h +++ b/src/daemon.h @@ -10,7 +10,7 @@ typedef struct { uint64_t dbifcount; char cfgfile[512], dirname[512]; char user[33], group[33]; - time_t current, prevdbupdate, prevdbsave; + time_t current, prevdbupdate, prevdbsave, prevwaldbcheckpoint; datacache *dcache; } DSTATE; diff --git a/src/dbsql.c b/src/dbsql.c index 2d65b47..9ed9539 100644 --- a/src/dbsql.c +++ b/src/dbsql.c @@ -1053,6 +1053,15 @@ int db_iserrcodefatal(int errcode) } } +void db_walcheckpoint(void) +{ + timeused(__func__, 1); + if (debug) + printf("wal checkpoint"); + sqlite3_wal_checkpoint_v2(db, NULL, SQLITE_CHECKPOINT_TRUNCATE, NULL, NULL); + timeused(__func__, 0); +} + int dbiflistadd(dbiflist **dbifl, const char *iface) { dbiflist *newif; diff --git a/src/dbsql.h b/src/dbsql.h index 67455aa..7f1142d 100644 --- a/src/dbsql.h +++ b/src/dbsql.h @@ -68,6 +68,7 @@ int db_begintransaction(void); int db_committransaction(void); int db_rollbacktransaction(void); int db_iserrcodefatal(int errcode); +void db_walcheckpoint(void); int dbiflistadd(dbiflist **dbifl, const char *iface); void dbiflistfree(dbiflist **dbifl); diff --git a/src/vnstatd.c b/src/vnstatd.c index f7a0dcc..edbf8fe 100644 --- a/src/vnstatd.c +++ b/src/vnstatd.c @@ -54,6 +54,8 @@ int main(int argc, char *argv[]) } } + timeused("daemon_startup", 1); + /* load config if available */ if (!loadcfg(s.cfgfile)) { return 1; @@ -190,6 +192,7 @@ int main(int argc, char *argv[]) } } + timeused("daemon_startup", 0); s.running = 1; #if defined(__linux__) @@ -258,6 +261,11 @@ int main(int argc, char *argv[]) processdatacache(&s); + if (cfg.waldb && (s.current - s.prevwaldbcheckpoint) >= WALDBCHECKPOINTINTERVALMINS * 60) { + db_walcheckpoint(); + s.prevwaldbcheckpoint = s.current; + } + if (debug) { printf("\n"); }