PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Ukuran memori yang diizinkan 8589934592 byte habis

Allowed memory size of 8589934592 bytes exhausted

Error semacam ini disebabkan oleh banyaknya data di memori, sehingga cara memperbaikinya adalah dengan menulis skrip memori yang lebih ringan. Dengan mengubah memory_limit kami hanya mendapatkan perbaikan sementara karena ketika data kami tumbuh, data itu kembali.

    $campaigns = Campaign::all(); //at this point you are pulling the whole Campaigns table to memory.. and you pull some extra rows after that increasing even more the memory use

Seperti yang saya katakan, Elloquent kurang efisien dalam melakukan tugas semacam ini, jadi mari kita ambil baris database seperti yang biasa dilakukan mysqli, satu per satu:

  $db = DB::connection()->getPdo(); //get a database connection instance

  $main_query_sql = "SELECT * FROM Campaigns"; //write our query 
  $main_query = $db->prepare($main_query_sql); //prepare it to get executed
  $main_query->execute(); //execute our query


  $visits_denied_sql = "SELECT COUNT(*) as total FROM VISITS WHERE DENIED = 1 AND CAMPAIGN_ID ="; //let's prepare our aggregate queries

  $visits_allowed_sql = "SELECT COUNT(*) as total FROM VISITS WHERE DENIED = 0 AND CAMPAIGN_ID ="; //I just assumed them so change it as you need

  $visits_denied = null;
  $visits_allowed = null;

  while($campaign = $main_query->fetch()){ //fetch our rows one by one
      //now we are getting an associative array from the db instead of a model so we cannot use it as a Laravel Model (we can't use ->save() method or eager loading)
      $visits_denied = $db->prepare($visits_denied_sql.$campaign['id']);
      $visits_denied = $visits_denied->execute();
      $denied_visits = $visits_denied->fetch();

      $visits_allowed= $db->prepare($visits_allowed_sql.$campaign['id']);
      $visits_allowed= $visits_allowed->execute();
      $allowed_visits = $visits_allowed->fetch();

      $campaign['denied_visits'] = $denied_visits['total'];
      $campaign['allowed_visits'] = $allowed_visits['total'] ;

      //edit with the correct update sentence:
      $insert_query_sql = "UPDATE CAMPAIGNS SET allowed_visits = :visits_allowed, denied_visits = :visits_denied WHERE id = :id";
        $insert_query = $db->prepare($insert_query_sql);
        $insert_query->bindParam(':visits_allowed', $campaign['allowed_visits']);
        $insert_query->bindParam(':visits_denied', $campaign['denied_visits']);
        $insert_query->bindParam(':id', $campaign['id']);
        $insert_query->execute();

  }

Coba ini di dalam jadwal Anda dan beri tahu saya jika berhasil!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pasangan nilai kunci di PostgreSQL

  2. Batasan pemeriksaan PostgreSQL untuk kondisi kunci asing

  3. Fungsi Matematika PostgreSQL

  4. Resolusi milidetik dari DateTime di Ruby

  5. Perbaiki “ERROR:  setiap kueri KECUALI harus memiliki jumlah kolom yang sama” di PostgreSQL