recherche

Maison  >  Questions et réponses  >  le corps du texte

php - problème d'épuisement de la mémoire des requêtes phalcon

Utilisez le framework phalcon pour effectuer la requête suivante

public function getCarSeriesList($brandId, $start = 0, $count = 1000){

    $phql = "SELECT cs.*, b.* FROM Test\Common\Models\Entities\CarSeries cs LEFT JOIN Test\Common\Models\Entities\CarBrands b ON cs.brandId = b.id ";
    $condition = array();
    if(!empty($brandId)){

        $phql .= " WHERE cs.brandId = ?0 ";
        $condition[0] = $brandId;
    }
    $phql .= " ORDER BY cs.name_en ASC ";
    if(!empty($count)){

        $phql .= " LIMIT ?1, ?2";
        $condition[1] = $start;
        $condition[2] = $count;
    }

    $result = $this->modelsManager->executeQuery($phql, $condition);

    return $result->toArray();
}

Le résultat est que le processus php-fpm a signalé une erreur :

27/06/2017 17:07:49 [erreur] 60709#0 : *1028 FastCGI envoyé dans stderr : "Message PHP : erreur fatale PHP : taille de mémoire autorisée de 536870912 octets épuisée (tentative d'allouer 532692992 octets) dans /Users /tester/www/testserver/apps/backend/controllers/CarSeriesController.php en ligne 27" lors de la lecture de l'en-tête de réponse depuis l'amont, client : 127.0.0.1, serveur : local.test.me, requête : "GET /series HTTP/1.1 ", en amont : "fastcgi://127.0.0.1:9000", hôte : "admin.local.test.me"

La valeur de memory_limit dans php.ini a été modifiée de 128 Mo à 512 Mo, mais ce problème existe toujours. Avez-vous déjà rencontré des problèmes similaires ?

ringa_leeringa_lee2727 Il y a quelques jours814

répondre à tous(1)je répondrai

  • 阿神

    阿神2017-06-28 09:24:58

    1. Ce n'est pas un problème avec phalcon mais avec PHP. 2. Les données interrogées sont trop volumineuses. Tout charger dans la mémoire provoquera certainement cette erreur. 3. Vous pouvez passer ini_set("memory_limit", "-1". ); à résoudre cependant. . . . En tant que projet en ligne, cela n'est absolument pas recommandé. 4. La quantité de données détectées en une seule fois est trop importante. Vous devez optimiser votre programme au lieu de modifier certains paramètres du système.

    (1)你可以检查下你的代码,因为你是cs.*,b.* 你看下是不是所有的字段都是必要的,不必要的字段就不要查    出来,只取有用的字段.
    (2)你的查询条件太少,如果本来就这样的话,那你可以通过分段去获取,你这样查,并且还是联表查,这么大的数据量,对于mysql都是负担,如果多个请求进来,分分钟挂了
    (3)优化你的数据表结构

    répondre
    0
  • Annulerrépondre