Yii2 batchInsert占用所有服务器内存

时间:2014-12-11 10:46:34

标签: php memory-management yii2

如果我在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();
}

我尝试过禁用调试模式但没有帮助。

1 个答案:

答案 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();
        ...

    }
}

希望它有所帮助。但实际上它并不是最好的解决方案。只是一个黑客..