diff --git a/src/libs/services/database/impl/Session.cpp b/src/libs/services/database/impl/Session.cpp index 8134316d..2e8307ae 100644 --- a/src/libs/services/database/impl/Session.cpp +++ b/src/libs/services/database/impl/Session.cpp @@ -187,4 +187,14 @@ namespace Database LMS_LOG(DB, INFO) << "Database Analyze complete"; } + void Session::optimize() + { + LMS_LOG(DB, INFO) << "Optimizing database..."; + { + auto uniqueTransaction{ createUniqueTransaction() }; + _session.execute("PRAGMA optimize"); + } + LMS_LOG(DB, INFO) << "Database optimizing complete"; + } + } // namespace Database diff --git a/src/libs/services/database/include/services/database/Session.hpp b/src/libs/services/database/include/services/database/Session.hpp index 2b36e97d..504b516a 100644 --- a/src/libs/services/database/include/services/database/Session.hpp +++ b/src/libs/services/database/include/services/database/Session.hpp @@ -61,6 +61,7 @@ namespace Database void checkSharedLocked(); void analyze(); + void optimize(); void prepareTables(); // need to run only once at startup diff --git a/src/libs/services/scanner/impl/ScanStepScanFiles.cpp b/src/libs/services/scanner/impl/ScanStepScanFiles.cpp index 76d29439..86820bd5 100644 --- a/src/libs/services/scanner/impl/ScanStepScanFiles.cpp +++ b/src/libs/services/scanner/impl/ScanStepScanFiles.cpp @@ -307,6 +307,10 @@ namespace Scanner context.currentStepStats.processedElems++; _progressCallback(context.currentStepStats); + + // optimize the database during scan (if we import a very large database, it may be too late to do it once at end) + if ((context.stats.nbChanges() % 5'000) == 0) + _db.getTLSSession().optimize(); } return true;