powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Мониторинг долгоиграющих запросов в Oracle SE
15 сообщений из 15, страница 1 из 1
Мониторинг долгоиграющих запросов в Oracle SE
    #39314271
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вдруг кому-то пригодится. Если есть запрос с объемными чтениями (например, FULL SCAN или HASH JOIN, которые длятся более 6 сек или сканируют более 10000 блоков), можно использовать скриптик, который выводит план текущего запроса в заданной сессии и время выполнения по v$session_longops. Можно мониторить. Наверное, скрипт можно улучшить, но вот основа:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with 
  q_sess as (select sql_id, sql_child_number, s.sql_exec_id, s.sid 
               from v$session s where sid = 803/*SID*/),
  q_plan as (select rownum rn, q.id, lpad(' ',level *2,' ')||q.oper as operation, q.object_name, q.cardinality, q.bytes, q.cost 
               from (select id, parent_id, operation||' '||options oper, object_name, cardinality, bytes, cost  
                       from v$sql_plan p 
                      where (p.sql_id, p.child_number) 
                         in (select sql_id, sql_child_number from q_sess)
                    ) q
            connect by prior q.id = q.parent_id
              start with q.id = 0)              
select q_plan.*, to_char(lo.sofar/lo.totalwork*100,'990') pct, lo.elapsed_seconds, lo.time_remaining 
  from q_plan
     , q_sess
     , v$session_longops lo 
  where lo.sid(+) = q_sess.sid
    and lo.sql_plan_line_id(+) = q_plan.id
    and lo.sql_exec_id(+) = q_sess.sql_exec_id 
  order by rn;


Нужно задать SID интересующей сессии, где работает долгоиграющий запрос.
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39314284
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По модулю, action, терминалу и т.п. искать сессии все-таки удобнее, особенно если заранее не озаботился SID-ом.
...и это... connect by, конечно, круто, но разве plan_line_id на SE отменили, как v$sql_plan_monitor и %HIST%?
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39314319
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У нас сейчас SE2 даже, а не SE, т.е. самая простенькая версия.

v$sql_plan_monitor - у нас там пусто
%HIST% - тоже пустые (AWR и ASH в SE не входят)
plan_line_id - это в v$sql_plan_monitor

Ну а так - если есть идеи, можно доработать...
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39314505
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.plan_line_id - это в v$sql_plan_monitor
Ну да.
Зато в v$sql_plan есть ID.
Посмотрел сейчас в боевой - нашел план на 927 (sic!) шагов.
Вполне адекватно сортируется по id, для красивого форматирования есть поля depth и position.
v$sql_plan
дока на v$sql_planID NUMBER A number assigned to each step in the execution plan
PARENT_ID NUMBER ID of the next execution step that operates on the output of the current step
DEPTH NUMBER Depth (or level) of the operation in the tree. It is not necessary to issue a CONNECT BY statement to get the level information, which is generally used to indent the rows from the PLAN_TABLE table. The root operation (statement) is level 0.
POSITION NUMBER Order of processing for all operations that have the same PARENT_ID
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39314553
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно, запрос стал проще.
Спасибо за конструктивные замечания!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
with 
  q_sess as (select sql_id, sql_child_number, s.sql_exec_id, s.sid 
               from v$session s where sid = 32/*SID*/),
  q_plan as (select id, lpad(' ',depth *2,' ')||operation||' '||options operation, object_name, cardinality, bytes, cost  
               from v$sql_plan p 
              where (p.sql_id, p.child_number) in (select sql_id, sql_child_number from q_sess)                     
            )              
select q_plan.*, round(lo.sofar/lo.totalwork*100) pct, lo.elapsed_seconds, lo.time_remaining 
  from q_plan
     , q_sess
     , v$session_longops lo 
 where lo.sid(+) = q_sess.sid
   and lo.sql_plan_line_id(+) = q_plan.id
   and lo.sql_exec_id(+) = q_sess.sql_exec_id 
 order by id;
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39314618
Фотография kinky cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.,

DBMS_SQLTUNE.report_sql_monitor тоже что ли нет ?
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39314621
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kinky catДеев И.,

DBMS_SQLTUNE.report_sql_monitor тоже что ли нет ?В SE нет.

С другой стороны не совсем понятно какие цели преследует автор при мониторинге.
Часто для анализа перфоманса пользуют произведение Подера Snapper .
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39314823
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Цели тут самые простые. Например, если у вас появился какой-то новый отчет, который перелопачивает довольно много данных, можно понаблюдать онлайн, как отрабатывает запрос. Как-то комфортнее, когда видишь, что происходит и сколько это может продлиться, хотя бы примерно.
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39337571
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упустил, что еще и по sql_id нужно добавить условие, т.к. sql_exec_id не является уникальным

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with
  q_sess as (select sql_id, sql_child_number, s.sql_exec_id, s.sid
               from v$session s where sid = 1303/*SID*/),
  q_plan as (select id, lpad(' ',depth * 2,' ')||operation||' '||options operation, object_name, cardinality, bytes, cost
               from v$sql_plan p
              where (p.sql_id, p.child_number) in (select sql_id, sql_child_number from q_sess)                   
            )            
select q_plan.*
     , round(lo.sofar/lo.totalwork*100) pct, lo.elapsed_seconds, lo.time_remaining
  from q_plan
     , q_sess
     , v$session_longops lo
 where lo.sid(+) = q_sess.sid
   and lo.sql_plan_line_id(+) = q_plan.id
   and lo.sql_exec_id(+) = q_sess.sql_exec_id
   and lo.sql_id(+) = q_sess.sql_id
 order by id;
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39337683
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.
Код: plsql
1.
2.
   and lo.sql_plan_line_id(+) = q_plan.id
   and lo.sql_exec_id(+) = q_sess.sql_exec_id 

Требует 12c.
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39337700
client_info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Деев И.Цели тут самые простые. Например, если у вас появился какой-то новый отчет, который перелопачивает довольно много данных, можно понаблюдать онлайн, как отрабатывает запрос. Как-то комфортнее, когда видишь, что происходит и сколько это может продлиться, хотя бы примерно.Я для комфортного наблюдения за тем, что происходит set_client_info вызываю. Это и юзерфрендли мониторинг и зверей убивать не надо (с) ((:.
LongOps, конечно, тоже юзаю.
Но делаю это сразу по нескольким сессиям, т.к. много чего в параллели считается.
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39351369
blackmac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.,

Илья, послал контакты Алексея.
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39351811
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicДеев И.
Код: plsql
1.
2.
   and lo.sql_plan_line_id(+) = q_plan.id
   and lo.sql_exec_id(+) = q_sess.sql_exec_id 

Требует 12c.Поскольку ТС работает на SE2, версия его СУБД не ниже 12.1.0.2.

Но на 11g более ранних версиях будет тут ошибка. Это да.
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39351816
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Деев И.У нас сейчас SE2 даже, а не SE, т.е. самая простенькая версия.SE2 - это не "самая простенькая версия",
а самая современная стандартная редакция.
Начиная с 12.1.0.2 она пришла на смену SE1 и SE.
То есть последняя версия SE1 и SE - это 12.1.0.1
...
Рейтинг: 0 / 0
Мониторинг долгоиграющих запросов в Oracle SE
    #39357784
Деев И.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, неверно выразился. Имел в виду, что это самая ограниченная по используемым процессорным ресурсам версия (2 процессора по 10 ядер, если не ошибаюсь). Хотя по функционалу - даже шире, так как RAC в SE2 доступен по лицензии даже на двух процессорах (В SE1 был вообще недоступен).
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Мониторинг долгоиграющих запросов в Oracle SE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]