Speed up inserting `event_push_actions_staging`. (#13634)
By using `execute_values` instead of `execute_batch`.pull/13666/head
							parent
							
								
									682dfcfc0d
								
							
						
					
					
						commit
						20df96a7a7
					
				| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Improve performance of sending messages in rooms with thousands of local users.
 | 
			
		||||
| 
						 | 
				
			
			@ -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:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue