summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosef Cejka <jcejka@suse.de>2022-07-29 12:05:05 -0400
committerFrank Ch. Eigler <fche@redhat.com>2022-07-29 12:05:05 -0400
commit8d701db033bad8735358abb33e647d7e159e157e (patch)
treef490da25da6bc7b62eeb91f974885c2ed8dc1069
parentcc2d459520de4f6680a0e9e9356d014356bd4718 (diff)
downloadelfutils-8d701db033bad8735358abb33e647d7e159e157e.tar.gz
debuginfod: create indexes to speed up grooming
Create indexes on _r_de and _f_de tables to speed up delete operations called by groom() function. Primary keys of those tables are optimalized to search rows by buildids so delete by file and mtime attributes has to scan the whole table. On large database can single delete query take minutes and grooming will be aborted before completion by time limit. New indexes are compatible with current sqlite schema. Signed-off-by: Josef Cejka <jcejka@suse.de>
-rw-r--r--debuginfod/ChangeLog4
-rw-r--r--debuginfod/debuginfod.cxx4
2 files changed, 8 insertions, 0 deletions
diff --git a/debuginfod/ChangeLog b/debuginfod/ChangeLog
index 029687ff..2ff63e22 100644
--- a/debuginfod/ChangeLog
+++ b/debuginfod/ChangeLog
@@ -1,3 +1,7 @@
+2022-07-29 Josef Cejka <jcejka@suse.de>
+
+ * debuginfod.cxx: Create db indexes for fast delete while grooming.
+
2022-06-03 Michael Trapp <michael.trapp@sap.com>
* debuginfod.cxx (scan_source_info): New global.
diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
index 51f4302b..303ffe00 100644
--- a/debuginfod/debuginfod.cxx
+++ b/debuginfod/debuginfod.cxx
@@ -174,6 +174,8 @@ static const char DEBUGINFOD_SQLITE_DDL[] =
" foreign key (buildid) references " BUILDIDS "_buildids(id) on update cascade on delete cascade,\n"
" primary key (buildid, file, mtime)\n"
" ) " WITHOUT_ROWID ";\n"
+ // Index for faster delete by file identifier
+ "create index if not exists " BUILDIDS "_f_de_idx on " BUILDIDS "_f_de (file, mtime);\n"
"create table if not exists " BUILDIDS "_f_s (\n"
" buildid integer not null,\n"
" artifactsrc integer not null,\n"
@@ -196,6 +198,8 @@ static const char DEBUGINFOD_SQLITE_DDL[] =
" foreign key (buildid) references " BUILDIDS "_buildids(id) on update cascade on delete cascade,\n"
" primary key (buildid, debuginfo_p, executable_p, file, content, mtime)\n"
" ) " WITHOUT_ROWID ";\n"
+ // Index for faster delete by archive file identifier
+ "create index if not exists " BUILDIDS "_r_de_idx on " BUILDIDS "_r_de (file, mtime);\n"
"create table if not exists " BUILDIDS "_r_sref (\n" // outgoing dwarf sourcefile references from rpm
" buildid integer not null,\n"
" artifactsrc integer not null,\n"