Добрый день! Есть проект, написанный на fastapi+sqlalchemy. При запросе данных у БД среднее время выполнения 35-60ms. При профайлинге нашел, что просадки начинаются с data_received в asyncpg.
41/25 0.000 0.000 0.051 0.002 /usr/local/lib/python3.11/asyncio/base_events.py:1845(_run_once)
58/35 0.000 0.000 0.047 0.001 /usr/local/lib/python3.11/asyncio/events.py:78(_run)
58/35 0.000 0.000 0.047 0.001 {method 'run' of '_contextvars.Context' objects}
15 0.000 0.000 0.046 0.003 /usr/local/lib/python3.11/asyncio/selector_events.py:951(_read_ready)
15 0.000 0.000 0.046 0.003 /usr/local/lib/python3.11/asyncio/selector_events.py:991(_read_ready__data_received)
13 0.016 0.001 0.046 0.004 {method 'data_received' of 'asyncpg.protocol.protocol.BaseProtocol' objects}
4100 0.002 0.000 0.015 0.000 /usr/local/lib/python3.11/hmac.py:167(new)
8196 0.004 0.000 0.015 0.000 /usr/local/lib/python3.11/hmac.py:151(digest)
4100 0.004 0.000 0.013 0.000 /usr/local/lib/python3.11/hmac.py:38(__init__)
8196 0.009 0.000 0.009 0.000 {method 'digest' of '_hashlib.HMAC' objects}
4100 0.003 0.000 0.008 0.000 /usr/local/lib/python3.11/hmac.py:66(_init_hmac)
42 0.000 0.000 0.006 0.000 /usr/local/lib/python3.11/selectors.py:451(select)
Сам запрос
# Код вынесен отдельно и запускается 1 раз
async_session = async_sessionmaker(engine, expire_on_commit=False)
query_select = select(DeviceModel).order_by(DeviceModel.id)
#Код запускается во view
async with async_session() as session:
result = await session.execute(query_select)
for scalar in result.fetchall():
answer.append(scalar[0])
await session.commit()
await engine.dispose()
Python==3.11
psyconpg-binary==2.9.7
asyncpg==0.28.0
SQLAlchemy==2.0.25
Может кто встречался с таким? И как вы это победили? Заранее благодарен!