php查询mysql大量数据造成内存不足的解决方法
来源:互联网 发布:小学生数学出题软件 编辑:程序博客网 时间:2024/05/16 10:44
本文实例分析了php查询mysql大量数据造成内存不足的解决方法。分享给大家供大家参考。具体分析如下:
一、问题
使用php查询mysql大数据量的时候,程序尚未执行完毕,跳出警告:
Fatal error: Allowed memory size of 100663296 bytes exhausted (tried to allocate 103 bytes)
错误提示:php所分配到的100M内存被占用完毕。
二、解决方法:
最简单的解决办法是:在执行文件的头部增加:
把内存增加到256M或者更多,可以增大php所使用的内存空间
但是下次若要读取更多的数据该怎么办呢,总不能一次次的增加,导致服务器的内存都被php吃光。
这里介绍一个函数:
使用memory_get_usage()方法获得php使用的内存量。发现随着读取数据条数的增加,php使用的内存在一步步增加。
难道php在查询mysql时的数据是存在内存中的?搜索了一下,发现果真大概就是这个意思。
mysql的C API函数有mysql_use_result()和mysql_store_result()
mysql_store_result()会把结果集从mysqlServer读到客户端,而 mysql_use_result()只是读取了结果集的元信息
1、php的mysql_query调用的是mysql_store_result(),自动获取并缓存结果集
2、而php的另一个函数mysql_unbuffered_query()则是调用的 mysql_use_result(),一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个 SQL 语句都执行完毕。
所以我们在读取大量数据的时候,可以使用mysql_unbuffered_query()来替代mysql_query()。经测试,的确如此。而且相当给力,导完所有数据内存一直保持在1MB以内,没有增长过
mysql_unbuffered_query() 向 MySQL 发送一条 SQL 查询 query,但不像 mysql_query()那样自动获取并缓存结果集。一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个 SQL 语句都执行完毕。当使用多个数据库连接时,必须指定可选参数 link_identifier。
mysql_unbuffered_query()的好处是有代价的:在 mysql_unbuffered_query()返回的结果集之上不能使用 mysql_num_rows() 和 mysql_data_seek()。此外在向 MySQL 发送一条新的 SQL 查询之前,必须提取掉所有未缓存的 SQL 查询所产生的结果行。
所以一定要结合自己的业务需求适当的选取函数
- php查询mysql大量数据造成内存不足的解决方法
- php查询mysql大量数据占用大量内存导致内存不足
- PHP查询MySQL大量数据的内存
- PHP查询MySQL大量数据的内存
- PHP查询MySQL大量数据的内存
- PHP查询MySQL大量数据的内存占用分析
- PHP查询MySQL大量数据的内存占用分析
- PHP查询MySQL大量数据的内存占用分析
- PHP查询MySQL大量数据的内存占用分析
- PHP查询MySQL大量数据的内存占用分析 【转】
- MySQL查询大量数据的方法
- mysql查询大量数据,php内存占用溢出问题
- mysql查询大量数据,php内存占用溢…
- 【代码】PHP 分析查询MySQL大量数据的内存占用情况
- mysql大量数据操作 内存不足 等等问题汇总
- jdbc查询大量数据内存溢出的解决方法
- php 表单提交大量数据发生丢失的解决方法
- 如何解决PHP查询大量数据内存耗尽的问题
- 度量系列(2)——怎么度量才恰当?
- matlab初试
- 基于Cookie的原理,实现单点登陆
- ZYNQ-7000开发中断:私有定时器中断
- 在学习泛型时遇到的困惑经常与func<T,U>混淆
- php查询mysql大量数据造成内存不足的解决方法
- 完美破解myeclipse2016 stable 1.0 的方法
- 用python拍饼图
- Java 8系列之Stream的基本语法详解
- python装饰器--原来如此简单
- 备忘录模式
- 2.10所记
- WEBLOGIC 11G密码忘记,重新初始化密码方法
- Android给ListView添加一个入场动画