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:
parent
ccb9e6660d
commit
c82fd09e0d
2 changed files with 13 additions and 2 deletions
|
@ -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_id_idx on submissions(submission_id);
|
||||||
CREATE INDEX IF NOT EXISTS submissions_book_idx on submissions(book_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_user_idx on submissions(user_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS submissions_last_modified_idx on submissions(last_modified);
|
||||||
|
|
||||||
-- Submissions constraint
|
-- Submissions constraint
|
||||||
ALTER TABLE ONLY submissions
|
ALTER TABLE ONLY submissions
|
||||||
|
|
|
@ -100,11 +100,21 @@ func (db *pgDB) submissionsCleaner() {
|
||||||
for true {
|
for true {
|
||||||
time.Sleep(periodicity)
|
time.Sleep(periodicity)
|
||||||
_, err := db.sql.Model(&Submission{}).
|
_, 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)).
|
Where("last_modified < CURRENT_TIMESTAMP - interval ?", fmt.Sprintf("%d days", daysExpireSubmission)).
|
||||||
Delete()
|
Delete()
|
||||||
if err != nil {
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue