Optimize submission deletion

The nested select was producing a sequential lookup into the books
table, that took hours to resolv.
This commit is contained in:
Las Zenow 2020-11-18 11:52:26 +00:00
parent ccb9e6660d
commit c82fd09e0d
2 changed files with 13 additions and 2 deletions

View file

@ -246,6 +246,7 @@ CREATE INDEX IF NOT EXISTS visits_book_id_idx on visits(book_id);
CREATE INDEX IF NOT EXISTS submissions_id_idx on submissions(submission_id);
CREATE INDEX IF NOT EXISTS submissions_book_idx on submissions(book_id);
CREATE INDEX IF NOT EXISTS submissions_user_idx on submissions(user_id);
CREATE INDEX IF NOT EXISTS submissions_last_modified_idx on submissions(last_modified);
-- Submissions constraint
ALTER TABLE ONLY submissions

View file

@ -100,11 +100,21 @@ func (db *pgDB) submissionsCleaner() {
for true {
time.Sleep(periodicity)
_, err := db.sql.Model(&Submission{}).
Where("book_id is null OR book_id in (SELECT id FROM books WHERE active is true)").
Where("book_id is null").
Where("last_modified < CURRENT_TIMESTAMP - interval ?", fmt.Sprintf("%d days", daysExpireSubmission)).
Delete()
if err != nil {
log.Error("Error deleting submissions: ", err)
log.Error("Error deleting null submissions: ", err)
}
_, err = db.sql.Model(&Submission{}).
TableExpr(`books`).
Where("book_id = books.id").
Where("books.active is true").
Where("last_modified < CURRENT_TIMESTAMP - interval ?", fmt.Sprintf("%d days", daysExpireSubmission)).
Delete()
if err != nil {
log.Error("Error deleting approved submissions: ", err)
}
}
}