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

Commit

Permalink
Improve perf of delete device messages query, cf #16479
Browse files Browse the repository at this point in the history
  • Loading branch information
MatMaul committed Oct 13, 2023
1 parent 166ffc0 commit 6104ab5
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions synapse/storage/databases/main/deviceinbox.py
Expand Up @@ -478,17 +478,18 @@ async def delete_messages_for_device(
log_kv({"message": "No changes in cache since last check"})
return 0

ROW_ID_NAME = self.database_engine.row_id_name

def delete_messages_for_device_txn(txn: LoggingTransaction) -> int:
sql = f"""
DELETE FROM device_inbox WHERE {ROW_ID_NAME} IN (
SELECT {ROW_ID_NAME} FROM device_inbox
WHERE user_id = ? AND device_id = ? AND stream_id <= ?
LIMIT {limit}
DELETE FROM device_inbox WHERE user_id = ? AND device_id = ? AND stream_id <= (
SELECT MAX(stream_id) FROM (
SELECT stream_id FROM device_inbox
WHERE user_id = ? AND device_id = ? AND stream_id <= ?
ORDER BY stream_id
LIMIT {limit}
)
)
"""
txn.execute(sql, (user_id, device_id, up_to_stream_id))
txn.execute(sql, (user_id, device_id, user_id, device_id, up_to_stream_id))
return txn.rowcount

count = await self.db_pool.runInteraction(
Expand Down

0 comments on commit 6104ab5

Please sign in to comment.