mysql查询大量数据,php内存占用溢出问题

如何解决php脚本运行占用内存过大无法释放或者内存不足的问题 然而,需要注意的是,优化内存使用是一个复杂的过程,需要根据具体情况进行调整和测试。建议在优化脚本之前进行详细的分析和性能测试,以确保采取的措施是有效的。避免不必要的数据复制:文章来源地址https://www.yii666.com/learning/php/281.html。但要谨慎使用,确保服务器有足够的可用内存,并避免设置过高的内存限制。如果必须使用递归,确保有合理的终止条件,避免无限递归。使用引用或原地修改数据,而不是创建新的变量或数据副本。使用适当的查询语句来减少数据的加载和处理。 阅读详情

     MySQL查询返回的结果太多(达10万条), 从而导致PHP内存不够用。 所以, 他问, 在执行下面的代码遍历返回的MySQL结果之前, 数据是否已经在内存中了? -

  while ($row = mysql_fetch_assoc($result)) {

  // …

  }

  当然, 这种问题有许多优化的方法。 不过, 就这个问题来讲, 我首先想到, MySQL是经典的C/S(Client/Server, 客户端/服务器)模型, 在遍历结果集之前, 底层的实现可能已经把所有的数据通过网络(假设使用TCP/IP)读到了Client的缓冲区, 也有另一种可能, 就是数据还在Server端的发送缓冲区里, 并没有传给Client.

  在查看PHP和MySQL的源码之前, 我注意到PHP手册里有两个功能相近的函数:

  mysql_query()

  mysql_unbuffered_query()

  两个函数的字面意思和说明证实了我的想法, 前一个函数执行时, 会把所有的结果集从Server端读到Client端的缓冲区中, 而后一个则没有, 这就是“unbuffered(未缓冲)”的意思。

  那就是说, 如果用mysql_unbuffered_query()执行了一条返回大量结果集的SQL语句, 在遍历结果之前, PHP的内存是没有被结果集占用的。 而用mysql_query()来执行同样的语句的话, 函数返回时, PHP的内存占用便会急剧增加, 立即耗光内存。

  如果阅读PHP的相关代码, 可以看到这两个函数的实现上的异同:

  /* {{{ proto resource mysql_query(string query [, int link_identifier])

  Sends an SQL query to MySQL */

  PHP_FUNCTION(mysql_query)

  {

  php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_STORE_RESULT);

  }

  /* }}} */

  /* {{{ proto resource mysql_unbuffered_query(string query [, int link_identifier])

  Sends an SQL query to MySQL, without fetching and buffering the result rows */

  PHP_FUNCTION(mysql_unbuffered_query)

  {

  php_mysql_do_query(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_USE_RESULT);

  }

  /* }}} */

  两个函数都调用了php_mysql_do_query(), 只差了第2个参数的不同, MYSQL_STORE_RESULT和MYSQL_USE_RESULT. 再看php_mysql_do_query()的实现:

  if(use_store == MYSQL_USE_RESULT) {

  mysql_result=mysql_use_result(&mysql->conn);

  } else {

  mysql_result=mysql_store_result(&mysql->conn);

  }

  mysql_use_result()和mysql_store_result()是MySQL的C API函数, 这两个C API函数的区别就是后者把结果集从MySQL Server端全部读取到了Client端, 前者只是读取了结果集的元信息。

  回到PHP, 使用mysql_unbuffered_query(), 可以避免内存的立即占用。 如果在遍历的过程不对结果进行“PHP缓存”(如放到某数组中), 则整个执行过程虽然操作了十万条或者百万条或者更多的数据, 但PHP占用的内存始终是非常小的。

php查询mysql大量数据造成内存不足的解决方法 本文实例分析了php查询mysql大量数据造成内存不足的解决方法。分享给大家供大家参考。具体分析如下: 一、问题 使用php查询mysql大数据量的时候,程序尚未执行完毕,跳出警告: Fatal error:  Allowed memory size of 100663296 bytes exhausted (tried to allocate 103 bytes) 错误提示:php所分配到的100M内存被占用完毕。 二、解决方法: 最简单的解决办法是:在执行文件的头部增加: ini_set('memory_limit','256M'); 把内存增加到256M或者更多,可以增大php所使 立即下载

