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 一次性加载它。

相关内容