Миграция данных между разными сервисами это всегда сложный процесс. Мы разрабатываем и поддерживаем большое количество интеграций для Битрикс24 и часто сталкиваемся с подводными камнями и нештатными ситуациями, для которых приходится искать решение. Одна из самых распространенных проблем — очень медленный перенос данных или полное зависание импорта. Об одном из таких случаев мы сейчас и расскажем. Итак, клиент столкнулся с проблемой — миграция зависла на стадии импорта активити и за сутки успевала добавить в таблицу в лучшем случае 500 записей. Расширенное логирование что, что во всём виноват вот этот участок кода: $entity = Pipedrive\ActivitiesTable::getRow([
'filter' => [
'MEMBER_ID' => $this->memberId,
'PIPEDRIVE_ID' => $row['id'],
],
'select' => ['ID']
]); На его выполнение уходило чудовищное количество времени - около пяти минут. Уточнение параметров таблицы показало, что в ней отсутствует индексирование, и выборка полей по фильтру совершалась простым перебором всех записей