gpt4 book ai didi

php - Yii2 batchInsert 吃掉所有服务器内存

转载 作者:可可西里 更新时间:2023-11-01 01:00:51 25 4
gpt4 key购买 nike

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

我试过禁用 Debug模式,但没有用。

最佳答案

我认为问题出在 Yii2 的记录器中。只需尝试使用类似的东西:

通用/组件/EmptyLogger.php:

<?php
namespace common\components;

use yii\log\Logger;

class EmptyLogger extends Logger
{
public function log($message, $level, $category = 'application')
{
return false;
}
}

然后在您的 Controller 的操作中,在开头包含下一个代码:

Yii::setLogger(new EmptyLogger());

当然也可以在你的uses中加入:

use common\components\EmptyLogger;

毕竟你会收到这样的东西:

控制台\ Controller \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();
...

}
}

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

关于php - Yii2 batchInsert 吃掉所有服务器内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27420959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com