@WishesFire

Python SqlAlchemy Async (2013, 'Lost connection to MySQL server during query'). В чем может быть проблема?

У меня есть такой класс:

class DBAlchemy_async(DB_Base, metaclass=Singleton):

    def init(self, logger: 'BaseLogger', connection_string: str):
        self.logger = logger
        self.engine_dashboard = create_async_engine(f'{connection_string}/dashboard')

        self.session = sessionmaker(class_=AsyncSession)
        self.session.configure(bind=self.engine_dashboard)
        # self.session.configure(binds={Base_dashboard:self.engine_dashboard, Base_dashboard_dex:self.engine_dashboard_dex, Base_stats:self.engine_stats, Base_ops:self.engine_ops})

    @asynccontextmanager
    async def _async_session_scope(self, table_name: str, operation: str):
        async with self.session(expire_on_commit=False) as session:
            try:
                t = time.time()
                yield session
                await session.commit()
            except Exception:
                await session.rollback()
                raise
            finally:
                await session.close()
                self.logger.log({'text': operation, 'time': time.time()-t, 'object': table_name})

    async def get(self, table: 'Model', *keys: BinaryExpression) -> Optional['Model']:
        async with self._async_session_scope(table.tablename, 'async_get') as session:
            query = select(table).where(*keys)
            result = await session.execute(query)
            return result.scalar()

Иногда, не постоянно, я вижу что возникает ошибка

raise OperationalError(CR.CR_SERVER_LOST, msg) from e
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, 'Lost connection to MySQL server during query').

Возникает при асинхронной работе с базой, при синхронной все окей, не понимаю почему такое происходит. Такое впечатление, что база стоит в простое, потом приходит запрос, возникает ошибка эта, а последующие все запросы отрабатывают хорошо к базе с использованнием метода get этого.
Коннекты максимальное количество 2000, используется в среднем 170. Возможно нужно настроить параметры pool_size и max_overflow в SQLAlchemy, потому что они используют возможно дефолтно 200 коннектов как для mysql?
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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