mirror of
https://github.com/immich-app/immich.git
synced 2026-05-18 03:10:24 +03:00
fix: periodically execute pragma optimize (#28241)
Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
@@ -176,15 +176,8 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi {
|
|||||||
final backgroundSyncManager = _ref?.read(backgroundSyncProvider);
|
final backgroundSyncManager = _ref?.read(backgroundSyncProvider);
|
||||||
final nativeSyncApi = _ref?.read(nativeSyncApiProvider);
|
final nativeSyncApi = _ref?.read(nativeSyncApiProvider);
|
||||||
|
|
||||||
await _drift.close();
|
|
||||||
await _driftLogger.close();
|
|
||||||
|
|
||||||
_ref?.dispose();
|
|
||||||
_ref = null;
|
|
||||||
|
|
||||||
_cancellationToken.complete();
|
|
||||||
_logger.info("Cleaning up background worker");
|
_logger.info("Cleaning up background worker");
|
||||||
|
_cancellationToken.complete();
|
||||||
final cleanupFutures = [
|
final cleanupFutures = [
|
||||||
nativeSyncApi?.cancelHashing(),
|
nativeSyncApi?.cancelHashing(),
|
||||||
workerManagerPatch.dispose().catchError((_) async {
|
workerManagerPatch.dispose().catchError((_) async {
|
||||||
@@ -195,10 +188,15 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi {
|
|||||||
Store.dispose(),
|
Store.dispose(),
|
||||||
|
|
||||||
backgroundSyncManager?.cancel(),
|
backgroundSyncManager?.cancel(),
|
||||||
|
_drift.optimize(allTables: true),
|
||||||
];
|
];
|
||||||
|
|
||||||
await Future.wait(cleanupFutures.nonNulls);
|
await Future.wait(cleanupFutures.nonNulls);
|
||||||
_logger.info("Background worker resources cleaned up");
|
await _drift.close();
|
||||||
|
await _driftLogger.close();
|
||||||
|
|
||||||
|
_ref?.dispose();
|
||||||
|
_ref = null;
|
||||||
} catch (error, stack) {
|
} catch (error, stack) {
|
||||||
dPrint(() => 'Failed to cleanup background worker: $error with stack: $stack');
|
dPrint(() => 'Failed to cleanup background worker: $error with stack: $stack');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import 'package:immich_mobile/infrastructure/entities/user.entity.dart';
|
|||||||
import 'package:immich_mobile/infrastructure/entities/user_metadata.entity.dart';
|
import 'package:immich_mobile/infrastructure/entities/user_metadata.entity.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.drift.dart';
|
import 'package:immich_mobile/infrastructure/repositories/db.repository.drift.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.steps.dart';
|
import 'package:immich_mobile/infrastructure/repositories/db.repository.steps.dart';
|
||||||
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
@DriftDatabase(
|
@DriftDatabase(
|
||||||
tables: [
|
tables: [
|
||||||
@@ -85,6 +86,17 @@ class Drift extends $Drift {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> optimize({bool allTables = false}) async {
|
||||||
|
try {
|
||||||
|
if (allTables) {
|
||||||
|
await customStatement('PRAGMA optimize=0x10002');
|
||||||
|
}
|
||||||
|
await customStatement('PRAGMA optimize');
|
||||||
|
} catch (error) {
|
||||||
|
Logger('Drift').fine('Failed to optimize database', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get schemaVersion => 25;
|
int get schemaVersion => 25;
|
||||||
|
|
||||||
@@ -265,6 +277,7 @@ class Drift extends $Drift {
|
|||||||
}
|
}
|
||||||
|
|
||||||
await customStatement('PRAGMA foreign_keys = ON;');
|
await customStatement('PRAGMA foreign_keys = ON;');
|
||||||
|
await optimize();
|
||||||
},
|
},
|
||||||
beforeOpen: (details) async {
|
beforeOpen: (details) async {
|
||||||
await customStatement('PRAGMA foreign_keys = ON');
|
await customStatement('PRAGMA foreign_keys = ON');
|
||||||
|
|||||||
Reference in New Issue
Block a user