Script PHP na AWS é executado a 5% em vez de 100%

Script PHP na AWS é executado a 5% em vez de 100%

O script PHP abaixo está hospedado em uma instância c3.large EC2, com armazenamento de instância e montagem SSD para MySQL. O arquivo que o script está lendo está em um dos dispositivos de armazenamento da instância.

Quando o script é iniciado pela primeira vez, ele é executado 100% como esperado, no entanto, depois de algumas horas, o script diminui para cerca de 5%, diminuindo a velocidade das inserções do MySQL.

Alguma idéia sobre o que está retardando esse processo? É possivelmente um problema de 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);
}

Responder1

Melhor perguntar no StackOverflow... Você mencionou inserções do MySQL, mas não vejo nenhum código SQL na sua pergunta. Normalmente, quando você insere grandes quantidades de dados em um banco de dados:

1) você não faz uma solicitação por linha 2) você COMMIT de tempos em tempos, caso contrário o banco de dados terá que manter todos os seus dados em um buffer temporário. 3) Mas você também não confirma todas as linhas, pois isso é caro; normalmente, você insere dados em lotes de vários milhares de linhas.

Além disso, o MySQL e outros SGBDs têm maneiras de ingerir tabelas grandes de arquivos (consulteLOAD DATAem SQLou o mysqlimportcomando) para que seu script possa criar esse arquivo intermediário e então chamar o MySQL para carregá-lo de uma só vez.

informação relacionada