diff options
author | Patrick Cloke <clokep@users.noreply.github.com> | 2022-08-30 07:12:48 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-30 07:12:48 -0400 |
commit | 20df96a7a7e3d676b0beae12d0eeb1f1d668247e (patch) | |
tree | aae97add68dca8779c791cff3cdf24feddd22abd | |
parent | Fix that user cannot `/forget` rooms after the last member has left (#13546) (diff) | |
download | synapse-20df96a7a7e3d676b0beae12d0eeb1f1d668247e.tar.xz |
Speed up inserting `event_push_actions_staging`. (#13634)
By using `execute_values` instead of `execute_batch`.
-rw-r--r-- | changelog.d/13634.feature | 1 | ||||
-rw-r--r-- | synapse/storage/databases/main/event_push_actions.py | 28 |
2 files changed, 9 insertions, 20 deletions
diff --git a/changelog.d/13634.feature b/changelog.d/13634.feature new file mode 100644 index 0000000000..0a8827205d --- /dev/null +++ b/changelog.d/13634.feature @@ -0,0 +1 @@ +Improve performance of sending messages in rooms with thousands of local users. diff --git a/synapse/storage/databases/main/event_push_actions.py b/synapse/storage/databases/main/event_push_actions.py index 8dfa545c27..9f410d69de 100644 --- a/synapse/storage/databases/main/event_push_actions.py +++ b/synapse/storage/databases/main/event_push_actions.py @@ -700,26 +700,14 @@ class EventPushActionsWorkerStore(ReceiptsWorkerStore, StreamWorkerStore, SQLBas int(count_as_unread), # unread column ) - def _add_push_actions_to_staging_txn(txn: LoggingTransaction) -> None: - # We don't use simple_insert_many here to avoid the overhead - # of generating lists of dicts. - - sql = """ - INSERT INTO event_push_actions_staging - (event_id, user_id, actions, notif, highlight, unread) - VALUES (?, ?, ?, ?, ?, ?) - """ - - txn.execute_batch( - sql, - ( - _gen_entry(user_id, actions) - for user_id, actions in user_id_actions.items() - ), - ) - - return await self.db_pool.runInteraction( - "add_push_actions_to_staging", _add_push_actions_to_staging_txn + await self.db_pool.simple_insert_many( + "event_push_actions_staging", + keys=("event_id", "user_id", "actions", "notif", "highlight", "unread"), + values=[ + _gen_entry(user_id, actions) + for user_id, actions in user_id_actions.items() + ], + desc="add_push_actions_to_staging", ) async def remove_push_actions_from_staging(self, event_id: str) -> None: |