Производительность OracleBulkCopy - PullRequest
5 голосов
/ 01 июля 2011

Мое приложение C # .NET записывает миллионы записей во временную таблицу с помощью OracleBulkCopy. Каждый раз, когда приложение имеет 20000 записей или более в памяти, оно вызывает OracleBulkCopy, чтобы записать их все в одном пакете (я использую размер пакета = 0). В начале таблица пуста, и написание всего пакета занимает всего 2 секунды. В процессе работы время написания партии увеличивается. После 2.000.000 записей каждый звонок занимает почти 25 секунд. Я использую параметры по умолчанию OracleBulkCopy. При выполнении некоторых тестов, когда таблица достигает 40 000 000, на написание 20 000 записей уходит почти 3 минуты.

Я хотел бы знать, есть ли какие-либо рекомендации (я ничего не мог найти по этому поводу), чтобы поддерживать почти постоянное время для каждого звонка. Я что-то не так делаю?

1 Ответ

3 голосов
/ 04 июля 2011

Похоже на странное поведение. Вы отслеживали сеанс базы данных, выполняющий вставки, чтобы увидеть, что он ожидает?

ALTER SESSION SET timed_statistics=TRUE;
ALTER SESSION SET max_dump_file_size=UNLIMITED;
ALTER SESSION SET EVENTS '10046 trace name context forever, level 8';

99 раз из 100, результаты трассировки укажут на проблему в этих странных случаях замедления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...