Oracle IDLE сессии - PullRequest
       33

Oracle IDLE сессии

0 голосов
/ 08 октября 2018

У нас проблема с соединениями, которые остаются бездействующими в 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.

Буду признателен за любую помощь

...