如果我在 100 次批量插入中插入百万行,那么每次迭代memory_usage变大,然后会发生 php 内存错误。它与Yii插入命令连接,因为如果我评论插入操作memory_usage是稳定的。
for ($i = 0; $i < $iterations; $i ++) {
...
Yii::$app->db->createCommand()
->batchInsert(static::tableName(), $columns, $rows)
->execute();
echo memory_get_usage();
}
我尝试禁用调试模式,但没有帮助。
我认为问题出在 Yii2 的记录器中。只是尝试使用这样的东西:
common/components/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;
毕竟,您将收到类似的东西:
控制台''控制器''临时控制器.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();
...
}
}
希望对您有所帮助。但实际上这不是最好的解决方案。只是一个黑客..