В настоящее время я пытаюсь перенести большой набор данных из базы данных IBM DB2.Я нашел быстрый способ выполнения запросов с использованием гема imb_db2 (версия 4.0.0).
Основная цель - создать скрипт, который работает параллельно и импортирует независимые данные.
Мой скрипт импорта работает нормально последовательно, но при попытке выполнить скрипт в нескольких фоновых процессах он завершается сбоем.
Я пробовал Sidekiq с несколькими процессами, каждый процесс со своей собственной очередью.
Например, я пробую следующий подход
DemoWorker.set(queue: :que_1).perform_async(1, 10)
Затем я делаю
DemoWorker.set(queue: :que_2).perform_async(11, 20)
Каждая очередь имеет свой независимый процесс Sidekiq с параллелизмом 1. Например,
bundle exec sidekiq -e development -C config/sidekiq.yml -q que_1
И я выполняю следующий код с запросом в качестве параметра
def get_by_sql(sql)
data = []
stmt = IBM_DB.exec(self.conn, sql.squish)
while row = IBM_DB.fetch_assoc(stmt)
data << row
end
data
end
И извремя от времени я получаю следующую ошибку сбоя.
[BUG] выделение объекта на этапе сборки мусора
Я понятия не имею, почему это не удается, вы могли бы посоветовать?Большое спасибо!
А вот отчет о сбое: https://ufile.io/fqmfh0y8
РЕДАКТИРОВАТЬ: отчет о сбое загружен в GIST: https://gist.github.com/RaresSalcudean/db8467bc4cd3ea2164bcaab5da86780e
Отчет о сбое 2: https://gist.github.com/RaresSalcudean/6f7bb7f74e34a537b687c776d806bf04