相关推荐

【工具】GitHub学生认证+PyCharm配置Copilot全流程指南

本文提供了一份详细的GitHub学生认证及在PyCharm中配置Copilot的完整指南。通过完成A2F认证、准备有效材料并使用干净网络环境,学生可免费获取GitHub Copilot Pro订阅,极大提升编程学习与开发效率。

w7x8y9z的博客 1459

PHP优化及大数据查询

php优化 大数据

IT瑞先生 939

【GD32篇】驱动AD7616完成数据采集

GD32F10X驱动AD7616完成数据采集

we_long的博客 1万+

解决PHP因大量用户使用数据库造成数据库拥堵的几个方法

一.使用 PHP 直接在共享内存中存储数据集 <?php //数据库连接部分 include("connection.php"); $sql="select * from message"; $result=mysql_query($sql); $row=mysql_fetch_array($result); //共享内存块设置 $systemid = 865; $mode =

zxh543362234的博客 1104

四旋翼无人机控制算法实战:从PID到MPC的路径跟踪

本文深入探讨了四旋翼无人机控制算法的演进路径,从基础的PID控制到高级的MPC算法,详细解析了各类算法的原理、实现技巧及适用场景。通过实战案例对比分析,为开发者提供从算法选型到参数调优的全方位指导,助力提升无人机飞行控制的精度与稳定性。

weixin_29090917的博客 243

我看MFC的过去、现在和未来

首先说句题外话,虽然我现在的“主业”是Qt,但自己扪心自问,对MFC的熟悉程度要超过Qt。正是由于有了对MFC的熟悉,才能在使用Qt时,比较清醒的认清两者的优劣之处,在此暂且不提。 这个话题也可以说是由来已久,众说纷纭,今时我也谈谈自己的感悟。 一、对MFC的总体看法 首先看看云风在其《游戏之旅-我的编程感悟》一书中对MFC的看法: “我所见到的程序员中,很多把C+

qter_wd007的专栏 6117

如何解决PHP里大量数据循环时内存耗尽的问题

为什么80%的码农都做不了架构师?>>> ...

weixin_34265814的博客 595

第四篇:关于python程序打包的问题-找不到fsspec

这个问题困扰了我将近两天的时间一直找不到什么好的办法,甚至打算放弃。主要原因是身边没有可以述说的人,也没有可以请教的人。正在想要放弃的时候找到了解决办法。 打包后运行程序是这样的, 大概意思是找不见fsspec这个依赖,刚接触python说实话对于这些第三方库理解不是很到位,我的理解就是:类似于java程序中的jar包,程序找不见了。可怎么让他找见了,刚开始以为我自己没有安装fsspec,在cmd中进行了安装,结果如下图所示 很明显,已经安装并且安装目录都有,跟着网上的一些解决办法,在打包的时候把这.

weixin_47861710的博客 5866

php查询大量sql语句时内存溢出的解决方法

今天刚发现一个之前没有见过的错误,mysql内存不足。研究了好久找出了解决办法,分享给大家。 问题: 使用php查询mysql大数据量的时候,程序尚未执行完毕,跳出警告: Fatal error:  Allowed memory size of 100663296 bytes exhausted (tried to allocate 103 bytes) 错

u013473997的博客 4656

Mastercam软件二次开发:使用C#进行Mastercam二次开发

C#(发音为“C Sharp”)是一种现代、面向对象的编程语言,由微软开发,首次发布于2000年。它结合了C和C++的强大功能,同时引入了Java的垃圾回收机制,使得C#在开发效率和运行性能之间找到了一个良好的平衡点。C#的设计目标是提高开发者的生产力,它支持多种编程范式,包括面向对象、泛型、委托和事件等,这使得它成为开发Windows应用程序、Web应用程序、游戏(尤其是使用Unity引擎)和企业级应用的理想选择。

kkchenjj的博客 2220

