Bug #71468 [Nab]: increased memory usage with mysqli in php 7

From: Date: Mon, 22 Feb 2016 16:18:42 +0000
Subject: Bug #71468 [Nab]: increased memory usage with mysqli in php 7
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-199395@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=71468&edit=1 ID: 71468 User updated by: ryan dot brothers at gmail dot com Reported by: ryan dot brothers at gmail dot com Summary: increased memory usage with mysqli in php 7 Status: Not a bug Type: Bug Package: MySQLi related Operating System: Linux PHP Version: 7.0.2 Block user comment: N Private report: N New Comment: Thanks for the feedback. I understand the changes, but my scripts in PHP 7 are hitting the memory limit when they didn't in PHP 5.6, yet one of the advantages of PHP 7 is reduced memory usage. Is there someone more familiar with the change in mysqlnd that can look into it further to determine if PHP 7 will use more memory than PHP 5.6 and not less? Previous Comments: ------------------------------------------------------------------------ [2016-02-22 15:59:49] nikic@php.net Which isn't to say that there is nothing wrong with how mysqlnd manages memory. I'm not familiar with mysqlnd, but the way this works does look distinctly weird. Apart from wasting memory by being unnecessarily generic (having free_chunk and resize_chunk with always the same values, for every single chunk) it's very odd to see the chunks being allocated at all -- what's the point of using an arena allocator if you still use a full blown memory manager for the metadata? ------------------------------------------------------------------------ [2016-02-22 15:38:16] nikic@php.net store_result uses mysqlnd mempool chunks. In PHP 5.6 those used the system allocator (http://lxr.php.net/xref/PHP_5_6/ext/mysqlnd/mysqlnd_block_alloc.c#120). In PHP 7.0 they use the Zend MM (http://lxr.php.net/xref/PHP_MASTER/ext/mysqlnd/mysqlnd_block_alloc.c#119). So the memory usage didn't actually change (or rather, it did change, but not in a bad way), it simply wasn't reported previously by memory_get_usage(). ------------------------------------------------------------------------ [2016-02-22 14:36:08] ryan dot brothers at gmail dot com Yes, I am using mysqlnd. I confirmed I'm seeing the memory usage increase comparing the latest PHP 5.6.18 and PHP 7.0.3 using the reproduce script above. 5.6.18: mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $ 7.0.3: mysqlnd 5.0.12-dev - 20150407 - $Id: f59eb767fe17a6679589b5c076d9fa88d3d4eac0 $ ------------------------------------------------------------------------ [2016-02-22 08:35:01] rendername at gmail dot com Of course, we use only mysqlnd: PHP 7 phpinfo() Client API library version mysqlnd 5.0.12-dev - 20150407 - $Id: f59eb767fe17a6679589b5c076d9fa88d3d4eac0 $ php7.0 -m|grep mysql mysqli mysqlnd pdo_mysql PHP 5 phpinfo() Client API version mysqlnd 5.0.11-dev - 20120503 - $Id: 3c688b6bbc30d36af3ac34fdd4b7b5b787fe5555 $ php5 -m|grep mysql mysql mysqli mysqlnd pdo_mysql New Example: (mysql table pays with 650k rows, getting ID numbers) ... echo round(memory_get_usage()/1024/1024)."m<br>"; $res=mysqli_query($db,"select id from pays"); echo round(memory_get_usage()/1024/1024)."m<br>"; die(); Output PHP7: 1m 52m Output PHP5: 1m 11m PHP7 need 5 times more memory for each Mysql Query We have debian 8 64 bit + Dotdeb packets with PHP7 ------------------------------------------------------------------------ [2016-02-22 05:43:48] rasmus@php.net Are you sure that your mysqli was compiled against mysqlnd in both PHP 5 and PHP 7? On your phpinfo() page, in the mysqli section, what does it say for "Client API library version" in both PHP 5 and 7? The reason being, if PHP 5 was compiled against libmysqlclient then since libmysqlclient does not use the PHP memory allocator none of the memory allocated by that library is reported by memory_get_usage(). That doesn't mean it wasn't allocated, of course. ------------------------------------------------------------------------ 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=71468 -- Edit this bug report at https://bugs.php.net/bug.php?id=71468&edit=1

« previous php.bugs (#199395) next »