PHP Script en AWS se ejecuta al 5% en lugar del 100%

PHP Script en AWS se ejecuta al 5% en lugar del 100%

El siguiente script PHP está alojado actualmente en una instancia EC2 c3.large, con almacenamiento de instancia más un montaje SSD para MySQL. El archivo que lee el script se encuentra en uno de los dispositivos de almacenamiento de la instancia.

Cuando el script se inicia por primera vez, se ejecuta al 100% como se esperaba; sin embargo, después de unas horas, el script se ralentiza a aproximadamente el 5%, lo que finalmente ralentiza las inserciones de MySQL.

¿Alguna idea sobre qué está frenando este proceso? ¿Es posible que se trate de un 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);
}

Respuesta1

Mejor pregunte en StackOverflow... Mencionas inserciones de MySQL pero no veo ningún código SQL en tu pregunta. Normalmente, cuando inserta grandes cantidades de datos en una base de datos:

1) no realiza una solicitud por fila 2) se COMPROMETE de vez en cuando, de lo contrario, la base de datos debe contener todos sus datos en un búfer temporal. 3) Pero tampoco se compromete con cada línea, ya que esto es costoso; generalmente ingresa datos en lotes de varios miles de filas.

Además, MySQL y otros DBMS tienen formas de ingerir tablas grandes desde un archivo (consulteLOAD DATAen SQLo el mysqlimportcomando) para que su script pueda crear ese archivo intermedio y luego llamar a MySQL para cargarlo de una sola vez.

información relacionada