В документации нашёл параметр max_overflow, при моей ошибке его вроде рекомендуют поднять, но ещё пишут что используется только с QueuePool
Что за ошибка?
sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30.00
1. Сколько разрешенных коннектов настроено на сервере бд? 2. Что за приложение? Треды, процессы, асинкио? 3. Сколько экземпляров приложения запущено? 4. Какая планируется нагрузка?
1. Думаю 100, постгре, в конфигах ничего не менял 2. Асинк 3. 1 4. на ~5 рпс лёг, думаю пора планировать больше
Вопрос с тем, какой у меня пул отпал
Выглядит как будто ты просто не закрываешь соединения
Помимо 5 запросов, которые прилетели в течении 0.2 секунд, ещё есть фоновые таски. Как раз больше 5 по дефолту
В пределах 8. Это вроде и был редкий всплеск
И долгие они?
А в фоновых тамках как открываешь/закрываешь?
Так же, через контекстный менеджер
Да, видимо в этом проблема. В логах нет времени на отдельные запросы, есть только на обработку апдейта. Все апдейты отрабатывают в пределах 0.4 сек. Но нашёл по 80сек. Проблема может быть только в моих запросах? Или в настройках базы?
80 сек фоновая задача или хэндлер?
Хендлер. Несколько запросов select.all() по очереди
Что такое self.pool ?
Может у тебя просто больше 20 одновременных коннектов? Если нет, то косяк в коде
Проблема была в том, что слишком много одновременных конекшенов, это ясно. Но Их не должно было быть. Вот вроде самый сложный из запросов во вьюхе, которая отрабатывает 80 сек
Это как узнал что он самый сложный?)
Потому что в остальных только селекты по пк\фк
Кстати, а почему лимит оффсет не юзаешь? Есть гарантия что их всегда меньше чем 100, например?
Верно, именно меньше 100 на этот разпрос
80 сек это дико много, на Slot.box_id индекс есть?
Думал, на фк индексы сами ставятся. Но 80 сек в крайне редких случаях, обычно ~0.4 сек, и не уверен, что дело в самом запросе
Нет, на ФК индексы не ставятся, 0,4 тоже дико много
Рандомные 80 сек выглядит как какие-то блокировки, а не сам запрос
Обсуждают сегодня