Массовая вставка производительности в Oracle - PullRequest
0 голосов
/ 16 марта 2012

Я перепробовал множество решений, но я все еще что-то не понимаю: я получил простую вставку (с 40 столбцами различного вида (включая BLOB-объекты), и я пытаюсь вставить этот тип передачи данных (я использую Odac из c #) массивы значений для каждого параметра.

Результатом является более или менее единичный вызов ExecuteNonQuery для 4000 строк, проблема в том, что эта вставка, не содержащая большого количества элементов, занимает последние 3 часа.

Есть предложения? источник данных взят из программного обеспечения, поэтому он не может быть связан с БД, его данные из памяти и все, что я делаю, это помещаю их в массивы и передаю их в качестве входных параметров моей команды oracle, которую я затем запускаю.

В этом случае какая-либо разница в использовании хранимой процедуры? почему?

Вставка фактически находится в транзакции, но в таблице, в которую я пытаюсь вставить, индекса нет вообще, БД - это обычная установка Oracle XE со 100 таблицами, транзакция включает в себя только эту вставку и несколько других не очень больших действий. , Общее количество данных, которые я пытаюсь вставить, не превышает 100 Мб ... Я не знаю, что мне следует проверять снова: (

Опять же: транзакция, похоже, не влияет на производительность и скорость не линейна, то есть 1000элементов = 10 минут, 4000элементов = 3 часа .. все с процессором 100% и огромным использованием памяти

1 Ответ

1 голос
/ 16 марта 2012

Вставка 4000 строк занимает 3 часа?Это проблема?Если длина каждой строки не составляет несколько ГБ, для такой производительности нет реального оправдания - вам нужно смотреть на базу данных (или сделать это вашим администратором базы данных), а не на код C #.

...