Использую setInterval, внутри которого происходит выборка из sqlite и запись в mysql. т.е. копирование из базы в базу. Через 20 мин сервер прерывается, уведомляя heap out of memory. Как этого избежать?
DTX, Происходит запрос mysql, max значения id, после этого происходит перебор всех строк и поиск существует ли поле с id из sqlite большее чем в mysql, если да, то добавляет новую запись в mysql.
Никита Полевой, я вот разобрался вчера в чем ошибка, таковой то ее не было. set interval создавал запросы в бд гораздо быстрее чем отрабатывались эти запросы, таким образом память процесса nodejs доходила до 1,5 gb и рушилось. А бывало что одинаковые insert'ы успевали уйти и пытались вставить одну строку несколько раз в таблицу с уникальны полем и вылетала ошибка.
Никита Полевой, да, это странно, потому как я делал вставку insert в цикле, по одной строке. После сделал вставку одним большим запросом, и время вставки таблицы уменьшилось с 8 мин до 2 сек.
jtag_, конечно, на выполнение запроса существуют некоторые накладные расходы, один запрос лучше чем много. Я просто в код не смотрел, упустил этот момент.
jtag_, у меня не хватит опыта, чтобы ответить вам определенно; думаю что любой одиночный запрос оборачивается в транзакцию, но подозреваю что это зависит от движка. Об этом можно почитать в документации к используемому движку или на SO например, 1, 2, 3.