Вставка асинхронно в Oracle, какие преимущества? - PullRequest
1 голос
/ 26 мая 2010

Я использую ODP.NET для загрузки данных в Oracle. Я громоздко вставляю в группы по 1000 строк в каждом вызове.

Есть ли какие-либо преимущества в производительности при асинхронном вызове моего метода загрузки? Скажем, я хочу вставить 10000 строк, вместо того, чтобы делать 10 вызовов синхронно, я делаю 10 вызовов асинхронно.

Моя база данных использует ASSM прямо сейчас, но в противном случае, конечно, используется множество фриланлистов. Сервер базы данных также имеет несколько ядер.

Мои первоначальные тесты, похоже, указывают на увеличение производительности, но, может быть, я что-то не вижу? Потенциальная тупиковая ситуация или конфликтные ситуации?

Конечно, есть сложность в обработке транзакций, и это делает мою нагрузку таким образом.

Ответы [ 2 ]

2 голосов
/ 27 мая 2010

Зависит от того, где находится узкое место.

Если узким местом является ЦП и у вас есть несколько ЦП / ядер, то в нескольких сеансах может использоваться несколько процессоров, что должно ускорить процесс.

Если узким местом является сеть (между блоком «app» и блоком «db»), то преимущества будут менее очевидными. Вы можете получить некоторое преимущество (например, сессия 'a' перегружает сеть, в то время как сессия 'b' использует диск / процессор и наоборот).

Диск где-то посередине. Запись на диск обрабатывается в фоновом режиме процессом DBWR и LGWR для журнала повторов. Опять же, если сеансы используют разные ресурсы в разное время, вы увидите некоторое преимущество.

Вы можете столкнуться с конфликтом, особенно по индексам «последовательных» чисел или дат, когда параллельные сеансы могут захотеть записать в один и тот же бит индекса.

Какие объемы данных вы загружаете? Если он очень большой, вы можете получить выгоду от передачи файлов (например, CSV) и загрузки через внешнюю таблицу.

1 голос
/ 26 мая 2010

Вы должны увидеть повышенную производительность (до предела), если вы вставляете одновременно (то есть в несколько сеансов). Вы не описали, как вы вставляете асинхронно, но я предполагаю, что вы открываете несколько соединений с БД. Если у вас достаточно свободных списков (или вы используете ASSM), узким местом должна быть скорость записи на диск. Фиксируйте только один раз за сеанс (в конце рабочей нагрузки), и вы не должны сталкиваться с проблемами конкуренции.

Вы уже видите повышение производительности, только вы можете сказать, стоит ли оно усилий.

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