Я использую Django 2.1 и python 3.6 У меня есть запрос, который содержит другие запросы и, кажется, занимает слишком много времени, чтобы оценить, когда есть много данных для обработки.По сути, он достигает тайм-аута пользователя БД (10 секунд), поэтому запрос не выполняется, и когда я пытаюсь выполнить его без тайм-аута, я получаю следующее сообщение об ошибке из БД (postgres) спустя почти минуту:
ERROR: canceling statement due to conflict with recovery
DETAIL: User query might have needed to see row versions that must be removed.
Мойвопрос - как я могу сделать запрос более эффективным?(все используемые поля индексируются в БД)
Это запрос:
migration_set__qs = Migration.objects.filter(
migration_id=migration_id,
migration_version=migration_version,
migration_data__generated_id__isnull=False
).values_list(
'object_id',
flat=True
)
containers__qs = Container.objects.all().exclude(
Q(id__in=migration_set__qs) | Q(created_at__gte=turned_on_date)
)
limited_containers = containers__qs[0:10]
num_containers_processed += limited_containers.count()
'count ()' запускает оценку запроса, и там он прерывается.