Oracle IDLE сессии
У нас проблема с соединениями, которые остаются бездействующими в Oracle. Чтобы дать вам некоторое представление, наши пользователи подключаются к Denodo, который, в свою очередь, имеет источник данных, который подключается к Oracle. Этот источник данных работает с одним именем пользователя и паролем и создает пул. Начальный размер пула равен 4, а максимальное количество активных подключений - 20.
Соединения начинают поступать от клиентов, использующих JDBC, ODBC и т. Д. Некоторые клиенты являются другими серверами, запрашивающими данные (Spotfire и BusinessObjects), а другие являются просто обычными пользователями, которые разработали сценарии на R, Python, C# и других. Они также могут подключаться с помощью таких инструментов, как DBeaver. У пользователя Oracle есть настройки для поддержки до 100 бездействующих соединений.
Теперь пользователи подключаются со своими сценариями, и у них есть код (который мы проверили), который открывает соединение с Denodo, получает данные посредством запроса, возвращает данные и закрывает соединение с Denodo. Denodo, в свою очередь, делает то же самое и открывает соединение с Oracle, передает запрос от клиента в Oracle, получает данные и передает их обратно клиенту. И это та часть, в которой мы не слишком уверены. Мы ожидали, что Denodo закроет соединение с Oracle, а это не так. Соединение остается открытым в Oracle и отображается как простое. В конце концов, у нас достаточно свободных соединений, чтобы заполнить квоту, установленную для пользователя (100).
Исходя из этого, мы выполнили некоторую настройку в Denodo с подключением к Oracle и применили следующие настройки для подключения:
FETCHSIZE = 10000
BATCHINSERTSIZE = 200
VALIDATIONQUERY = 'SELECT COUNT(*) FROM SYS.DUAL'
INITIALSIZE = 4 #initial size of pool
MAXIDLE = 25 #max number of idle connections
MINIDLE = 5 #min number of idle connections
MAXACTIVE = 20 #max active in the pool
EXHAUSTEDACTION = 1
TESTONBORROW = true
TESTONRETURN = false
TESTWHILEIDLE = false
TIMEBETWEENEVICTION = 300000 #time between evictions in milliseconds
NUMTESTPEREVICTION = 10 #10 connections to be evaluated for eviction
MINEVICTABLETIME = 900000 #min evictable time in milliseconds
POOLPREPAREDSTATEMENTS = false
MAXSLEEPINGPS = 4
INITIALCAPACITYPS = 8
После применения этой настройки мы подумали, что это очистит незанятые соединения. Проблема в том, что это не так. Вы можете видеть, что соединения начинают закрадываться, и в конечном итоге они снова заполняются и не допускают никаких других соединений.
Я хотел бы, чтобы Denodo открыл нужное соединение, использовал его и выпустил. Не поддерживать соединение в режиме ожидания в Oracle. Соединения с Oracle, похоже, никогда не выселяются, и в итоге они снова достигают 100.
Любая помощь будет оценена