mysql_use_result与mysql_store_result服务器端内存使用情况的测试结果
10000000数万,每行100Byte左右,InnoDB引擎
Linux服务器内存1G
在测试这两个程序时,没有其它的程序执行 mysql_use_result: 在执行到mysql_use_result时,服务端内存使用情况没有什么变化,
待继续往下执行到mysql_fetch_row时,服务器端的内存使用急剧上升,
剩余物理内存只有几K或几十K,查看Linux缓存有900M左右,待程序正常结束退出后,
缓存没有释放,仍只剩下几十K物理内存
mysql_store_result: 在执行到mysql_use_store时,服务器端的内存使用没有变化
说明store是不占用服务端内存的
但是客户端的内存是急剧上升的,待执行完mysql_free_result后客户端内存被释放 使用mysql_use_result占用服务器端内存,和查询高速缓存应该是没有关系的,
因为我加上SQL_NO_CACHE的结果是一样的
为何mysql_use_result是在mysql_fetch_row时才开始占用内存呢?
10000000数万,每行100Byte左右,InnoDB引擎
Linux服务器内存1G
在测试这两个程序时,没有其它的程序执行 mysql_use_result: 在执行到mysql_use_result时,服务端内存使用情况没有什么变化,
待继续往下执行到mysql_fetch_row时,服务器端的内存使用急剧上升,
剩余物理内存只有几K或几十K,查看Linux缓存有900M左右,待程序正常结束退出后,
缓存没有释放,仍只剩下几十K物理内存
mysql_store_result: 在执行到mysql_use_store时,服务器端的内存使用没有变化
说明store是不占用服务端内存的
但是客户端的内存是急剧上升的,待执行完mysql_free_result后客户端内存被释放 使用mysql_use_result占用服务器端内存,和查询高速缓存应该是没有关系的,
因为我加上SQL_NO_CACHE的结果是一样的
为何mysql_use_result是在mysql_fetch_row时才开始占用内存呢?
等到它调用fetch的时候,server端才一次性的取所有的数据,所以内存暴涨。
mysql_store_result,确实是把数据全都存到客户端。这也是个结论性的东西。当查询记录特别多的情况下,往往使用mysql_store_result。这些也是mysql不太好的方面。