From 5a0d80e685a0172500bf17dbb1e0c27037e58b0b Mon Sep 17 00:00:00 2001 From: Florian Pritz Date: Wed, 24 Jan 2018 15:03:45 +0100 Subject: Only increase sqlite cache size during update While not all operations fill the cache, --list does. However, for read operations it doesn't actually appear to help performance. Limit the large cache setting to update operations only because there it does really increase performance. Signed-off-by: Florian Pritz --- lib/App/BorgRestore.pm | 2 ++ lib/App/BorgRestore/DB.pm | 11 +++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/App/BorgRestore.pm b/lib/App/BorgRestore.pm index c3b37fd..964ea48 100644 --- a/lib/App/BorgRestore.pm +++ b/lib/App/BorgRestore.pm @@ -532,6 +532,8 @@ method update_cache() { my $borg_archives = $self->{borg}->borg_list(); + # write operations benefit from the large cache so set the cache size here + $self->{db}->set_cache_size(); $self->_handle_removed_archives($borg_archives); $self->_handle_added_archives($borg_archives); diff --git a/lib/App/BorgRestore/DB.pm b/lib/App/BorgRestore/DB.pm index 1f1427e..177df27 100644 --- a/lib/App/BorgRestore/DB.pm +++ b/lib/App/BorgRestore/DB.pm @@ -32,23 +32,26 @@ method new($class: $db_path, $cache_size) { # ensure the cache directory exists path($db_path)->parent->mkpath({mode => oct(700)}); - my $db = $self->_open_db($db_path, $cache_size); + my $db = $self->_open_db($db_path); $self->initialize_db(); } else { - $self->_open_db($db_path, $cache_size); + $self->_open_db($db_path); } $self->{cache_size} = $cache_size; return $self; } -method _open_db($dbfile, $cache_size) { +method _open_db($dbfile) { $log->debugf("Opening database at %s", $dbfile); $self->{dbh} = DBI->connect("dbi:SQLite:dbname=$dbfile","","", {RaiseError => 1, Taint => 1}); - $self->{dbh}->do("PRAGMA cache_size=-".$cache_size); $self->{dbh}->do("PRAGMA strict=ON"); } +method set_cache_size() { + $self->{dbh}->do("PRAGMA cache_size=-".$self->{cache_size}); +} + method initialize_db() { $log->debug("Creating initial database"); $self->{dbh}->do('create table `files` (`path` text, primary key (`path`)) without rowid;'); -- cgit v1.2.3-24-g4f1b