Топ-100
 
CerebroSQL

Менеджер сессий СУБД Oracle

Менеджер сессий позволяет отслеживать работу процессов в базе данных Oracle. Управлять сессиями, включать/выключать трассировку сессий и многое другое

list session
 

Кнопки управления

Oracle session manager - menu button

  • Обновить данные

  • Открыть редактор запросов

  • Открыть менеджер активных сессий

  • Завершить выделенную сессию (выполняется завершение сессии с ключом immediate)

  • Включить трассировку выделенной сессии

  • Завершить трассировку выделенной в окне "Eracing is enabled for" сессии (сессия должна быть выделена именно в списке "Eracing is enabled for")

  • Включить автоматическое обновление данных каждые 5 секунд.

 

Вкладка "Session"

Oracle session manager

 

Список сессий

select s.SID,
       s.SERIAL#,
       s.SCHEMANAME,
       s.STATUS,

       s.EVENT,
       s.SQL_ID,
       s.OSUSER,
       s.MACHINE,
       s.MODULE,
       s.SERVER,
       s.PORT,
       s.LOGON_TIME,
       s.TERMINAL,
       s.PROGRAM,
       s.TYPE,
       s.SQL_HASH_VALUE,
       s.SQL_EXEC_START,
       s.ACTION,
       s.BLOCKING_INSTANCE,
       s.BLOCKING_SESSION_STATUS,
       s.BLOCKING_SESSION,
       s.FINAL_BLOCKING_SESSION_STATUS,
       s.FINAL_BLOCKING_SESSION,
       s.CLIENT_INFO,
       s.ROW_WAIT_ROW#,
       s.ROW_WAIT_BLOCK#,
       s.ROW_WAIT_OBJ#,
       s.ROW_WAIT_FILE#,
       s.PLSQL_SUBPROGRAM_ID,
       s.PLSQL_ENTRY_OBJECT_ID,
       s.PLSQL_ENTRY_SUBPROGRAM_ID,
       s.PLSQL_DEBUGGER_CONNECTED,
       s.PLSQL_OBJECT_ID,
       s.RESOURCE_CONSUMER_GROUP
  from v$session s

 

Запрос может быть изменен в редакторе "Program SQL"

Для корректной работы всех вкладок менеджера необходимо наличие в запросах следующих полей:

  • SID

  • SERIAL#

  • EVENT

  • SQL_ID

Остальные поля могут быть изменены.

 

Просмотр описания ожидания сессии

  • Выделить сессию в списке сессий.

  • В контекстном меню выбрать "Show event description"

Oracle session manager - event description
 

Вкладка "Parallel session"

Отображает список сессий выполняющих запросы параллельно в несколько потоков

Oracle session manager - parallel sessions

Список сессий выполняющих параллельные вычисления

SELECT DECODE(px.qcinst_id, NULL, username, ' - '||
           LOWER(SUBSTR(pp.SERVER_NAME, LENGTH(pp.SERVER_NAME)-4,4))) "Username",
       s.sql_id, 
       DECODE(px.qcinst_id,NULL, 'QC', '(Slave)') "QC/Slave",       
       TO_CHAR(px.server_set) "SlaveSet", 
       s.program, 
       TO_CHAR(s.SID) "SID", 
       s.Serial#,       
       TO_CHAR(px.inst_id) "Slave INST", 
       DECODE(sw.state,'WAITING', 'WAIT', 'NOT WAIT' ) AS STATE,       
       CASE  sw.state 
          WHEN 'WAITING' THEN SUBSTR(sw.event,1,30) 
          ELSE NULL 
       END AS wait_event,           
       DECODE(px.qcinst_id, NULL, TO_CHAR(s.SID), px.qcsid) "QC SID",       
       TO_CHAR(px.qcinst_id) "QC INST",       
       DECODE(px.server_set,'',s.last_call_et,'') "Elapsed (s)"  
  FROM gv$px_session px, 
       gv$session s, 
       gv$px_process pp, 
       gv$session_wait sw
WHERE px.SID=s.SID(+)   
   AND px.serial#=s.serial#(+)   
   AND px.inst_id = s.inst_id(+)   
   AND px.SID = pp.SID(+)   
   AND px.serial#=pp.serial#(+)   
   AND sw.SID = s.SID   
   AND sw.inst_id = s.inst_id
ORDER BY username, DECODE(px.QCINST_ID,  NULL, px.INST_ID,  px.QCINST_ID), 
  px.QCSID,  DECODE(px.SERVER_GROUP, NULL, 0, px.SERVER_GROUP), px.SERVER_SET, px.INST_ID

 

Системная статистика по выполнению параллельных процессов

SELECT substr(NAME, 21,length(name)) "name", 
       VALUE,       
       ROUND((RATIO_TO_REPORT(VALUE) OVER ())*100, 2) || '%' PERC
 FROM V$SYSSTAT 
WHERE NAME LIKE 'Parallel%' 
ORDER BY NAME DESC

Вкладка "Blocking tree"

 

Отображает в виде дерева сессии ожидающие освобождения "ресурса". Корневой узел в дереве - сессия удерживающая блокировку

Oracle session manager - blocking tree

Построение дерева

with
LOCKS as (select /*+ MATERIALIZE*/   * from gv$lock),
S     as (select /*+ MATERIALIZE*/ s.* from gv$session s),
BLOCKERS as (select distinct L1.inst_id, L1.sid
               from LOCKS L1, LOCKS L2
              where L1.block > 0