В настоящее время я пытаюсь заполнить базу данных MySQL5.1 на текущей машине Ubuntu с> 5 000 000 записей. Из-за архитектуры программы для каждого оператора INSERT открывается и закрывается новое соединение с базой данных. Я знаю, что это дорогостоящая операция, но для ее изменения потребуется изменить уйму кода, поэтому я бы предпочел этого избежать.
Проблема, с которой я столкнулся, заключается в том, что через некоторое время (обычно около 12 секунд, но это число увеличивается после нескольких повторных попыток) этот процесс больше не может подключиться к базе данных . Другие процессы могут подключаться к базе данных без каких-либо проблем.
Я не думаю, что это проблема MySQL, потому что ни один из журналов MySQL не сообщает об ошибках. Кроме того, одновременно открыто не более 1 соединения (что я проверил, взглянув на переменные состояния MySQL).
Вопрос. Существует ли ограничение на количество последовательных подключений к сокету, которое может быть открыто в заданный период времени?
Вот упрощенный perl-скрипт (фактическая программа на Java), который приводит к той же проблеме (переменные базы данных не включены):
# ...
my $i = 0;
my $DBH = 0;
for ($i = 0;$i < $MAX; ++$i) {
$DBH = DBI->connect("DBI:mysql:$DBNAME:$DBHOST:$DBPORT", $DBUSER, $DBPW)
or die ("Error - Connection to database failed: \n $i times ok\n".DBI->errstr);
$DBH -> disconnect;
if ($i % 10000 == 0) {
print $i. " ";
}
}
Вопрос. Есть предложения/идеи?