AWS 上的 PHP 腳本運行速度為 5%,而不是 100%

AWS 上的 PHP 腳本運行速度為 5%,而不是 100%

下面的 PHP 腳本目前託管在 c3.large EC2 執行個體上,具有執行個體儲存以及用於 MySQL 的 SSD 安裝。腳本正在讀取的檔案位於實例儲存裝置之一上。

當腳本第一次啟動時,它像預期一樣以 100% 的速度運行,然而,幾個小時後,腳本速度減慢到 5% 左右,最終使 MySQL 插入速度減慢。

關於什麼會減慢這個過程有什麼想法嗎?是否可能是 IOPS 問題?

$handle = fopen(TMP . 'zones/' . $destinationFile, 'r');
if ($handle) {
    $x = 0;
    $origin = '';
    while (($line = fgets($handle)) !== false) {
        $x = $x + 1;
        $line = str_replace("\r", '', $line);
        $line = str_replace("\n", '', $line);
        if ($x > 61) {
            $record = explode(' ', $line);
            switch ($record[1]) {
                case 'NS':
                    $domain = $record[0];
                    $nameserver = rtrim($record[2], '.');
                    if ($record[2] == $nameserver) {
                        $nameserver = $nameserver . '.' . $origin;
                    }
                    $domainId = $this->addDomain($domain, $origin);
                    $nameserverId = $this->addNameserver($nameserver);
                    $dnId = $this->addDomainNameserver($domainId, $nameserverId);
                    break;
                case 'A':
                    echo 'Nameserver IP: ' . $record[2];
                    break;
            }
        } else {
            if (strpos($line, '$ORIGIN') > -1) {
                $origin = str_replace('$ORIGIN ', '', $line);
                $origin = rtrim($origin, '.');
            }
        }
    }
    fclose($handle);
}

答案1

最好在 StackOverflow 上詢問...您提到 MySQL 插入,但我在您的問題中沒有看到任何 SQL 程式碼。通常,當您在資料庫中插入大量資料時:

1)您不會對每一行執行一個請求 2)您不時提交,否則資料庫必須將所有資料保存在臨時緩衝區中。 3)但是您也不必提交每一行,因為這很昂貴,通常您會大量輸入數千行資料。

MySQL 和其他 DBMS 也有從文件中提取大型表的方法(請參閱LOAD DATA在 SQL 中mysqlimport命令),這樣你的腳本就可以建立該中間文件,然後呼叫 MySQL 一次載入它。

相關內容