【发布时间】:2014-11-12 09:53:43
【问题描述】:
当我在生产环境中运行我的数据库种子脚本时发生内存耗尽。
下面是我的种子脚本。
class MembershipTableSeeder extends Seeder
{
public function run()
{
DB::table('members')->delete();
foreach (range(1, 99) as $days){
Members::create(array('membership_code' => 'test'.$days));
}
DB::unprepared(file_get_contents(app_path()."/database/seeds/members.sql"));
}
}
所以我所做的是在我的种子脚本上添加一个无限制。
ini_set('memory_limit', '-1');
现在的问题是,当我运行脚本时,它会将 SQL 脚本的内容(非常非常大)记录到终端中。
有没有一种在我的数据库种子中运行 SQL 转储且不会消耗太多内存的好方法?我现在做的是手动运行它:
mysql -uuser -p db < script.sql
【问题讨论】:
-
它包含多少行?
-
使用 mysql 二进制文件可能是最好的方法。另一种方法是解析并将您的 SQL 拆分为更小的语句并运行多个查询。
-
只有 16MB 的 sql 文件。
-
你在安全模式下运行php吗?
-
只是关于第一部分的建议:
Member::create在循环中 - 不要这样做,而是使用DB::table(..)->insert(..)并传递要插入的行数组。它会更快,内存消耗更少。
标签: sql laravel laravel-4 laravel-eloquent