Oracle неактивный сеанс с блокировкой базы данных - PullRequest
0 голосов
/ 06 ноября 2018

В нашем дампе потока приложения я вижу нижеприведенный работающий поток, в то время как в Oracle DB DBA обнаруживает, что сеанс неактивен, который удерживает блокировку. В каком сценарии сеанс оракула становится неактивным при блокировке таблицы? Это вызывает блокировку в дБ.

ajp-nio-8009-exec-37 "prio = 5 tid = 0x175 nid = 0xaf RUNNABLE (собственный код JNI) - статистика: cpu = 122796 blk = -1 wait = -1 java.lang.Thread.State: RUNNABLE на java.net.SocketInputStream.socketRead0 (собственный метод) на java.net.SocketInputStream.socketRead (SocketInputStream.java:116) на java.net.SocketInputStream.read (SocketInputStream.java:171) на java.net.reambox читать (SocketInputStream.java:141) на oracle.net.ns.Packet.receive (Packet.java:311) на oracle.net.ns.DataPacket.receive (DataPacket.java:105) на oracle.net.ns.NetInputStream .getNextPacket (NetInputStream.java:305) в oracle.net.ns.NetInputStream.read (NetInputStream.java:249) в oracle.net.ns.NetInputStream.read (NetInputStream.java:171) в oracle.net.ns. NetInputStream.read (NetInputStream.java:89) по адресу oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket (T4CSocketInputStreamWrapper.java:123) по адресу oracle.jdbc.driver.T4CSocketInputStreamDava.raj .T4CMAREngineStream.u nmarshalUB1 (T4CMAREngineStream.java:429) в oracle.jdbc.driver.T4CTTIfun.receive (T4CTTIfun.java:397) в oracle.jdbc.driver.T4CTTIfun.doRPC (T4CTTIfun.javadj.d.T.T. .doOALL (T4C8Oall.java:587) в oracle.jdbc.driver.T4CPreparedStatement.doOall8 (T4CPreparedStatement.java:225) в oracle.jdbc.driver.T4CPreparedStatement.doOall8 (T4CPrejririj T4CPreparedStatement.executeForRows (T4CPreparedStatement.java:943) в oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout (OracleStatement.java:1150) в oracle.jdbc.driver.OraclePreparedSverj.jp.jp.jp .OraclePreparedStatement.executeUpdate (OraclePreparedStatement.java:4875) - заблокировано oracle.jdbc.driver.T4CConnection@2ff33c0b

1 Ответ

0 голосов
/ 06 ноября 2018

Если вы используете oracle, вы должны принудительно установить максимальное время жизни для своих соединений, чтобы оно не возвращалось в пул соединений и не создавало утечку, как вы заметили

по умолчанию Oracle не устанавливает максимальное время жизни для соединений

Если вы используете HikariCP, установите maxLifetime свойства:

maxLifetime Это свойство контролирует максимальное время жизни соединения в пуле. Используемое соединение никогда не будет удалено, только когда оно закрыто, оно будет затем удалено. Для каждого отдельного соединения применяется небольшое отрицательное затухание, чтобы избежать массового вымирания в пуле. Мы настоятельно рекомендуем установить это значение, и оно должно быть на несколько секунд короче, чем ограничение времени соединения для любой базы данных или инфраструктуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...