2015-12-20 3 views
1

Я пытаюсь вставить 10 000 строк в четыре таблицы Informix (2500 на таблицу) с помощью поставщика .NET через одно соединение и внутри транзакции (BEGIN WORK/COMMIT WORK). Каждая таблица содержит около 20 столбцов, первичный ключ char (20) и индекс в одном столбце char.Почему провайдер Informix .NET замедляется?

Первые несколько строк вставляются со скоростью около 500 в секунду. Вставки замедляются до тех пор, пока в конце не будет 10/секунд.

Я попытался взломать задачу в транзакции по 1000 строк за раз, с новым соединением для каждой транзакции, но замедление было одинаковым. Соединение и команда были выбраны после завершения каждого блока. Я даже попытался поставить Сон (10000 мс) после каждой транзакции.

Наконец, я изменил программу, чтобы вставить 1000 строк за раз, начиная с определенного номера строки. При первом запуске программы она вставляла строки 1-1000. Во второй раз, когда он запускался, он вставил строки 1 001-2000 и т. Д. Каждый последующий запуск программы начинался через 3 или 4 секунды после окончания предыдущего запуска.

Замедление исчезло. Строки 9000-10 000 были вставлены примерно с той же скоростью в 500 рядов в секунду, что и строки 1-1000.

Что я делаю неправильно? Как я могу получить одну транзакцию из 10 000 строк для вставки с более или менее постоянной скоростью?

ответ

1

Мы не выяснили, что произошло с поставщиком .NET, но замена драйверов ODBC устранила проблему.