Doc #61060 [Com]: MySQL memory leak

From: Date: Fri, 07 Dec 2012 10:01:54 +0000
Subject: Doc #61060 [Com]: MySQL memory leak
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-9273@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=61060&edit=1 ID: 61060 Comment by: keith at sauvant dot de Reported by: trusty_jim at hotmail dot com Summary: MySQL memory leak Status: Closed Type: Documentation Problem Package: MySQL related Operating System: Windows Vista PHP Version: 5.3.10 Assigned To: philip Block user comment: N Private report: N New Comment: One additional question/comment (regarding PHP on Windows in this case): When the effect described above eats to much memory the PHP process crashes. But: You will not find anything about that in the PHP error log nor in the Windows event log or anywhere else. Configuration issue? Bug? Desired behaviour? Best regards Keith Previous Comments: ------------------------------------------------------------------------ [2012-06-01 06:48:35] philip@php.net This is now documented, thank you for the report. ------------------------------------------------------------------------ [2012-04-18 21:19:49] philip@php.net Automatic comment from SVN on behalf of philip Revision: http://svn.php.net/viewvc/?view=revision&revision=325320 Log: Added concepts section for MySQL docs. And added basic info about buffered vs unbuffered. Incomplete but should be helpful for discussion and/or lure others into adding content. :) That part deals with PHP Bug #61060 ------------------------------------------------------------------------ [2012-04-18 21:03:06] philip@php.net Automatic comment from SVN on behalf of philip Revision: http://svn.php.net/viewvc/?view=revision&revision=325318 Log: Partially document PHP bug #61060, with more to come. Help clarify memory memory reporting with mysqlnd vs libmysql ------------------------------------------------------------------------ [2012-04-18 20:56:23] philip@php.net Marking as a doc bug, as suggested by Rasmus. Assigning to self. ------------------------------------------------------------------------ [2012-04-11 14:35:21] rasmus@php.net This will depend on your mysql client library, and it isn't actually a memory leak. Running your script on my Ubuntu box gives me: Start Memory : 227784 228240 228240 228240 228240 228240 228240 228240 228240 228240 228240 End Memory : 228120 On both PHP 5.3.11 and PHP 5.4.1 using the old outdated mysql extension built against libmysqlclient-dev-5.1.61-0ubuntu0.11.10.1 Now, if however you are using the mysqlnd library, keep in mind that this library uses PHP native memory management system, so anything allocated by the library shows up in memory_get_usage(). So, using mysqli linked against mysqlnd I get: Start Memory : 235440 9969808 9970720 9971632 9972544 9973456 9974368 9975280 9976192 9977104 9978016 End Memory : 295280 But this makes perfect sense. Each time you fetch a row from the MySQL server the client library needs to allocate memory to store that row. This happens in the non-mysqlnd case as well, but it uses a straight system malloc() call so the memory doesn't show up when you call memory_get_usage(). It is still eating memory, and it isn't actually a leak, that's how the library works. You get your memory back when you free the result. Now, what this bug report is really asking is how do we tell the client library not to buffer rows as we read them from the server. That's what unbuffered queries are all about. In mysqli this see the use_result() method. For the old deprecated mysql extension, see the mysql_unbuffered_query() function. So, this is not actually a bug. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=61060 -- Edit this bug report at https://bugs.php.net/bug.php?id=61060&edit=1

« previous php.doc.bugs (#9273) next »