@Tayrus0

Почему время ответа запросов увеличивается под нагрузкой?

Для подключения к базе данных я использую python библиотеку asyncpg, настройки все оптимизировал, на всех таблицах индексы созданы, сервер 128гб оперативной 128 ядер, 1 NVME диск, ubuntu, есть проблема, когда пользователей мало все запросы выполняются в среднем за 60ms, но когда пользователей становится больше, даже самые простые запросы выполняются за 300ms+, почему так? Можно ли как то это исправить ?

Настройка asyncpg :
async def create(self):
        pool = await asyncpg.create_pool(
            user=config.PGUSER,
            password=config.PGPASSWORD,
            host=config.ip,
            port=5432,
            database=config.DATABASE,
            max_size=300,
            max_inactive_connection_lifetime=60.0,
            min_size=20,
            max_queries=100000,
            statement_cache_size=16000,#9000
            max_cached_statement_lifetime=300,
            max_cacheable_statement_size=0,
            command_timeout=120.0
        )
        self.pool = pool


Конфиг PostgreSQL:

https://pastebin.com/PtQTN6Ex

61e5475855b16080040488.png

Еще иногда падают такие ошибки:
asyncpg.exceptions.DeadlockDetectedError: deadlock detected
DETAIL:  Process 2220108 waits for ShareLock on transaction 14040699; blocked by process 2220462.
Process 2220462 waits for ShareLock on transaction 14040460; blocked by process 2220456.
Process 2220456 waits for ExclusiveLock on tuple (12,51) of relation 16565 of database 16385; blocked by process 2220108.
HINT:  See server log for query details.
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg
Любые ответы на любые вопросы
Судя по всему, беда не в сервере, а в интересной (на самом деле, криво реализованной) бизнес-логике, которая творит дедлоки
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы