[英]PHP While Loop Slowdown over time
我看似无害的while循环遍历mysql查询的结果集,并将mysql返回的id与一个非常大的多维数组中的id进行比较:
//mysqli query here
while($row = fetch_assoc())
{
if(!in_array($row['id'], $multiDArray['dimensionOne']))
{
//do something
}
}
当脚本首次执行时,它以大约每秒2-5k的速度运行结果。 有时更多,很少少。 结果集带回700万行,脚本峰值为2.8GB内存。
就大数据而言,这并不是很多。
问题是,在600k标记附近,循环开始减速,而在800k时,它正在处理一些记录。
在服务器负载和内存使用方面,没有问题。
这是我之前在处理大型数据集的其他脚本中注意到的行为。
当内部指针移动得更深时,阵列寻道时间是否逐渐变慢?
这实际上取决于循环内部发生的事情。 我知道你确信这不是一个记忆问题,但它看起来像一个。 当系统试图通过使用SWAP获得额外的RAM时,程序通常会变得很慢。 使用硬盘驱动器显然非常慢,而这正是您可能遇到的情况。 对它进行基准测试非常容易。
在一个终端运行中
vmstat 3 100
运行脚本并观察vmstat。 查看IO和SWAP。 如果确实不是这种情况,那么使用XDEBUG进行概要执行。 它可能很棘手,因为你做了很多迭代,这也会导致主要的IO。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.