Вопрос по performance, file-import, phpmyadmin, mysql – Проблемы с производительностью импорта данных из PhpMyAdmin

1

Первоначально мой вопрос был связан с тем, что раздел SQL в PhpMyAdmin не работал должным образом. Как предложено в комментариях, я понял, что это количество ввода невозможно обработать. Однако это не дало мне правильного решения о том, как обращаться с файлами, имеющими (в моем случае - 35 тысяч строк записи) в формате (CSV):

<code>...
20120509,126,1590.6,0
20120509,127,1590.7,1
20120509,129,1590.7,6
...
</code>

Параметр импорта в PhpMyadmin работает так же, как и основной ввод-копирование в разделе SQL. На этот раз, как и ранее, до вызова максимального времени выполнения требуется 5 минут, а затем он останавливается. Интересно, что в таблицу добавляется около 6-7 тысяч записей. Так что это означает, что ввод фактически проходит и делает это почти успешно. Я также попытался вдвое сократить объем данных в файле. Ничего не изменилось, однако.

Сейчас явно что-то не так. Довольно неприятно играть с данными в php-скрипте, когда простой импорт данных не работает.

Обновил вопрос в целом, чтобы указать на ключевую проблему. Оригинальный вопрос был просто царапиной проблемы. Andrius Naruševičius
Вы уверены, что он загружается для запуска? Похоже, это слишком большой ввод для веб-интерфейса для загрузки на сервер. Почему бы просто не выполнить из PHP? matthewnreid
Хм, теперь я чувствую себя довольно глупо, задавая этот вопрос. Но я помню, что у меня были проблемы с добавлением данных из файла. Необходимо проверить это и обновить или удалить ответ, если это необходимо. Спасибо за указание очевидных вещей. Andrius Naruševičius
воинствующие ретаггеры воинствующие;) totallyNotLizards

Ваш Ответ

1   ответ
4

Измените ваш максимальный размер загрузки php.

Вы знаете, где находится ваш файл php.ini?

Прежде всего, попробуйте поместить этот файл в корневой каталог:

phpinfo.php

( увидетьhttp://php.net/manual/en/function.phpinfo.php )

содержащий:

<?php

phpinfo();

?>

Затем перейдите кhttp://www.yoursite.com/phpinfo.php

Ищите & quot; php.ini & quot ;.

Для загрузки больших файлов вам нужно max_execution_time, post_max_size, upload_max_filesize

Кроме того, вы знаете, где находится файл error.log? Надеюсь, это даст вам понять, что происходит не так.

РЕДАКТИРОВАТЬ:

Вот запрос, который я использую для импорта файла:

$query = "LOAD DATA LOCAL INFILE '$file_name' INTO TABLE `$table_name` FIELDS TERMINATED BY ',' OPTIONALLY
    ENCLOSED BY '\"' LINES TERMINATED BY '$nl'";

Где $ file_name - это временное имя файла из глобальной переменной php $ _FILES, $ table_name - это таблица, уже подготовленная для импорта, а $ nl - это переменная для окончаний строки csv (по умолчанию это окончания строк windows, но у меня есть возможность выбрать строку linux окончания).

Другое дело, что таблица ($ table_name) в моем скрипте подготовлена заранее, сначала просканировав csv для определения типов столбцов. После того, как он определяет соответствующие типы столбцов, он создает таблицу MySQL для получения данных.

Я предлагаю вам сначала попытаться создать определение таблицы MySQL, чтобы соответствовать тому, что находится в файле (типы данных, длина символов и т. Д.). Затем попробуйте приведенный выше запрос и посмотрите, насколько быстро он работает. Я не знаю, как много влияет определение таблицы MySQL на скорость.

Кроме того, у меня нет индексов, определенных в таблице, пока ПОСЛЕ загрузки данных. Индексы замедляют загрузку данных.

Я могу сказать следующее: он должен достичь состояния вставки данных, но не может его завершить. Я предполагаю, что плагины для загрузки чего-либо, кроме SQL (опять же, кусками по 10k или около того, но не более), не подходят для больших кусков данных, но, опять же, это маловероятно. Максимальный размер файла для загрузки не является проблемой, файлы намного меньше его. О post_max_size: разве это не остановит процесс, если он будет слишком большим? И вообще, что занимает 5 минут? Почему он не выдает ошибку о превышении некоторой переменной? 10к записей за 5 минут смешно :( Andrius Naruševičius
Я думаю, что он пытается добавить все данные в один запрос (так же, как я пытался, но получил мгновенную ошибку и, таким образом, уменьшил ее до 10k каждый), и поэтому борется с этим, но я нахожу действительно странным, что создатели такого крупномасштабный проект не думал бы о загрузке больших файлов, а не о разделении их на более мелкие запросы. Andrius Naruševičius
Когда я выполняю какой-то запрос из php-скрипта, сразу вставляются 10k записей. Я тестировал, и это добавляло ~ 18 тыс. Записей в секунду. Однако он не мог обрабатывать очень большие запросы (выдает ошибку: сервер mysql исчез), поэтому я разделил его на части по 10 тыс. Записей для вставки, и все было отлично. Когда я пытаюсь импортировать из файла CVS / Excel с помощью PhpMyAdmin, скрипт что-то делает (не уверен, как именно проверить, что именно) и через 5 минут перестает достигать максимального времени выполнения. Я считаю, что он добавил 6-7 тыс. Строк в базу данных. Andrius Naruševičius
Ну, я использую то, что мне предлагает PhpMyAdmin, и это явно не работает должным образом. Я могу легко использовать какой-нибудь самостоятельно написанный скрипт php для загрузки всех данных (и я думаю, что это будет решением). Однако это всего лишь небольшое неудобство, однако очень неприятно, что в PhpMyAdmin есть ошибки, которые ДОЛЖНЫ быть исправлены перед выпуском. Andrius Naruševičius
Я тестирую свою текущую программу PHP / MySQL с CSV-файлами размером более 2 мегабайт. На самом деле я думаю, что у меня даже был один, который был 5 или 10 МБ. Вы пытаетесь просто загрузить все данные в одну таблицу? Если это так, «ЗАГРУЗИТЕ ДАННЫЕ В ИНФИЛЕ» это метод, который вы должны использовать.dev.mysql.com/doc/refman/5.1/en/load-data.html Я использую это, чтобы поместить данные в «raw» Таблица. Затем я делаю дальнейшую обработку оттуда.

Похожие вопросы