Долго выполняются запросы INSERT

BabyKiller

Новичок
Долго выполняются запросы INSERT

Имеется бэкап базы в форме запросов INSERT, в ней примерно 18500 запросов.
Ранее делал восстановление из этого файла через WEB-интерфейс, скорость восстановления была не более минуты (возможно даже около 10 секунд)

Но вот с недавних пор, восстановление происходит очень долго, и выполниться не может, пишет что превышает интервал ожидания 60сек., а он и не проделал и малой части восстановления.

Пытался исполнить файл из командной строки MySQL, та же история.
Скорость выполнения одного запроса от 0.01 до 0.03 секунд. Не могу понять в чём причина.

MySQL
* Сервер: localhost via TCP/IP
* Версия сервера: 5.1.35-community
* Версия протокола: 10
* Пользователь: root@localhost
* MySQL-кодировка: UTF-8 Unicode (utf8)

Веб-сервер
* Apache/2.2.11 (Win32) PHP/5.2.10
* Версия MySQL-клиента: 5.0.51a
* PHP расширение: mysql
 

vovanium

Новичок
запросы делай в Extended Insert т.е.
[sql]INSERT INTO `table` VALUES
(1,'Первая строка'),
(2,'Вторая строка');[/sql]
плюс отключай индексы до выполнения инсертов, и включай после. А вообще попробуй sypex dumper lite маленький скриптик, который быстро делает бэкап и восстановление базы.
 

BabyKiller

Новичок
vovanium, запросы уже сделаны, и делает их скрипт phpMyBackupPro
Хотя в сравнении он и в лузерах, но с маленькой базой (моей) справлялся просто отлично!...
Но если другого варианта не будет, придётся рассмотреть и твой вариант..
 

vovanium

Новичок
BabyKiller
phpMyBackupPro далеко не самый лучший вариант, скрипт давно не обновлялся, в нем даже нет установки кодировки соединения, из-за этого могут быть всевозможные косяки с кодировками. Плюс в самом коде есть ошибки в некоторых случаях может запороть дамп.
Ну и что касается скорости, то к примеру, база форума phpbb3 чистая после инсталла 62 таблицы, 1628 записей. Дампер восстанавливает её из своего дампа за 7,5 сек, phpMyBackupPro из своего за 48. Так что как видишь разница очень приличная.
 

BabyKiller

Новичок
vovanium, хорошо, я уже об этом подумываю :)
Но вопрос то в другом.
У меня база InnoDB. Не проверял как будет работать в MYISAM (может у меня раньше такая и была...).

Но вот тут очень интересная проблема: http://www.mysql.ru/webboard/index.html?n1=9247&n2=1
И в чем его решение заключалось - я не понял
 

vovanium

Новичок
BabyKiller
Ты бы уже 10 раз попробовал :) В phpbb3 таблицы тоже в innodb. Я тебе показал пример, абсолютно одинаковые данные, включая тип таблиц и т.п. на одном и том же локальном компе, разница только в реализации бэкапа/восстановления. Разница составила 6,4 раза.

И еще раз, вставкой большого количества данных, по методу "одна запись - один инсерт" занимаются только люди слабо разбирающиеся в MySQL, т.к. тратится куча времени на отсылку каждой строки отдельно MySQL, парсинг этой строки MySQL, обновление индексов после каждого инсерта...
 

BabyKiller

Новичок
Преимущества phpMyBackupPro в том, что я могу в тело скрипта вписать процедуру запуска бэкапа:
PHP:
// This code was created by phpMyBackupPro v.2.1 
// [url]http://www.phpMyBackupPro.net[/url]
$_POST['db']=array("comp", );
$_POST['comments']="Автобэкап после изменения<br>Изменил: $_SERVER[REMOTE_ADDR]:$_SERVER[PHP_AUTH_USER]<br>Операция: $comment";
$_POST['tables']="on";
$_POST['data']="on";
$_POST['drop']="on";
$_POST['zip']="zip";
$period=0;
$security_key="123";
@chdir("../phpMyBackupPro/");
@include("backup.php");
// This is the relative path to the phpMyBackupPro v.2.1 directory
SypexDumperLite так умеет?
Пробовал научить - простыми путями не получается... у кого получалось?
 

Adelf

Administrator
Команда форума
Индексы. индексы :) в них обычно все.

Помнится под Оракл был такой специальный режим быстрой заливки данных в таблицу. Минуя индексы и т.д. хвастались цифрой типа 60 000 вставок в секунду. Хз откуда взята была она, но работало действительно быстро.
В MySQL в технологиях я не особо силен, но советы про отключать индексы, и делать инсерт с кучей строк сразу - достаточны, имхо.
 
Сверху