aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Chris Lovering <[email protected]>2024-06-30 19:27:40 +0100
committerGravatar Chris Lovering <[email protected]>2024-06-30 19:34:48 +0100
commitf69fb12e122f01a826ca661ab8402fa4f48d2a33 (patch)
treec107864ca6cf04d1c5e027d14fedea521a481474
parentImprove user in-guild sync process (diff)
Improve user in_guild sync query time by only loading the id column
This means the other, larger, columns do not need to be deserialised, bringing the query time down from 7.4s down to 3.5s. I couldn't simply do select(models.User.id) here, as we need the full User object in order to mutate and update it later inthe process.
-rw-r--r--metricity/exts/event_listeners/startup_sync.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/metricity/exts/event_listeners/startup_sync.py b/metricity/exts/event_listeners/startup_sync.py
index 017ea1f..554f952 100644
--- a/metricity/exts/event_listeners/startup_sync.py
+++ b/metricity/exts/event_listeners/startup_sync.py
@@ -7,6 +7,7 @@ from discord.ext import commands
from pydis_core.utils import logging, scheduling
from sqlalchemy import column, select
from sqlalchemy.dialects.postgresql import insert
+from sqlalchemy.orm import load_only
from metricity import models
from metricity.bot import Bot
@@ -95,7 +96,9 @@ class StartupSyncer(commands.Cog):
users_updated = 0
guild_member_ids = {str(member.id) for member in guild.members}
async with async_session() as sess:
- res = await sess.execute(select(models.User).filter_by(in_guild=True))
+
+ stmt = select(models.User).filter_by(in_guild=True).options(load_only(models.User.id))
+ res = await sess.execute(stmt)
in_guild_users = res.scalars()
for user in in_guild_users:
if user.id not in guild_member_ids: