diff --git a/packages/cli/commands/start.ts b/packages/cli/commands/start.ts index b6f0a39b3e..52c5cd33dd 100644 --- a/packages/cli/commands/start.ts +++ b/packages/cli/commands/start.ts @@ -12,6 +12,7 @@ import { ActiveWorkflowRunner, CredentialsOverwrites, CredentialTypes, + DatabaseType, Db, ExternalHooks, GenericHelpers, @@ -156,6 +157,18 @@ export class Start extends Command { // Wait till the database is ready await startDbInitPromise; + const dbType = await GenericHelpers.getConfigValue('database.type') as DatabaseType; + + if (dbType === 'sqlite') { + const vacuumInterval = config.get('database.sqlite.vacuumInterval') as number; + if (vacuumInterval >= 0) { + Db.collections.Execution!.query("VACUUM;"); + if (vacuumInterval > 0) { + setInterval(() => Db.collections.Execution!.query("VACUUM;"), vacuumInterval * 1000); + } + } + } + if (flags.tunnel === true) { this.log('\nWaiting for tunnel ...'); diff --git a/packages/cli/config/index.ts b/packages/cli/config/index.ts index 5cbacddf85..f8a348274a 100644 --- a/packages/cli/config/index.ts +++ b/packages/cli/config/index.ts @@ -124,6 +124,14 @@ const config = convict({ env: 'DB_MYSQLDB_USER', }, }, + sqlite: { + vacuumInterval: { + doc: 'SQLite Vacuum operation interval', + format: Number, + default: 86400, // Given in seconds; -1 disables. 0 executes only at startup. + env: 'DB_SQLITE_VACUUM_INTERVAL', + }, + }, }, credentials: {