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

Add a partial index to presence_stream to speed up startups #10748

Merged
merged 2 commits into from
Sep 3, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/10748.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add an index to `presence_stream` to hopefully speed up startups a little.
11 changes: 11 additions & 0 deletions synapse/storage/databases/main/presence.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,15 @@ def __init__(
prefilled_cache=presence_cache_prefill,
)

# Used by `_get_active_presence()`
self.db_pool.updates.register_background_index_update(
"presence_stream_not_offline_index",
index_name="presence_stream_state_not_offline_idx",
squahtx marked this conversation as resolved.
Show resolved Hide resolved
table="presence_stream",
columns=["state"],
where_clause="state != 'offline'",
)

async def update_presence(self, presence_states):
assert self._can_persist_presence

Expand Down Expand Up @@ -332,6 +341,8 @@ def _get_active_presence(self, db_conn: Connection):
the appropriate time outs.
"""

# The `presence_stream_state_not_offline_idx` index should be used for this
# query.
sql = (
"SELECT user_id, state, last_active_ts, last_federation_update_ts,"
" last_user_sync_ts, status_msg, currently_active FROM presence_stream"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright 2021 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.
*/

INSERT INTO background_updates (ordering, update_name, progress_json) VALUES
(6304, 'presence_stream_not_offline_index', '{}');