вызываю одну и ту же функцию
Yii::$app->db->createCommand("SELECT * FROM get_data($id)")->queryScalar();
Почему память всё больше и больше скушивается? Ведь никакие значения не используются и вообще, каждую итерацию разве не должно значение где-нибудь удаляться и скушиваться сборщиком мусора?
Если замерить, то например при 0 итерациях разница между memory_get_usage - 0, если 20 тысяч итеарций - 128 мегабайт, если больше итераций - ещё больше.
Как сделать так, чтобы можно было бесконечно (УСЛОВНО) крутить цикл с обращением к БД без разбухания памяти для php скрипта?
а не проще базу попросить почитать и сгруппировать по id?
Можно оптимизировать по быстрому $command = Yii::$app->db->createCommand("SELECT * FROM get_data(:id)")->bindParam(':id', $id); foreach ($ids as $id) { $command->queryScalar(); }
Не уверен...В целом, мне вообще все эти значения поотдельности надо в кэш сложить. Там вообще будет 9млн. записей и помимо текущей функции ещё две тяжёлые будут... Может быть да, в БД циклом бегать, сложить всё во временную таблицу и потом из неё всё сложить в кэш.
Да, думал об этом и ещё о кэшировании самого запроса, пока не пробовал
bindParam по рефералке принимает идентификатор, изменение значения автоматически отразится
Обсуждают сегодня