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

Signed-off-by: Sean Quah <seanq@element.io>
This commit is contained in:
Sean 2021-09-03 17:16:56 +01:00 committed by GitHub
parent 0eae330a26
commit 924276f482
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 43 additions and 1 deletions

View file

@ -29,7 +29,26 @@ if TYPE_CHECKING:
from synapse.server import HomeServer
class PresenceStore(SQLBaseStore):
class PresenceBackgroundUpdateStore(SQLBaseStore):
def __init__(
self,
database: DatabasePool,
db_conn: Connection,
hs: "HomeServer",
):
super().__init__(database, db_conn, hs)
# Used by `PresenceStore._get_active_presence()`
self.db_pool.updates.register_background_index_update(
"presence_stream_not_offline_index",
index_name="presence_stream_state_not_offline_idx",
table="presence_stream",
columns=["state"],
where_clause="state != 'offline'",
)
class PresenceStore(PresenceBackgroundUpdateStore):
def __init__(
self,
database: DatabasePool,
@ -332,6 +351,8 @@ class PresenceStore(SQLBaseStore):
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"