Oracle getConnection медленный - PullRequest
       39

Oracle getConnection медленный

6 голосов
/ 31 марта 2011

В проекте Java я использую банку ojdbc6

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.1.0</version>
        <scope>compile</scope>
    </dependenc>

Первый раз за день, который я запускаю, dataSource.getConnection () работает быстро. Второй раз обычно хорошо. Следующие несколько раз занимают около 45 секунд. После этого это займет несколько минут. Как только у меня запускается ПЕРВОЕ соединение данного приложения, все новые соединения, которые я получаю, очень-очень быстрые. Эта задержка получает только ПЕРВОЕ соединение для данного прогона.

Что делает мое первое соединение таким медленным?

Я смотрю netstat и не вижу зависания соединения после успешного запуска. Попробовал несколько разных пулов соединений ( DBCP, C3PO ) без удачи. При отладке через исходный код задержка составляет 100% в строке org.springframework.jdbc.datasource.DataSourceUtils :

Connection con = dataSource.getConnection();

Есть идеи?

Отредактировано для более подробной информации

1) Я использую пул соединений (DBCP или C3PO), который сохраняет соединения для будущего использования. Когда я говорю о получении нового соединения, я имею в виду, когда первое соединение используется .. Мне нужно пойти в БД и получить новое соединение. Конечно, я могу вернуться и получить одно и то же соединение из пула соединений снова и снова. Но получение секунды одновременно также быстро.

2) Я не знаю, сколько соединений моя БД позволяет мне войти в систему. Любая идея, где это свойство в оракуле?

Ответы [ 3 ]

8 голосов
/ 14 апреля 2011

Произошло из-за того, что java использовал / dev / random вместо / dev / urandom для создания ssh-соединения с базой данных .... переключение на / dev / urandom исправило это

3 голосов
/ 31 марта 2011

2 вопроса.

Во-первых, что вы делаете с ним после первого соединения?Правильно ли вы закрываете его (ВКЛЮЧАЯ все ресурсы, которые вы открывали с ним, например, Statement и ResultSet)?

Во-вторых, сколько соединений ваша БД позволяет вам использовать для входа в систему с учетными данными, которые вы вошли?

Причина, по которой я задаю эти вопросы, заключается в том, что временные задержки могут быть равны количеству времени, необходимого для очистки БД после вас (потому что вы, возможно, не сделали это правильно) и освобождения соединения, чтобы дать вам.Во многом это может быть просто тайм-аутом, прежде чем он принудительно освободит ресурсы.

1 голос
/ 31 марта 2011

Превышен ли ваш максимальный уровень активных соединений в вашем пуле соединений, и вам нужно подождать, пока ваша программа освободит старые соединения?

...