QT C++ AI棉花智能变量灌溉工上位机(信创完整版)

北斗履带灌溉机器人/田间分区电磁阀基站 → 多层土壤温湿度/盐分EC传感器实时采集墒情 → 双目AI视觉扫描棉田长势、病苗分布 → AI融合**生育期+土壤墒情+盐分+棉株长势**计算变量灌溉定额、水肥配比、灌溉时长 → 分区电磁阀/变频水泵变量供水,病弱苗地块减量、干旱地块增量;墒情、盐分、长势多因子闭环修正灌水量;多层土壤含水率(0–10/20–40/40–80cm)、土壤EC盐分、土壤温度、空气温湿度、蒸发量、北斗地块坐标、管道水压、水肥罐液位、分区流量计、水泵电机负载、滴灌带压力反馈。

寒寒豆豆软件公司的博客 188

php mysql 溢出_mysql查询大量数据,php内存占用溢出问题

MySQL查询返回的结果太多(达10万条), 从而导致PHP内存不够用。 所以, 他问, 在执行下面的代码遍历返回的MySQL结果之前, 数据是否已经在内存中了? -while ($row = mysql_fetch_assoc($result)) {// …}当然, 这种问题有许多优化的方法。 不过, 就这个问题来讲, 我首先想到, MySQL是经典的C/S(Client/Server, 客户端...

weixin_39617318的博客 283

使用 MATLAB/Simulink + Simscape Electrical + SimPowerSystems + Stateflow,构建一个多能互补微电网系统的动态响应仿真模型

本文详细介绍了使用MATLAB/Simulink构建多能互补微电网动态响应仿真模型的方法。文章从系统架构设计入手,包含光伏、风电、柴油发电机、锂电池储能等多种组件,重点讲解了建模过程、控制策略(下垂控制、PLL、SOC管理)和模式切换逻辑(Stateflow)。通过四种典型场景(负荷突增、光伏出力骤降、并网/孤岛切换、电动机启动)的仿真分析,验证了微电网在动态响应中的关键性能指标,并提出了高可靠性设计建议。该模型为微电网的稳定性分析和优化设计提供了有效工具,特别强调了储能系统在快速功率支撑中的重要作用。

amy_mhd的博客 160

PHP中查询较大的mysql请求

曾经碰到过跑一个脚本,做mysql的结果输出什么的,结果直接一个内存耗尽。。今天有幸,看到一个帖子,讲的是PHP中处理大mysql请求的文章,讲解了,底层的实现。分享给大家看看。原帖地址:http://ourmysql.com/archives/917?f=wb 文章就不贴过来了,然后,要说的就是,这个问题和排序是一样的。 你可以用内存换性能,也可以性能换内存。所以,没有绝对的好,或者绝

BrightLee的专栏 828

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

mysql_unbuffered_query pdo_PHP处理大量数据的问题

原标题:PHP处理大量数据的问题如果有文章推荐,或者你们要看什么的技术文章,请在留言处留言,感谢支持例如从两张表中分别查出上百万条数据,现在需要把这些数据组装在一起然后在插入到另外一张表中,请问除了使用数组组装外还能怎么处理,如果使用数组的话怎么才能保证不超出内存限制。mysql_query函数查询的方式是查询出全部结果后缓存到内存中,这样就会出现超内存的现象,使用另外一个函数mysql_unbu...

weixin_29838739的博客 235

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

php 内存

PHP数组读取的循环操作 附: PHP内存溢出Allowed memory size of 解决办法 PHP内存溢出Allowed memory size of 解决办法使用脚本语言最大的好处之一就是可利用其拥有的自动垃圾回收机制(释放内存)。你不需要在使用完变量后做任何释放内存的处理,PHP会帮你完成。当然,我们可以按自己的意愿调用 unset() 函数来释放内存,但通常不需要这么...

weixin_30421525的博客 89

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

mysql查询大量数据,php内存占用溢…

转      MySQL查询返回的结果太多(达10万条), 从而导致PHP内存不够用。 所以, 他问, 在执行下面的代码遍历返回的MySQL结果之前, 数据是否已经在内存中了? -   while ($row = mysql_fetch_assoc($result)) {   // …   }   当然, 这种问题有许多优化的方法。 不过, 就这个问题来讲, 我首先想到, MySQL是经典的C

u012612302的专栏 1766

php mysql 内存溢出_php查询mysql返回大量数据结果集导致内存溢出的解决方法

web开发中如果遇到php查询mysql返回大量数据导致内存溢出、或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况?答案是: mysql_query 和 mysql_unbuffered_query 两个函数首先来分析一个典型的实例:在执行下面的代码的时候就会导致php请求mysql返回结果太多(10W以上)导致PHP...

weixin_33045071的博客 412

php mysql 查询内存溢出_php查询mysql返回大量数据结果集导致内存溢出的解决方法...

web开发中如果遇到php查询mysql返回大量数据导致内存溢出、或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况?答案是: mysql_query 和 mysql_unbuffered_query 两个函数首先来分析一个典型的实例:在执行下面的代码的时候就会导致php请求mysql返回结果太多(10W以上)导致PHP...

weixin_36194102的博客 435

【代码】PHP 分析查询MySQL大量数据的内存占用情况

这篇文章主要是从原理, 手册和源码分析在PHP中查询MySQL返回大量结果时, 内存占用的问题, 同时对使用MySQL C API也有涉及. 昨天, 有同事在PHP讨论群(276167802 验证:csl,有兴趣的话可以加入进来一起讨论)里提到, 他做的一个项目由于MySQL查询返回的结果太多(达10万条), 从而导致PHP内存不够用. 所以, 他问, 在执行下面的代码遍历返

1391

php查询mysql大量数据占用大量内存导致内存不足

php查询mysql大量数据占用大量内存导致内存不足 场景: 使用php查询mysql导出16万条数据到文件中,尚未执行完毕,跳出警告: PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)  错误提示:php所分配到的128M内存被

dayello的专栏 1569

如何解决PHP查询大量数据内存耗尽的问题

从数据库查询大量数据时会出现内容不够的提示 PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted 这个问题在PHP的官方网站上叫缓冲查询和非缓冲查询(Buffered and Unbuffered queries)。PHP的查询缺省模式是缓冲模式。也就是说,查询数据结果会一次全部提取到内存里供PHP程序处...

小熊的专栏 6533

PHP处理大量数据不超出内存限制的问题

例如从两张表中分别查出上百万条数据,现在需要把这些数据组装在一起然后在插入到另外一张表中,请问除了使用数组组装外还能怎么处理,如果使用数组的话怎么才能保证不超出内存限制。   mysql_query函数查询的方式是查询出全部结果后缓存到内存中,这样就会出现超内存的现象,使用另外一个函数mysql_unbuffered_query可以解决这个问题,mysql_unbuffered_query不会...

丶小小焦的博客 6385

PHP 大结果集内存溢出详解与解决方案

PHP大结果集内存溢出解决方案 当PHP处理大量数据库查询结果时,默认的fetchAll()等方法会一次性加载所有数据到内存,导致内存溢出。常见于数据导出、报表生成等场景。 解决方案核心:避免一次性加载,采用分批或流式处理。 分页查询:使用LIMIT和OFFSET分批获取数据 游标方式:通过PDO::MYSQL_ATTR_USE_BUFFERED_QUERY=false实现逐行读取 生成器封装:使用yield逐行返回数据,减少内存占用 数据库导出:直接使用SQL导出功能(如INTO OUTFILE) 框架优

深山技术宅的博客 998

PHP从MySQL获取大量数据时内存耗尽问题的解决方案

PHP从MySQL获取大量数据时内存耗尽问题的解决方案 2017年01月10日 11:11:30 阅读数:2077 标签: php数据库内存 更多 个人分类: PHP 最近在开发一个PHP程序时遇到了下面的错误: PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted 错误信息显示允许的最大内存已经耗尽。遇到...

Summer 2190
上一篇: 敏捷开发的原则
下一篇: js函数过多的编码思考
jakqigle
博客等级 码龄19年 37粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值