Отложенное обновление в Oracle PL / SQL - PullRequest
4 голосов
/ 20 января 2012

У меня есть простая процедура PL / SQL с одним курсором, и я перебираю ее.В каждой итерации я делаю оператор UPDATE (после выполнения некоторой бизнес-логики с данными).

Однако, если есть много итераций (десятки тысяч), это может быть довольно медленным, потому что в каждой итерации естьявляется одним оператором UPDATE.

Есть ли способ как-то "задержать" эти обновления, чтобы они выполнялись одновременно (и, следовательно, намного быстрее).

Редактировать: Oracle 11

Ответы [ 3 ]

11 голосов
/ 20 января 2012

Если вы не можете понять, как использовать прямой SQL (избегая цикла for вместе), вы, вероятно, сможете улучшить производительность, используя функции BULK Collection в pl / sql.

Пример статьи здесь.

Синтаксическая выдержка

* * 1010
2 голосов
/ 21 января 2012

Я не вижу анализа проблемы, но я вижу, что люди делают много предположений и делают поспешные выводы.Чтобы получить более систематический подход, я рекомендую следующее:

  • Включить трассировку уровня 10046 для сеанса при запуске задания обновления, чтобы увидеть, где большую часть времени тратится
  • Получить уровень сеансастатистика до запуска задания обновления и после него.

Посмотрите, где большую часть времени проведено, и решите реальную проблему.

1 голос
/ 20 января 2012

Попробуйте, если вообще возможно, выполнить бизнес-логику в операторе обновления.Это будет намного быстрее.

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