允许的内存大小为 536870912 字节耗尽(尝试分配 330698896 字节)
Allowed memory size of 536870912 bytes exhausted (tried to allocate 330698896 bytes)
我正在尝试更改 php.ini 中的 memory_limit,php.ini 使用新的内存大小可以很好地保存,但我一直遇到相同的内存大小问题?我正在使用 Laravel 5.5 和 Homestead。
如果有人能帮助我,我将不胜感激。谢谢!
这是我试图 运行 的代码(将数据从一个数据库导入到另一个数据库,其余表格都很好,除了一个)
$repair = DB::connection('db')->table('tablename')->get();
DB::beginTransaction();
foreach ($repair as $repairs) {
Model::create([
'column' => $repairs->column,
...so on
]);
};
DB::commit();
您正在将整个 table 加载到内存中。不要那样做。
使用块并将创建方法放在它自己的函数中。自己的功能的原因是它给 php space 开始内部清理使用的变量等...因为范围结束。
还要在事务结束时调用 gc_collect_cycles()
以强制清除未使用的变量。
这应该让你在 ram 的 acceptable 限制范围内。如果还是打中了,每次250或100试试
$query = DB::connection('db')->table('tablename')->orderBy('id','asc');
$query->chunk(500, function($results) {
DB::beginTransaction();
$repairMethod = function($repair) {
Model::create([
'column' => $repair->column,
...so on
]);
};
foreach ($results as $repair) {
$repairMethod($repair)
};
DB::commit();
gc_collect_cycles();
});
成功解决,代码如下:
$query = DB::connection('db')->table('tablename')->orderBy('id',
'asc');
$query->chunk(50, function ($ServiceOrders) {
DB::transaction(function() use ($ServiceOrders) {
foreach ($ServiceOrders as $repairs) {
Model::create([
'column' => $repairs->column,
...so on
]);
}
});
});
我正在尝试更改 php.ini 中的 memory_limit,php.ini 使用新的内存大小可以很好地保存,但我一直遇到相同的内存大小问题?我正在使用 Laravel 5.5 和 Homestead。
如果有人能帮助我,我将不胜感激。谢谢!
这是我试图 运行 的代码(将数据从一个数据库导入到另一个数据库,其余表格都很好,除了一个)
$repair = DB::connection('db')->table('tablename')->get();
DB::beginTransaction();
foreach ($repair as $repairs) {
Model::create([
'column' => $repairs->column,
...so on
]);
};
DB::commit();
您正在将整个 table 加载到内存中。不要那样做。
使用块并将创建方法放在它自己的函数中。自己的功能的原因是它给 php space 开始内部清理使用的变量等...因为范围结束。
还要在事务结束时调用 gc_collect_cycles()
以强制清除未使用的变量。
这应该让你在 ram 的 acceptable 限制范围内。如果还是打中了,每次250或100试试
$query = DB::connection('db')->table('tablename')->orderBy('id','asc');
$query->chunk(500, function($results) {
DB::beginTransaction();
$repairMethod = function($repair) {
Model::create([
'column' => $repair->column,
...so on
]);
};
foreach ($results as $repair) {
$repairMethod($repair)
};
DB::commit();
gc_collect_cycles();
});
成功解决,代码如下:
$query = DB::connection('db')->table('tablename')->orderBy('id',
'asc');
$query->chunk(50, function ($ServiceOrders) {
DB::transaction(function() use ($ServiceOrders) {
foreach ($ServiceOrders as $repairs) {
Model::create([
'column' => $repairs->column,
...so on
]);
}
});
});