From 294f0e8b983ff5225dd80b4f181e83ec79c0243c Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofanov Date: Wed, 9 Sep 2026 10:19:44 +0300 Subject: [PATCH] Query time and database optimization --- src/data/repositories.rs | 5 +++++ src/data_provider/sqlite.rs | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/data/repositories.rs b/src/data/repositories.rs index 4cd83d4..8824a6b 100644 --- a/src/data/repositories.rs +++ b/src/data/repositories.rs @@ -11,6 +11,8 @@ use rusqlite::Connection; use std::marker::PhantomData; use std::ops::{Deref, Index, IndexMut}; use std::sync::Arc; +use std::time::Instant; +use log::debug; pub trait Repository where @@ -158,6 +160,7 @@ impl, D: DbLayer> Qu where T: Send + Sync, { + let time = Instant::now(); self.cache.clear(); if self.parallel { self.cache = data_repository @@ -186,6 +189,8 @@ impl, D: DbLayer> Qu .map(|(i, entity)| EntityHandle::new(entity.id(), i, false)) .collect::>(), ); + + debug!("Query for {} elements (filtered {}) takes {:?}", self.len(), self.cache.len(), time.elapsed()); } pub fn handles(&self) -> impl Iterator> { diff --git a/src/data_provider/sqlite.rs b/src/data_provider/sqlite.rs index 5e98b0d..43a7da2 100644 --- a/src/data_provider/sqlite.rs +++ b/src/data_provider/sqlite.rs @@ -1,6 +1,7 @@ use crate::fs::*; use rusqlite::Connection; use std::ops::{Deref, DerefMut}; +use log::error; pub fn create_db() { let db_file = db_path(); @@ -108,6 +109,18 @@ impl Default for SqliteConnection { impl SqliteConnection { pub fn finish(&mut self) { + let connection = self.0.take().unwrap(); + connection + .query_row("PRAGMA wal_checkpoint(TRUNCATE)", [], |_| Ok(())) + .unwrap_or_else(|e| { + error!("Ошибка при checkpoint WAL: {e}"); + }); + connection + .query_row("PRAGMA optimize", [], |_| Ok(())) + .unwrap_or_else(|e| { + error!("Ошибка при оптимизации БД: {e}"); + }); + self.0 = None; } pub fn restart(&mut self) {