Запуск sql-скриптов из sqldeveloper в сравнении с Java-кодом

#java #sql #oracle11g #oracle-sqldeveloper

#java #sql #oracle11g #oracle-sqldeveloper

Вопрос:

Я пытаюсь запустить несколько sql-скриптов в Oracle 11g R2

Когда я пытаюсь запустить эти скрипты из автономного Java-кода, запрос выполняется в течение 40 с лишним минут, но когда я запускаю то же самое из клиента sqldeveloper, он выполняется за 4 минуты

В чем может быть причина?


Редактировать

Ну, я делаю несколько сценариев обновления, вызывая процедуру pl / sql

Да, я выполняю конкатенацию строк

Комментарии:

1. Какого рода и сколько инструкций вы выполняете? (Выбирает, вставляет, обновляет)

2. Какой объем данных вы отправляете (для инструкций write) и какое количество строк вы извлекаете.

3. Все, чего вы нам не показываете: ваш код. Я подозреваю, что вы делаете что-то подозрительное, например, конкатенации строк в жестком цикле.

4. Просто предположение: SQLDeveloper — это ODBC, а с java вы работаете с JDBC.

5. @avid: SQLDeveloper (тот, что от Oracle) — это инструмент на основе Java / JDBC

Ответ №1:

Чтобы выполнить sql из Java, необходимо выполнить следующие шаги:

  • открытие соединения (700 мс)
  • подготовка инструкции (80 мс)
  • выполнить инструкцию (10 мс)

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

Убедитесь, что ваш код не открывает соединение и не готовит инструкцию внутри цикла. Это может отнимать большую часть вашего времени и объяснять, почему скрипт работает медленнее, чем при запуске с помощью sql developer. Вы должны открыть соединение один раз, а затем повторно использовать соединение. Если вы не загружаете большой объем данных, то время, необходимое для выполнения кода на сервере базы данных, одинаково независимо от того, был ли он инициирован sql developer или каким-либо другим клиентом.