Re: PHP memory usage - Mailing list pgsql-php

From Nick Barr
Subject Re: PHP memory usage
Date
Msg-id 40BBB6C3.8030507@chuckie.co.uk
Whole thread Raw
In response to PHP memory usage  ("A Palmblad" <adampalmblad@yahoo.ca>)
List pgsql-php
A Palmblad wrote:
> We've been running into some issues with PHP and Postgres, and memory usage.
> On a dual athlon 64, w/ 4 gigs of RAM, PHP 4.3.6, and Postgres 7.4.2 I've
> seen our server start to crawl after some queries returning very large
> result sets.  Although large result sets aren't exactly what we want to be
> dealing with, I really want to avoid a situation where a user could disrupt
> our server with certain options to some searches.
>
> I did a quick commandline test, and it looks like PHP starts to eat memory
> during its call to pg_query.  By eat memory, I mean use memory well in
> excess of php.ini's memory_limit of 8 megs.  (I stop it around 90% of
> available memory usage)  Is this acceptable behaviour, or should I report it
> to PHP as a bug?  If not, are my only solutions to wrap my selects in
> cursors and/or to use limit?
>
> -Adam Palmblad
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings
>
>
>
My guess is that PHP is pulling the entire record set into memory,
something which is not good as you can imagine. The only real solutions
to this are to reduce the size of the record set, or use cursors.

You could reduce the size of the record set by using paging, i.e. only
allowing the user to see say 20 records out of 5000. The way I have
implemented this in the past is to do a COUNT(*) on the entire record
set then use LIMIT 20 OFFSET 200. Alternatively you could use the cursor
to return the data you want to look at.

Hope that almost helps.


Nick


pgsql-php by date:

Previous
From: "A Palmblad"
Date:
Subject: PHP memory usage
Next
From: "Adam Palmblad"
Date:
Subject: PHP memory usage