如果我在100个批量插入中插入百万行,而不是每次迭代memory_usage变大,那么就会发生php内存错误。它与Yii insert命令连接,因为如果我注释插入操作memory_usage是稳定的。
for ($i = 0; $i < $iterations; $i ++) {
...
Yii::$app->db->createCommand()
->batchInsert(static::tableName(), $columns, $rows)
->execute();
echo memory_get_usage();
}
我尝试过禁用调试模式但没有帮助。
答案 0 :(得分:2)
我认为问题出现在Yii2的记录器中。试着用这样的东西:
公共/组件/ EmptyLogger.php:
<?php
namespace common\components;
use yii\log\Logger;
class EmptyLogger extends Logger
{
public function log($message, $level, $category = 'application')
{
return false;
}
}
然后在您的控制器操作中包含开头的下一个代码:
Yii::setLogger(new EmptyLogger());
当然也将它添加到您的用途中:
use common\components\EmptyLogger;
毕竟你会得到类似的东西:
控制台\控制器\ TempController.php:
<?php
namespace console\controllers;
use common\components\EmptyLogger;
use Yii;
use yii\console\Controller;
class TempController extends Controller
{
public function actionIndex()
{
Yii::setLogger(new EmptyLogger());
...
Yii::$app->db->createCommand()
->batchInsert(static::tableName(), $columns, $rows)
->execute();
...
}
}
希望它有所帮助。但实际上它并不是最好的解决方案。只是一个黑客..