Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Speed up deleting of old rows in event_push_actions (#15531)
Browse files Browse the repository at this point in the history
Enforce that we use index scans (rather than seq scans), which we also do for state queries. The reason to enforce this is that we can't correctly get PostgreSQL to understand the distribution of `stream_ordering` depends on `highlight`, and so it always defaults (on matrix.org) to sequential scans.
  • Loading branch information
erikjohnston committed May 3, 2023
1 parent fc3a878 commit 28ac1a1
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelog.d/15531.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Speed up deleting of old rows in `event_push_actions`.
9 changes: 9 additions & 0 deletions synapse/storage/databases/main/event_push_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -1612,6 +1612,15 @@ def remove_old_push_actions_that_have_rotated_txn(
# deletes.
batch_size = self._rotate_count

if isinstance(self.database_engine, PostgresEngine):
# Temporarily disable sequential scans in this transaction. We
# need to do this as the postgres statistics don't take into
# account the `highlight = 0` part when estimating the
# distribution of `stream_ordering`. I.e. since we keep old
# highlight rows the query planner thinks there are way more old
# rows to delete than there actually are.
txn.execute("SET LOCAL enable_seqscan=off")

txn.execute(
"""
SELECT stream_ordering FROM event_push_actions
Expand Down

0 comments on commit 28ac1a1

Please sign in to comment.