csm232s
csm232s

Reputation: 1660

Laravel DB Insert Error: Allowed Memory Size Exhausted

I'm running into an issue when trying to insert ~20K records into my DB. I notice that even though I'm echoing inside my foreach loop, I'm not getting anything outputted in the command line. Instead, I get an error after inserting ~9440 records relating to...

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 91 bytes) in /Users/me/Sites/Laravel/database/connection.php on line 293

Here is my code (tried using both Eloquent and Fluent):

<?php

class Process_Controller extends Base_Controller
{
    public function action_migrate()
    {
        $properties = DB::table('raw_properties')->get('id');
        $total = count($properties);

        foreach ($properties as $x => $p) {
            $r = RawProperty::find($p->id);
            $count = $x + 1;

            $prop_details = array(
                'column' => $r->field,
                // Total of 21 fields
            );

            DB::table('properties')->insert($prop_details);

            echo "Created #$count of $total\n";
        }
    }
}

Upvotes: 7

Views: 15655

Answers (3)

Richard Dev
Richard Dev

Reputation: 1170

I did the DB::disableQueryLog() and continued to get the error. I ended up Pausing Telescope from recording the queries. You can do this from the telescope web interface > queries > Click the Pause Icon.

Upvotes: 0

Erik
Erik

Reputation: 20722

The accepted answer is fixing the symptom rather then the problem. The problem is the Laravel query log (in memory) is eating all your RAM when you execute such a large # of queries. See the answer here: https://stackoverflow.com/a/18776710/221745

Or, in brief, turn off query logging via:

DB::disableQueryLog()

Before executing 20k queries

Upvotes: 34

Rubin Porwal
Rubin Porwal

Reputation: 3845

This error depicts that your PHP script has exhausted memory limit due to insufficient memory allocated for script.

You need to increase memory_limit using the ini_set function e.g ini_set('memory_limit','128M');

Upvotes: 0

Related Questions