Приведенный ниже PHP-скрипт размещается в экземпляре c3.large EC2 с хранилищем экземпляров и монтированием SSD для MySQL. Файл, который читает скрипт, находится на одном из устройств хранения экземпляра.

Когда сценарий запускается впервые, он работает на 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 ответ1

0

Лучше спроси на StackOverflow ... Вы упоминаете вставки MySQL, но я не вижу никакого кода SQL в вашем вопросе. Обычно, когда вы вставляете большие объемы данных в базу данных:

1) вы не делаете один запрос на строку. 2) время от времени вы делаете COMMIT, в противном случае БД должна хранить все ваши данные во временном буфере. 3) Но вы также не фиксируете для каждой строки, так как это дорого, обычно вы вводите данные партиями по несколько тысяч строк.

Кроме того, MySQL и другие СУБД имеют способы получения больших таблиц из файла (см. LOAD DATA in SQL или команду mysqlimport ), чтобы ваш сценарий мог создать этот промежуточный файл и затем вызвать MySQL, чтобы загрузить его за один раз.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .