Частые исключения "закончилась общая память
Я поддерживаю приложение 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
каждый раз?