Вызываемый оператор JDB C проблема производительности - PullRequest
0 голосов
/ 20 июня 2020

У меня есть поток Java, получающий данные через сокет и сохраняющий их в базе данных Oracle.

Java 1.6 Oracle 12c Solaris 10

Я вызываю хранимую процедуру с Java. Я использую оператор JDB C callable для вызова хранимой процедуры.

Connection connection = null;
CallableStatement callableStatement = null;
Integer id=0;
try {
    connection = dbPool.getConnection();

    callableStatement = connection.prepareCall("{call xyz(?, ?)}");
    callableStatement.setString(1, "abc");
    callableStatement.registerOutParameter(2, java.sql.Types.INTEGER);
    callableStatement.execute();
    
    id=callableStatement.getInt(2);
} catch (SQLException e) {
    throw new Exception(e);
} finally {
    closeAll(callableStatement, connection);
}

Хранимая процедура вызывается для каждого сообщения, которое нужно сохранить в базе данных, и мне нужно вызывать ее для каждого сообщения. Когда я запускал эту хранимую процедуру из блока PL / SQL, она обрабатывала 35 сообщений в секунду, но приложение Java способно обрабатывать только 7 сообщений в секунду, потому что для выполнения вызываемого оператора требуется около 150 миллисекунд.

Мой вопрос: как повысить производительность вызова Java хранимой процедуры Oracle?

...