Add index to cache invalidations (#12747)
For workers that rarely write to the cache the `get_all_updated_caches` query can become expensive if the worker falls behind when reading the cache.pull/12498/head
							parent
							
								
									fcf951d5dc
								
							
						
					
					
						commit
						32ef24fbd7
					
				|  | @ -0,0 +1 @@ | |||
| Fix poor database performance when reading the cache invalidation stream for large servers with lots of workers. | ||||
|  | @ -57,6 +57,14 @@ class CacheInvalidationWorkerStore(SQLBaseStore): | |||
| 
 | ||||
|         self._instance_name = hs.get_instance_name() | ||||
| 
 | ||||
|         self.db_pool.updates.register_background_index_update( | ||||
|             update_name="cache_invalidation_index_by_instance", | ||||
|             index_name="cache_invalidation_stream_by_instance_instance_index", | ||||
|             table="cache_invalidation_stream_by_instance", | ||||
|             columns=("instance_name", "stream_id"), | ||||
|             psql_only=True,  # The table is only on postgres DBs. | ||||
|         ) | ||||
| 
 | ||||
|     async def get_all_updated_caches( | ||||
|         self, instance_name: str, last_id: int, current_id: int, limit: int | ||||
|     ) -> Tuple[List[Tuple[int, tuple]], int, bool]: | ||||
|  |  | |||
|  | @ -0,0 +1,18 @@ | |||
| /* Copyright 2022 The Matrix.org Foundation C.I.C | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *    http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| -- Background update to clear the inboxes of hidden and deleted devices. | ||||
| INSERT INTO background_updates (ordering, update_name, progress_json) VALUES | ||||
|   (6902, 'cache_invalidation_index_by_instance', '{}'); | ||||
		Loading…
	
		Reference in New Issue
	
	 Erik Johnston
						Erik Johnston