使用mysql_unbuffered_query(), 可以避免内存的立即占用, 如果返回的结果存放到array中也是完全没有问题的, 也不会出现php查询mysql数据量过大时导致内存溢出问题.
超过十载行业经验,技术领先,服务至上的经营模式,全靠网络和口碑获得客户,为自己降低成本,也就是为客户降低成本。到目前业务范围包括了:成都网站制作、成都网站建设、外贸营销网站建设,成都网站推广,成都网站优化,整体网络托管,小程序制作,微信开发,APP应用开发,同时也可以让客户的网站和网络营销和我们一样获得订单和生意!
这种情况一般会在单表数据表数据库比较大的时候出现,建议在使用的过程中限制单次读取数据条数,或者对数据表进行分表
不知道你是oracle还是sql server?这个是个自连接问题,先要排序,标行号,再同表的上下行相比,所以是自连接
orcale:
select a.vseq,a.declaredate as declaredate1,b.declaredate as declaredate2
from
(select vseq,declaredate,rownum as row from mac505 order by vseq,declaredate)a,
(select vseq,declaredate,rownum as row from mac505 order by vseq,declaredate)b
where a.vseq=b.vseq and a.row+1=b.row and a.declaredate+1000b.declaredate
sql server由于只有2005以上版本才有row_number()函数,所以如下脚本只能用在2005以上版本中
select a.vseq,a.declaredate as declaredate1,b.declaredate as declaredate2
from
(select vseq,declaredate,row_number() orver (order by vseq,declaredate) as row from mac505 )a,
(select vseq,declaredate,row_number() orver (order by vseq,declaredate) as row from mac505 )b
where a.vseq=b.vseq and a.row+1=b.row and a.declaredate+1000b.declaredate
1.修改配置文件,扩大查询内存方面的,例如tmp_table_size,还有别的根据实际情况放大点
2.优化查询语句,尽量避免查询整张表的数据
mysql数据库连接池溢出的原因最近用了公司某框架,部署到现场后,现场运维开始维护现场数据,在不断操作的过程中,系统崩溃,查看后台日志,druid连接池已经获取不到连接。于是开始了排查之旅。在此记录。
排查开始
首先后台的报错是这样的。
使用 unbuffered cursor 可以避免内存问题。
cursor 默认使用 buffered 模式。这种模式会把所有结果集返回并载入内存。如果结果集很大的话,内存会爆。
unbuffered cursor 是每次只将下一行结果返回,内存占用很小。不过这种模式缺点很多,所以没有作为默认的模式。