Почему while ($row = $db_data->fetch_assoc()) сжирает память с большими таблицами?
Буферизированные и небуферизированные запросы
Помогло:

$db = new mysqli(null, 'root', '', 'db_name');
$db->real_query("SELECT * FROM table_name");
$db_data = $db->use_result();
while ($row = $db_data->fetch_assoc()) {}

Но, нельзя с того-же подключения к бд выполнять другие запросы внутри цикла. У меня в коде был INSERT в другую таблицу. С ним не работало