@UsmanovTim

Почему медленно работает execute при обращении через SQLAlchemy?

Добрый день! Есть проект, написанный на 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

Может кто встречался с таким? И как вы это победили? Заранее благодарен!
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы