PreparedStatement, CallableStatement и соображения производительности

У меня есть oracle stored proc, которую нужно вызвать из моей Java-программы. Я использовал CallableStatement для передачи параметров хранимой процедуре. Я использую тонкий драйвер oracle (настроенный в сервере web logic на соответствующую запись jndi). Эта хранимая процедура не имеет никаких значений OUT. Эта хранимая процедура принимает числовое значение и выполняет множество обновлений в базе данных на основе полученного значения.

Я получаю объект соединения и затем вызываю эту хранимую процедуру в цикле (20 раз для передачи 20 чисел). Когда я напрямую вызываю эту хранимую процедуру из клиента oracle, выполнение завершается за 2-3 секунды. Однако это поведение не предсказуемо из моего java-кода. Некоторые вызовы выполняются за 30-40 секунд.

Я попытался использовать PreparedStatement вместо CallableStatement и смог увидеть незначительное улучшение производительности (хотя поведение все еще непоследовательное).

  1. Можно ли в моем случае использовать PreparedStatement вместо CallableStatement, учитывая, что storedproc не имеет никаких OUT параметров?
  2. Есть ли причина, по которой PreparedStatement имеет некоторый выигрыш в производительности по сравнению с CallableStatement или это что-то, что я мог неправильно заметить?
  3. Есть ли лучший подход для решения этой проблемы производительности?
13
задан Bhesh Gurung 5 January 2012 в 19:23
поделиться