summary refs log tree commit diff
diff options
context:
space:
mode:
authorOlivier Wilkinson (reivilibre) <oliverw@matrix.org>2023-11-10 14:01:08 +0000
committerOlivier Wilkinson (reivilibre) <oliverw@matrix.org>2023-11-10 14:01:08 +0000
commit1d1e8a5634281c4bc931527575ebf0679d6df880 (patch)
tree84140cbe1d203bce7e0dc2182d09b0b7e28930f2
parentUse attempt_to_set_autocommit everywhere. (#16615) (diff)
downloadsynapse-1d1e8a5634281c4bc931527575ebf0679d6df880.tar.xz
Improve performance of fetching event reports when there are many of them
-rw-r--r--synapse/storage/databases/main/room.py46
1 files changed, 29 insertions, 17 deletions
diff --git a/synapse/storage/databases/main/room.py b/synapse/storage/databases/main/room.py

index ef26d5d9d3..851ed83caa 100644 --- a/synapse/storage/databases/main/room.py +++ b/synapse/storage/databases/main/room.py
@@ -1600,25 +1600,37 @@ class RoomWorkerStore(CacheInvalidationWorkerStore): count = cast(Tuple[int], txn.fetchone())[0] sql = """ + WITH considered_event_reports AS ( + SELECT + er.id, + er.received_ts, + er.room_id, + er.event_id, + er.user_id, + er.content, + room_stats_state.canonical_alias, + room_stats_state.name + FROM event_reports AS er + JOIN room_stats_state + ON room_stats_state.room_id = er.room_id + {where_clause} + ORDER BY er.received_ts {order} + LIMIT ? + OFFSET ? + ) + -- only join on `events` after the LIMIT/OFFSET has been applied SELECT - er.id, - er.received_ts, - er.room_id, - er.event_id, - er.user_id, - er.content, + cer.id, + cer.received_ts, + cer.room_id, + cer.event_id, + cer.user_id, + cer.content, events.sender, - room_stats_state.canonical_alias, - room_stats_state.name - FROM event_reports AS er - LEFT JOIN events - ON events.event_id = er.event_id - JOIN room_stats_state - ON room_stats_state.room_id = er.room_id - {where_clause} - ORDER BY er.received_ts {order} - LIMIT ? - OFFSET ? + cer.canonical_alias, + cer.name + FROM considered_event_reports AS cer + LEFT JOIN events ON events.event_id = cer.event_id """.format( where_clause=where_clause, order=order,