簡體   English   中英

PHP隨着時間的推移循環減速

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM