Heim > Fragen und Antworten > Hauptteil
Verwenden Sie das Phalcon-Framework, um die folgende Abfrage durchzuführen
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();
}
Das Ergebnis ist, dass der PHP-FPM-Prozess einen Fehler gemeldet hat:
27.06.2017 17:07:49 [Fehler] 60709#0: *1028 FastCGI gesendet in stderr: „PHP-Nachricht: Schwerwiegender PHP-Fehler: Zulässige Speichergröße von 536870912 Bytes erschöpft (versucht, 532692992 Bytes zuzuweisen) in /Benutzer.“ /tester/www/testserver/apps/backend/controllers/CarSeriesController.php in Zeile 27“ beim Lesen des Antwortheaders vom Upstream, Client: 127.0.0.1, Server: local.test.me, Anfrage: „GET /series HTTP/1.1 ", Upstream: "fastcgi://127.0.0.1:9000", Host: "admin.local.test.me"
Der Wert von „memory_limit“ in php.ini wurde von 128 MB auf 512 MB geändert, aber dieses Problem besteht weiterhin. Sind Sie schon einmal auf ähnliche Probleme gestoßen?
阿神2017-06-28 09:24:58
1、这个不是phalcon的问题 是php的问题
2、查询的数据太大了,把它全加载到内存里肯定会报这个
3、可以通过ini_set("memory_limit","-1");来解决,但是。。。。作为一个线上项目绝逼不建议这样做
4、一次性查出的数据量太大,你需要优化你的程序,而不是通过修改某些系统参数,
(1)你可以检查下你的代码,因为你是cs.*,b.* 你看下是不是所有的字段都是必要的,不必要的字段就不要查 出来,只取有用的字段.
(2)你的查询条件太少,如果本来就这样的话,那你可以通过分段去获取,你这样查,并且还是联表查,这么大的数据量,对于mysql都是负担,如果多个请求进来,分分钟挂了
(3)优化你的数据表结构