我正在开发一个处理大型MySQL数据库的PHP应用程序,现在由于数据库查询,我开始在PHP中检查我的内存限制(64mb)。我想知道什么最好的方法是防止(如果不是,停止)PHP和MySQL中的内存耗尽?大型MySQL数据库
回答
我能够将代码压缩到一个SQL查询,以便它只是使用MySQL来获取数字,而不是PHP + MySQL的的:
SELECT COUNT(*) AS 'total', COUNT(DISTINCT u.UniqueUserId) AS 'unique', ((COUNT(*)/(
SELECT COUNT(*) FROM `Sessions` WHERE ApplicationId = '[appid]' AND StartApp BETWEEN '[start]' AND '[end]')) * 100) AS 'percent', u.LangID
FROM `Sessions` AS s, `UniqueUsers` AS u
WHERE s.UniqueUserId = u.UniqueUserId AND s.ApplicationId = '[appid]' AND s.StartApp BETWEEN '[start]' AND '[end]'
GROUP BY u.LangID
谢谢!
尝试在您的网页中使用分页。 或者如果您在您的php脚本(例如cron作业)中进行计算,请尝试按块加载数据块并进行必要的计算。 如果您的表格行太大,您可能会想到将表格字段划分为具有相同唯一ID的新表格(例如userid)。
从mysql服务器获得的所有信息是否真的需要生成网页?尽可能多地将数据处理(过滤,分页,聚合计数)移动到数据库服务器。
您可以发布您在数据库上运行的查询的示例,以及您希望如何将其用于您的网页?
这是非常罕见的需要64Mb的数据从MySQL服务器生成一个页面。你做了以下限制接收的数据:
- 使用
LIMIT
语句只提取第一线 - 指定
SELECT
你真的需要(的SELECT *
代替) - 列越具体可能在你的
WHERE
子句中 - 使用
mysql_free_result
释放两个不同的SQL请求之间的资源(如果你运行其中的几个)?
而不是试图重写SQL查询,我只是发布一个链接到我遇到的问题的PHP文件:[http://pastebin.com/JxCJnaGW](http://pastebin.com/JxCJnaGW )。第一个查询返回12,201行,第二个查询返回2,179行。如果您需要更多信息,请告诉我。 – ub3rst4r 2012-03-11 19:09:41
限制将有所帮助。 而不是运行返回100,000行的单个查询,运行返回25,000行的4个查询,并在执行下一个25,000行之前处理这些行并取消设置。
你会这样做的极限。限额0,24999是第一个25000,那么限价25000,50000应该是下一个手数。
而不是试图重写SQL查询,我只是发布一个链接到我遇到的问题的PHP文件:http://pastebin.com/JxCJnaGW。第一个查询返回12,201行,第二个查询返回2,179行。如果您需要更多信息,请告诉我。
如果查询返回12000行,则需要有内存将所有这些行存储在某处。如果你通过循环所有的结果,并将它们塞进一个PHP数组,然后他们都计入64MB的PHP内存限制:
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
foreach ($data as $d) {
echo $d['foo'];
echo $d['bar'];
}
的$data
阵列现在需要容纳所有12000个结果在内存中,这将占用可用64MB的很大一部分,甚至可能超过它。在更大的空间节约的事情做的是从MySQL获得的数据只在需要:
while ($row = mysql_fetch_assoc($result)) {
echo $row['foo'];
echo $row['bar'];
}
在这里,我们只持有一行存储在一个时间并在需要时从MySQL获得下一行。这甚至不应该接近内存限制。
这只是一个小例子。每个变量和每一块数据都必须存储在某个地方。您需要了解这一点并在必要时进行优化。
- 1. 查询大型mysql数据库
- 2. 导入/导出大型mysql数据库
- 3. 是MySql适合大型数据库吗?
- 4. MySQL最大数据库数
- 5. MySQL数据库大小
- 6. 具有小数据的大型MySQL数据库
- 7. 为大型数据集创建MySQL数据库模式
- 8. MySQL数据库模型
- 9. 为大型数据库
- 10. 大型数据库处理
- 11. 搜索大型数据库
- 12. MySQL数据库的最大表大小
- 13. 数据库数据类型大小
- 14. 导出大型数据库与数据
- 15. 与服务器数据库同步大型本地数据库(MySQL)
- 16. 大型mysql数据库的可靠备份?
- 17. 如何将大型MySQL数据库表导出为excel
- 18. 如何管理大型MySQL数据库(备份)
- 19. MySQL Python花费太长时间来查询大型数据库
- 20. MySQL的帮助下/上大型数据库
- 21. 大型MySQL数据库如何变得高效?
- 22. mysqldump或mysqlhotcopy备份大型MySQL数据库?
- 23. Cron检查大型MySQL数据库中的日期
- 24. 如何备份和恢复Hibernate中的大型MySQL数据库?
- 25. 用于大型数据库的MySQL客户端
- 26. 从大型MySQL数据库获取顶线指标FAST?
- 27. 为大型查询优化MySql数据库
- 28. PHP更新大型数据库时MySQL超时
- 29. 针对大量小型MySQL数据库的云服务?
- 30. 针对大型数据库的mysql优化
这取决于你在脚本中做什么以及为什么你要超过内存限制。不知道,唯一的建议是:更好地保存记忆。 – deceze 2012-03-11 08:16:17