mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-03-15 04:17:30 +01:00
Add flag to optimize db. Remove ANALYZE on startup.
Entire-Checkpoint: d49917ff4b10
This commit is contained in:
@@ -11,7 +11,7 @@ import "flag"
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
flagReinitDB, flagInit, flagServer, flagSyncLDAP, flagGops, flagMigrateDB, flagRevertDB,
|
flagReinitDB, flagInit, flagServer, flagSyncLDAP, flagGops, flagMigrateDB, flagRevertDB,
|
||||||
flagForceDB, flagDev, flagVersion, flagLogDateTime, flagApplyTags bool
|
flagForceDB, flagDev, flagVersion, flagLogDateTime, flagApplyTags, flagOptimizeDB bool
|
||||||
flagNewUser, flagDelUser, flagGenJWT, flagConfigFile, flagImportJob, flagLogLevel string
|
flagNewUser, flagDelUser, flagGenJWT, flagConfigFile, flagImportJob, flagLogLevel string
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -27,6 +27,7 @@ func cliInit() {
|
|||||||
flag.BoolVar(&flagRevertDB, "revert-db", false, "Migrate database to previous version and exit")
|
flag.BoolVar(&flagRevertDB, "revert-db", false, "Migrate database to previous version and exit")
|
||||||
flag.BoolVar(&flagApplyTags, "apply-tags", false, "Run taggers on all completed jobs and exit")
|
flag.BoolVar(&flagApplyTags, "apply-tags", false, "Run taggers on all completed jobs and exit")
|
||||||
flag.BoolVar(&flagForceDB, "force-db", false, "Force database version, clear dirty flag and exit")
|
flag.BoolVar(&flagForceDB, "force-db", false, "Force database version, clear dirty flag and exit")
|
||||||
|
flag.BoolVar(&flagOptimizeDB, "optimize-db", false, "Optimize database: run VACUUM to reclaim space, then ANALYZE to update query planner statistics")
|
||||||
flag.BoolVar(&flagLogDateTime, "logdate", false, "Set this flag to add date and time to log messages")
|
flag.BoolVar(&flagLogDateTime, "logdate", false, "Set this flag to add date and time to log messages")
|
||||||
flag.StringVar(&flagConfigFile, "config", "./config.json", "Specify alternative path to `config.json`")
|
flag.StringVar(&flagConfigFile, "config", "./config.json", "Specify alternative path to `config.json`")
|
||||||
flag.StringVar(&flagNewUser, "add-user", "", "Add a new user. Argument format: <username>:[admin,support,manager,api,user]:<password>")
|
flag.StringVar(&flagNewUser, "add-user", "", "Add a new user. Argument format: <username>:[admin,support,manager,api,user]:<password>")
|
||||||
|
|||||||
@@ -509,6 +509,20 @@ func run() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Optimize database if requested
|
||||||
|
if flagOptimizeDB {
|
||||||
|
db := repository.GetConnection()
|
||||||
|
cclog.Print("Running VACUUM to reclaim space and defragment database...")
|
||||||
|
if _, err := db.DB.Exec("VACUUM"); err != nil {
|
||||||
|
return fmt.Errorf("VACUUM failed: %w", err)
|
||||||
|
}
|
||||||
|
cclog.Print("Running ANALYZE to update query planner statistics...")
|
||||||
|
if _, err := db.DB.Exec("ANALYZE"); err != nil {
|
||||||
|
return fmt.Errorf("ANALYZE failed: %w", err)
|
||||||
|
}
|
||||||
|
cclog.Exitf("OptimizeDB Success: Database '%s' optimized (VACUUM + ANALYZE).\n", config.Keys.DB)
|
||||||
|
}
|
||||||
|
|
||||||
// Handle user commands (add, delete, sync, JWT)
|
// Handle user commands (add, delete, sync, JWT)
|
||||||
if err := handleUserCommands(); err != nil {
|
if err := handleUserCommands(); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -49,14 +49,6 @@ func setupSqlite(db *sql.DB, cfg *RepositoryConfig) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update query planner statistics so SQLite picks optimal indexes.
|
|
||||||
// Without this, SQLite guesses row distributions and often chooses wrong
|
|
||||||
// indexes for queries with IN clauses + ORDER BY, causing full table sorts
|
|
||||||
// in temp B-trees instead of using covering indexes.
|
|
||||||
if _, err := db.Exec("ANALYZE"); err != nil {
|
|
||||||
cclog.Warnf("Failed to run ANALYZE: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user