Частые исключения "закончилась общая память

Я поддерживаю приложение Django, которое обрабатывает данные в БД Postgres.

Я часто получаю

ERROR:  out of shared memory
HINT:  You might need to increase max_locks_per_transaction.

сообщения время от времени ... особенно когда я пытаюсь запустить некоторые специальные задания.

Вот как в основном выглядит моя функция (оформленная как задача Celery):

@app.task()
def myfunc(params):
    LOGGER.info("Starting func.")

    col1, col2, col3 = transformer(params)

    count_new_records = 0
    with transaction.atomic():
        for item in my_iterable:
            template_obj, created = MyTable.objects.get_or_create(
                col1=col1,
                defaults={
                    'col2': col2,
                    'col3': col3
                }
            )
            if not created:
                template_obj.col3 = template_obj.col3 + col3
                template_obj.save()
            else:
                count_new_records += 1
    
    LOGGER.info(str(count_new_records) + " new records created.")
    LOGGER.info("Ending func.")

Есть ли проблема в моем коде, которая вызывает ошибки? Может быть, блокировки не освобождаются правильно? Если да, то как я могу решить эту проблему и избежать необходимости увеличивать max_locks_per_transaction каждый раз?

Вернуться на верх