Огромный удар по производительности при использовании Java / OJDBC - PullRequest
1 голос
/ 02 октября 2010

У меня странное поведение с использованием Java с "ojdbc.jar" в качестве клиента.

У меня есть простая программа, которая пытается просто вставить 500 строк, используя один запрос.(ВСТАВИТЬ ВСЕ ОТ дуала).

Для выполнения этой программы на Java требуется 25 секунд.Это время, которое требуется для метода Statement.execute ().

Когда я запускаю запрос из SQLplus / SQLdeveloper, он занимает менее 1 секунды.

Ответы [ 3 ]

1 голос
/ 02 октября 2010

Похоже, вы получаете новое соединение для каждой вставки.

0 голосов
/ 02 октября 2010

Как правило, вы можете избегать очень больших операторов SQL, особенно трюка INSERT ALL FROM DUAL.Я не знаю почему, но я видел несколько случаев, когда Oracle будет очень долго разбирать большие операторы SQL.По какой-то причине «вставка в имя_таблицы (выберите« asdf »из двойного объединения все выберите« asdf из двойного ...) », кажется, работает намного лучше, но через некоторое время все равно начинает замедляться.

Iкогда-то рассчитывались разные размеры похожих запросов, и в какой-то момент время разбора казалось экспоненциально увеличивалосьЭто было на 10.2.0.3.0 я верю.Но сейчас я не могу воспроизвести проблему на 10.2.0.1.0, может быть, это только ошибка для конкретной версии?

Я бы порекомендовал вместо этого использовать версию UNION ALL и уменьшить количествострок, отправленных за утверждение.Другим решением является создание блока PL / SQL для вставки.Похоже, что Oracle разбирает большой PL / SQL лучше, чем большой SQL, но это решение более сложное.

(Кстати, возможно, это просто совпадение, что он быстрее работает в SQL Developer. Поскольку проблема заключается в разборевремя, во второй раз вы всегда будете быстрее.)

0 голосов
/ 02 октября 2010

Хотя ваши проблемы с производительностью кажутся чрезмерными и выходят за рамки того, что должно быть вызвано этим, стоит отметить, что драйверы Java JDBC-ODBC печально известны своей медлительностью.Если возможно, используйте собственные драйверы для своей базы данных, так как они обычно будут намного быстрее.

...