diff options
author | Erik Johnston <erikj@matrix.org> | 2023-11-16 15:19:35 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-16 15:19:35 +0000 |
commit | 3e8531d3baf205733693f9ae8b43aa0b4c82b744 (patch) | |
tree | b4a153c96b8a2dbea1e7dfa66fa9026afa3e9dad /synapse/handlers | |
parent | Speed up persisting large number of outliers (#16649) (diff) | |
download | synapse-3e8531d3baf205733693f9ae8b43aa0b4c82b744.tar.xz |
Speed up deleting device messages (#16643)
Keeping track of a lower bound of stream ID where we've deleted everything below makes the queries much faster. Otherwise, every time we scan for rows to delete we'd re-scan across all the rows that have previously deleted (until the next table VACUUM).
Diffstat (limited to 'synapse/handlers')
-rw-r--r-- | synapse/handlers/device.py | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/synapse/handlers/device.py b/synapse/handlers/device.py index 93472d0117..1af6d77545 100644 --- a/synapse/handlers/device.py +++ b/synapse/handlers/device.py @@ -396,15 +396,17 @@ class DeviceWorkerHandler: up_to_stream_id = task.params["up_to_stream_id"] # Delete the messages in batches to avoid too much DB load. + from_stream_id = None while True: - res = await self.store.delete_messages_for_device( + from_stream_id, _ = await self.store.delete_messages_for_device_between( user_id=user_id, device_id=device_id, - up_to_stream_id=up_to_stream_id, + from_stream_id=from_stream_id, + to_stream_id=up_to_stream_id, limit=DeviceHandler.DEVICE_MSGS_DELETE_BATCH_LIMIT, ) - if res < DeviceHandler.DEVICE_MSGS_DELETE_BATCH_LIMIT: + if from_stream_id is None: return TaskStatus.COMPLETE, None, None await self.clock.sleep(DeviceHandler.DEVICE_MSGS_DELETE_SLEEP_MS / 1000.0) |