diff --git a/server/jobs.js b/server/jobs.js index 8e1454261..a17bd8c9b 100644 --- a/server/jobs.js +++ b/server/jobs.js @@ -1,5 +1,6 @@ const { UptimeKumaServer } = require("./uptime-kuma-server"); const { clearOldData } = require("./jobs/clear-old-data"); +const { incrementalVacuum } = require("./jobs/incremental-vacuum"); const Cron = require("croner"); const jobs = [ @@ -9,6 +10,12 @@ const jobs = [ jobFunc: clearOldData, croner: null, }, + { + name: "incremental-vacuum", + interval: "*/5 * * * *", + jobFunc: incrementalVacuum, + croner: null, + } ]; /** diff --git a/server/jobs/clear-old-data.js b/server/jobs/clear-old-data.js index cf7488cad..ad8ea1d38 100644 --- a/server/jobs/clear-old-data.js +++ b/server/jobs/clear-old-data.js @@ -39,6 +39,8 @@ const clearOldData = async () => { "DELETE FROM heartbeat WHERE time < DATETIME('now', '-' || ? || ' days') ", [ parsedPeriod ] ); + + await R.exec("PRAGMA optimize;"); } catch (e) { log.error("clearOldData", `Failed to clear old data: ${e.message}`); } diff --git a/server/jobs/incremental-vacuum.js b/server/jobs/incremental-vacuum.js new file mode 100644 index 000000000..a45232463 --- /dev/null +++ b/server/jobs/incremental-vacuum.js @@ -0,0 +1,21 @@ +const { R } = require("redbean-node"); +const { log } = require("../../src/util"); + +/** + * Run incremental_vacuum and checkpoint the WAL. + * @return {Promise} A promise that resolves when the process is finished. + */ + +const incrementalVacuum = async () => { + try { + log.debug("incrementalVacuum", "Running incremental_vacuum and wal_checkpoint(PASSIVE)..."); + await R.exec("PRAGMA incremental_vacuum(200)"); + await R.exec("PRAGMA wal_checkpoint(PASSIVE)"); + } catch (e) { + log.error("incrementalVacuum", `Failed: ${e.message}`); + } +}; + +module.exports = { + incrementalVacuum, +};