PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Kích thước bộ nhớ được phép 8589934592 byte đã cạn kiệt

Allowed memory size of 8589934592 bytes exhausted

Loại lỗi này gây ra bởi một lượng lớn dữ liệu trong bộ nhớ, vì vậy cách khắc phục nó là viết một tập lệnh bộ nhớ ít nặng hơn. Bằng cách thay đổi memory_limit chúng tôi chỉ nhận được một bản sửa lỗi tạm thời vì khi dữ liệu của chúng tôi phát triển, nó sẽ quay trở lại.

    $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

Như tôi đã nói, Elloquent kém hiệu quả khi thực hiện loại tác vụ này, vì vậy hãy tìm nạp các hàng cơ sở dữ liệu như mysqli đã từng làm, từng hàng một:

  $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();

  }

Hãy thử điều này trong lịch trình của bạn và cho tôi biết nếu hiệu quả!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pgDash Diagnostics Alternatives - PostgreSQL Query Management with ClusterControl

  2. Cách thiết lập cơ sở dữ liệu PostgreSQL trong Django

  3. Tham gia bên trong &tham gia bên ngoài; thứ tự của các bảng trong từ có quan trọng không?

  4. Có gì mới trong PgBouncer 1.6

  5. Tại sao PostgreSQL thực hiện quét tuần tự trên cột được lập chỉ mục?