Сквозные метрики Oracle с Jooq

Я работаю над пакетным приложением, в котором слои DAO используют jooq для взаимодействия с базой данных оракула. Я настроил setClientInfo на соединение с оракулом со всеми необходимыми ключами OCSID. Я использую класс-оболочку, который расширяет DelegatingDataSource для динамического изменения модуля, действия, ecid и client_id на разных этапах пакетного приложения, например, я устанавливаю action в качестве имени текущего шага и module в качестве имени текущего задания и так далее. Я также установил action с именами процедур.

Я хочу отслеживать по этим показателям, какая работа/шаг/процедура имеет проблемы с производительностью. Я заметил, что во время работы пакетного приложения некоторые показатели сохраняются в таблице v$session. После завершения пакетного приложения я вижу только некоторые записи в V$ACTIVE_SESSION_HISTORY. Я также пытался заставить процедуры спать более 2 минут, используя APEX_UTIL.PAUSE(120), но я не могу найти все записи в таблице V$ACTIVE_SESSION_HISTORY после запуска пакетного приложения. Даже если во время запуска пакетного приложения было более 10–15 вызовов БД, я могу увидеть только 3–4 записи в V$ACTIVE_SESSION_HISTORY. Как эти метрики сохраняются в V$ACTIVE_SESSION_HISTORY? Как я могу отслеживать производительность по отношению к заданию/шагу/процедуре, используемой в пакетном приложении?


person Rohit    schedule 16.09.2020    source источник


Ответы (2)


Если вы используете DataSource с DataSourceConnectionProvider jOOQ, jOOQ всегда будет вызывать Connection.close() в конце каждого оператора, что может, в зависимости от вашей конфигурации, вернуть соединение в пул и, возможно, освободить некоторые ресурсы. Если вы хотите, чтобы ваш сеанс длился дольше, убедитесь, что пул соединений не освобождает эти ресурсы, или даже передайте JDBC Connection в jOOQ вместо DataSource, в случае чего jOOQ не будет вызывать Connection.close(). Ты будешь.

Возможно, если вас устраивает выборка с более низкой точностью, вам может быть интереснее запрашивать DBA_HIST_ACTIVE_SESS_HISTORY, см.: https://oracle-base.com/articles/10g/active-session-history

person Lukas Eder    schedule 17.09.2020
comment
Привет Лукас, спасибо за информацию. Но я до сих пор не понимаю, как образцы собираются каждую секунду и сохраняются в представлении V$ACTIVE_SESSION_HISTORY. Рассмотрим пример: у меня есть пакетное приложение, которое работает около 5 минут и за это время делает около 10 уникальных вызовов БД. Я предполагаю, что после запуска пакета я смогу найти все 10 образцов, собранных либо в V$ACTIVE_SESSION_HISTORY, либо в DBA_HIST_ACTIVE_SESS_HISTORY? но я могу видеть только некоторые образцы, но не все. - person Rohit; 17.09.2020

Я решил это, удалив APEX_UTIL.PAUSE. После прохождения этого https://jonathanlewis.wordpress.com/2015/03/27/ash/ я понял, что если сеанс переходит в спящий режим, он появится в v$session как статус = 'ACTIVE' и состояние = 'WAITING', но он не будет записан в v$active_session_history.

person Rohit    schedule 17.09.2020