Я делаю переход от одной базы данных к другой, проект находится на laravel, поэтому я создаю команду laravel для этого. У меня есть одна таблица с около 700000 записей. Я создал функцию с LIMIT и транзакциями для оптимизации запроса, но все еще получаю ошибку памяти из PHP. Вот мой код:Ошибка ограничения памяти php laravel
ini_set('memory_limit', '750M'); // at beginning of file
$circuit_c = DB::connection('legacy')->select('SELECT COUNT(*) FROM tbl_info');
$count = (array) $circuit_c[0];
$counc = $count['COUNT(*)'];
$max = 1000;
$pages = ceil($counc/$max);
for ($i = 1; $i < ($pages + 1); $i++) {
$offset = (($i - 1) * $max);
$start = ($offset == 0 ? 0 : ($offset + 1));
$infos = DB::connection('legacy')->select('SELECT * from tbl_info LIMIT ' . $offset . ', ' . $max);
DB::connection('mysql')->transaction(function() use ($infos) {
foreach ($infos as $info) {
$validator = Validator::make($data = (array) $info, Info::$rules);
if ($validator->passes()) {
if ($info->record_type == 'C') {
$b_user_new = Info::create($data);
unset($b_user_new);
}
}
unset($info);
unset($validator);
}
});
unset($infos);
}
Ошибка заключается в следующем:
[email protected] /var/www/info $ php artisan migratedata
PHP Fatal error: Allowed memory size of 786432000 bytes exhausted (tried to allocate 32 bytes) in /var/www/info/vendor/laravel/framework/src/Illuminate/Database/Grammar.php on line 75
Ошибка шоу после импорта около 50000 записей.
Затем увеличьте [сколько памяти PHP разрешено использовать] (https://www.google.dk/search?q=php+increase + память) ... Если у вас закончилась нехватка памяти, вы просто закончили работу; купить больше памяти или найти более эффективный способ переноса данных. –
Мне нужен оптимизационный ответ, потому что я уже оптимизировал свои функции с использованием LIMIT и OFFSET, возможно, существует и другой эффективный способ. – Serghei
Можете ли вы попробовать сделать это в кусках 100 вместо 1000 за транзакцию? –