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