powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по OracleDataSource
8 сообщений из 8, страница 1 из 1
Вопрос по OracleDataSource
    #39767267
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток. Подскажите ответ на два вопроса:
1. Использую пул соединений OracleDataSource. Вызов getConnection() возвращает соединение. Скажите, это соединение нужно просто закрыть, после использования, или как-то возвратить в пул?
2. Есть ли возможность иметь пул соединений с подготовленными Statement? Или, возможно, пул уже созданных классов, где уже подготовлен Statement.
...
Рейтинг: 0 / 0
Вопрос по OracleDataSource
    #39767285
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LemkolegДоброго времени суток. Подскажите ответ на два вопроса:
1. Использую пул соединений OracleDataSource. Вызов getConnection() возвращает соединение. Скажите, это соединение нужно просто закрыть, после использования, или как-то возвратить в пул?
2. Есть ли возможность иметь пул соединений с подготовленными Statement? Или, возможно, пул уже созданных классов, где уже подготовлен Statement.
Ну вообще пул соединений для того и нужен чтоб держать соединение(сессию)
и предоставлять в нужный момент это соединение.(или открывать новое(не более параметра max pool connection) если все заняты.(иначе ставить в очередь на ожидание освободившегося)
и поэтому его закрывать не надо.
а заморачиваться с подготовленными Statement не надо...Сам оракле подготавливает кэш запроса .(Так называемый "прогретый кэш субд") Единственное за чем нужно следить это чтоб Sataement был параметрическим.
Типа
Код: plsql
1.
select * from table where id=:id 


Тогда это один подготовленный запрос в кэше оракла.
а если
хардкодно
Код: plsql
1.
2.
3.
4.
select * from table where id=1;
select * from table where id=2;
...
select * from table where id=N;


Тогда это N запросов в кэше СУБД и админ оракле идет к Вам стучать в "тыкву" :-)
...
Рейтинг: 0 / 0
Вопрос по OracleDataSource
    #39767299
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al,
Ок, спасибо.
Теперь встречный вопрос: если я присвоил переменной очередное подключение, то что я должен делать с это переменной? Как подключение вернется в пул?
...
Рейтинг: 0 / 0
Вопрос по OracleDataSource
    #39767311
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lemkolegirbis_al,
Ок, спасибо.
Теперь встречный вопрос: если я присвоил переменной очередное подключение, то что я должен делать с это переменной? Как подключение вернется в пул?

Ну тут читать api надо . и примеры смотреть(именно в java я не работаю с пулом)
Код: javascript
1.
2.
3.
4.
5.
Обычно это connection =OraPool.getconnection();
connection.executesql(sql);
или Statement connection.getstatement(execsql);
connection.commit();
//и по-идее всё ..connection остается подключенной к субд, но свободной для следующего .getconnection();
...
Рейтинг: 0 / 0
Вопрос по OracleDataSource
    #39767491
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закрыть connection, он вернется в пул

По умолчанию, PreparedStatement кэшируется в том числе и между двумя разными получениями connection из пула (кэщ PreparedStatement не сбрасывается при возврате в пул). Но на мой взгляд, это скорее _проблема_, чем преимущество. Кэш настраивается. RTFM, все подробно описано в документации
...
Рейтинг: 0 / 0
Вопрос по OracleDataSource
    #39767497
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al а заморачиваться с подготовленными Statement не надо...Сам оракле подготавливает кэш запроса .(Так называемый "прогретый кэш субд") Единственное за чем нужно следить это чтоб Sataement был параметрическим.

I. Мне кажется автор топика имел в виду PreparedStatement vs Statement

В этом случае:
1. Создали connection / получили из пула
2. Создали PreparedStatement'ы в данном connection
3. Работаем с ними....
4. Закрыли PreparedStatement'ы
5. Закрыли connection

II. Вы описываете серверную часть, soft parse vs hard parse. Но если prepared statement создан, то как я понимаю, последующих parse (в Oracle) не будет вообще. Т.к. информация о возврашаемых типах хранится в незакрытом PreparedStatement

III. В JDBC ( Oracle, PostgreSQL ) есть кэшь PreparedStatement'ов. Попытка создать PreparedStatement
...
Рейтинг: 0 / 0
Вопрос по OracleDataSource
    #39767504
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заново, при наличие запроса точно с таким же типом, просто вернет предыдущий PreparedStatement из кэше. Смысла в этом особого не вижу. Т.к. значение по умолчанию слишком мало (для Oracle вроде 5 запросов), а увеличивать не стоит, т.к. можно натолкнутся на нехватку памяти (для Oracle один статемент может занимать очень много памяти, т.к. хранятся и все служебные буферы обмена с сетью, а они в новых драйверах крайне агрессивные). В общем, дефолтные настройки я бы не трогал и особо с этим не заморачивался. Если работает, пусть работает.
...
Рейтинг: 0 / 0
Вопрос по OracleDataSource
    #39767597
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по OracleDataSource
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]