Oracle: есть ли инструмент для отслеживания запросов, например Profiler для сервера sql?

Я работаю с сервером sql, но мне нужно перейти на приложение с Oracle DB. для отслеживания запросов моего приложения в Sql Server я использую замечательный инструмент Profiler. есть ли что-то эквивалентное для Oracle?


person stefano m    schedule 29.09.2008    source источник
comment
Почему вы приняли неправильный ответ? Объясните, что план НЕ делает то, что делает профайлер. Это совершенно не связано.   -  person Jasmine    schedule 08.05.2013
comment
Вы нашли лучший инструмент, такой как sql server profiler ? что вы используете сейчас?   -  person Shahid Ghafoor    schedule 18.09.2015
comment
Я написал книгу о трассировке приложений Oracle. Он доступен в формате PDF по адресу method-r.com.   -  person Cary Millsap    schedule 11.02.2016
comment
Пожалуйста, ознакомьтесь с профилировщиком oracle в dbForge Studio. для Oracle от Devart.   -  person Devart    schedule 30.07.2018
comment
Ниже приведено множество ответов, но, как ни странно, никто не упомянул ни один из двух профилировщиков Oracle для PL/SQL: DBMS_PROFILER (базовый и ограниченный, но очень удобный) или DBMS_HPROF (точнее, но требует дополнительной настройки). Однако я не знаю SQL Server, поэтому, возможно, у него другая концепция профилирования, чем у любого из пакетов Oracle, и то, что вы хотите, больше похоже на трассировку в Oracle.   -  person William Robertson    schedule 26.07.2020


Ответы (11)


Вы можете использовать Oracle Enterprise Manager для мониторинга активных сеансов с выполняемым запросом, планом его выполнения, блокировками, некоторой статистикой и даже индикатором выполнения для более длинных задач.

См.: http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955

Перейдите в Экземпляр -> сеансы и просмотрите вкладку SQL для каждого сеанса.

Есть и другие способы. Enterprise Manager просто выделяет красивыми цветами то, что уже доступно в специальных представлениях, подобных описанным здесь: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage

И, конечно же, вы также можете использовать инструмент «Объяснение PLAN FOR», TRACE и множество других способов инструментализации. В менеджере предприятия есть несколько отчетов для самых дорогих SQL-запросов. Вы также можете искать последние запросы, хранящиеся в кеше.

person borjab    schedule 29.09.2008

Я нашел простое решение

Шаг 1. подключиться к БД с пользователем-администратором, используя PLSQL или sqldeveloper или любой другой интерфейс запросов

Шаг 2. запустите скрипт ниже; в столбце S.SQL_TEXT вы увидите выполненные запросы

SELECT            
 S.LAST_ACTIVE_TIME,     
 S.MODULE,
 S.SQL_FULLTEXT, 
 S.SQL_PROFILE,
 S.EXECUTIONS,
 S.LAST_LOAD_TIME,
 S.PARSING_USER_ID,
 S.SERVICE                                                                       
FROM
 SYS.V_$SQL S, 
 SYS.ALL_USERS U
WHERE
 S.PARSING_USER_ID=U.USER_ID 
 AND UPPER(U.USERNAME) IN ('oracle user name here')   
ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc;

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

person sergiu    schedule 02.06.2014
comment
Вы можете добавить S.SQL_FULLTEXT, если текст запроса превышает 1000 символов, так как SQL_TEXT обрезается в этой точке. - person Tridus; 12.09.2016
comment
Вы не должны заказывать до LAST_ACTIVE_TIME, потому что это VARCHAR2(19). Вместо этого используйте это: ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc - person Igor Krupitsky; 15.02.2017
comment
ORA-00942: таблица или представление не существуют 00942. 00000 - таблица или представление не существуют *Причина: *Действие: Ошибка в строке: 11 Столбец: 6 Это означает, что у меня нет прав администратора? - person toha; 10.01.2019
comment
Это не включает значения параметров. если вы тоже хотите это сделать, взгляните на: stackoverflow.com/a/14217618/6339469 - person HamedH; 13.08.2020

alter system set timed_statistics=true

--or

alter session set timed_statistics=true --if want to trace your own session

-- должен быть достаточно большим:

select value from v$parameter p
where name='max_dump_file_size' 

-- Узнайте sid и серийный номер интересующей вас сессии:

 select sid, serial# from v$session
 where ...your_search_params...

--вы можете начать трассировку с события 10046, четвертый параметр задает уровень трассировки (12 самый большой):

 begin
    sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
 end;

--отключить трассировку с установкой нулевого уровня:

begin
   sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;

/*возможные уровни: 0 - выключено 1 - минимальный уровень. Аналогично set sql_trace=true 4 — значения переменных связывания добавляются в файл трассировки 8 — добавляются ожидания 12 — добавляются как значения переменных связывания, так и события ожидания */

--same, если вы хотите отслеживать свою сессию на более высоком уровне:

alter session set events '10046 trace name context forever, level 12';

--выключи:

alter session set events '10046 trace name context off';

--file с необработанной информацией о трассировке будет расположен:

 select value from v$parameter p
 where name='user_dump_dest'

--имя файла (*.trc) будет содержать spid:

 select p.spid from v$session s, v$process p
 where s.paddr=p.addr
 and ...your_search_params...

--также вы можете установить имя самостоятельно:

alter session set tracefile_identifier='UniqueString'; 

--наконец, используйте TKPROF, чтобы сделать файл трассировки более читаемым:

C:\ORACLE\admin\databaseSID\udump>
C:\ORACLE\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf
TKPROF: Release 9.2.0.1.0 - Production on Wed Sep 22 18:05:00 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
C:\ORACLE\admin\databaseSID\udump>

--для просмотра состояния использования файла трассировки:

set serveroutput on size 30000;
declare
  ALevel binary_integer;
begin
  SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel);
  if ALevel = 0 then
    DBMS_OUTPUT.Put_Line('sql_trace is off');
  else
    DBMS_OUTPUT.Put_Line('sql_trace is on');
  end if;
end;
/

Просто вроде переведено http://www.sql.ru/faq/faq_topic.aspx?fid=389 Оригинал полнее, но в любом случае это лучше, чем то, что выложили другие ИМХО

person q3kep    schedule 11.04.2014
comment
Гораздо полезнее, чем другие ответы! - person Andomar; 10.06.2015
comment
Слишком сложно. Никто не собирается его использовать. - person ADM-IT; 09.06.2020

GI Oracle Profiler v1.2

Это инструменты для Oracle для захвата запросов, выполняемых аналогично профилировщику SQL Server. Незаменимый инструмент для обслуживания приложений, использующих этот сервер базы данных.

скачать его можно с официального сайта iacosoft.com

person pio    schedule 01.07.2014
comment
Здравствуйте, вам нужна специальная лицензия от ORACLE для использования этого программного обеспечения? Я знаю, что Oracle позволяет вам опрашивать определенные таблицы/представления, и если вы делаете это и у вас нет на это лицензии, они взимают с вас дополнительную плату. - person sergiu; 23.07.2014
comment
Привет, вы должны заплатить, чтобы запросить v$sqlarea? Я могу ввести ссылку, которая говорит, что? - person pio; 15.08.2014
comment
отлично спасибо мужик!!! Вы экономите мне много работы - person Hernaldo Gonzalez; 18.06.2015
comment
Если мой запрос завершается ошибкой, он не отображается профилировщиком. - person ADM-IT; 09.06.2020

Попробуйте PL/SQL Developer, у него удобный графический интерфейс для профилировщика. Очень приятно попробовать пробную версию. Я клянусь этим инструментом при работе с базами данных Oracle.

http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw

person Kuberchaun    schedule 29.10.2009

Поскольку я только что проголосовал за недавний вопрос как за дубликат и указал в этом направлении. . .

Еще пара - в SQL * Plus - SET AUTOTRACE ON - даст план объяснения и статистику для каждого выполненного оператора.

TOAD также позволяет выполнять профилирование на стороне клиента.

Недостатком обоих из них является то, что они сообщают вам только план выполнения оператора, но не то, как оптимизатор пришел к этому плану - для этого вам потребуется трассировка на стороне сервера более низкого уровня.

Еще один важный момент — это моментальные снимки Statspack — это хороший способ взглянуть на производительность базы данных в целом. Объясните план и т. д., хорошо находят отдельные операторы SQL, которые являются узкими местами. Statspack хорошо определяет тот факт, что ваша проблема заключается в том, что простой оператор с хорошим планом выполнения вызывается 1 миллион раз в минуту.

person JulesLt    schedule 14.09.2010

Уловка — это захват всех SQL-запусков между двумя моментами времени. Как и SQL Server.

Бывают ситуации, когда полезно зафиксировать SQL, который конкретный пользователь выполняет в базе данных. Обычно вы просто включаете трассировку сеанса для этого пользователя, но при таком подходе есть две потенциальные проблемы.

  1. Во-первых, многие веб-приложения поддерживают пул постоянных подключений к базе данных, которые совместно используются несколькими пользователями.
  2. Во-вторых, некоторые приложения очень быстро подключаются, запускают SQL-запросы и отключаются, что затрудняет включение трассировки сеансов вообще (в этом случае вы, конечно, можете использовать триггер входа в систему, чтобы включить трассировку сеансов).

Быстрое и грязное решение проблемы состоит в том, чтобы захватить все операторы SQL, которые выполняются между двумя моментами времени.

Следующая процедура создаст две таблицы, каждая из которых будет содержать моментальный снимок базы данных в определенной точке. Затем таблицы будут запрошены для получения списка всех SQL, запущенных за этот период.

Если возможно, вы должны делать это в тихой системе разработки, иначе вы рискуете получить обратно слишком много данных.

  1. Сделайте первый снимок. Запустите следующий sql, чтобы создать первый снимок:

    create table sql_exec_before as
    select executions,hash_value
    from v$sqlarea
    /
    
  2. Заставьте пользователя выполнять свою задачу в приложении.

  3. Сделайте второй снимок.

    create table sql_exec_after as
    select executions, hash_value
    from v$sqlarea
    /
    
  4. Проверка результатов Теперь, когда вы записали SQL, пришло время запросить результаты.

Этот первый запрос выведет список всех хэшей запросов, которые были выполнены:

select  aft.hash_value
from sql_exec_after aft
left outer join sql_exec_before bef
  on aft.hash_value  =  bef.hash_value 
where aft.executions > bef.executions
   or bef.executions is null;
/

Этот будет отображать хеш и сам SQL: установите страницы 999 строк 100 разбить на hash_value

select  hash_value, sql_text
from    v$sqltext
where   hash_value in (
    select  aft.hash_value
    from sql_exec_after aft
    left outer join sql_exec_before bef
      on aft.hash_value  =  bef.hash_value
    where aft.executions > bef.executions
       or bef.executions is null;
)
order by
    hash_value, piece
/

5. Приведение в порядок Не забудьте удалить таблицы моментальных снимков после того, как закончите:

drop table sql_exec_before
/

drop table sql_exec_after
/
person JaMeEL    schedule 13.03.2014
comment
Спасибо за полные сценарии, демонстрирующие технику. - person Roman Pokrovskij; 02.04.2014

Oracle, наряду с другими базами данных, анализирует заданный запрос для создания плана выполнения. Этот план является наиболее эффективным способом получения данных.

Oracle предоставляет оператор 'explain plan', который анализирует запрос, но не выполняет его, а вместо этого заполняет специальную таблицу, к которой вы можете запросить (таблицу плана).

Синтаксис (упрощенная версия, есть и другие варианты, такие как пометка строк в таблице плана специальным идентификатором или использование другой таблицы плана):

explain plan for <sql query>

Анализ этих данных оставлен для другого вопроса или вашего дальнейшего исследования.

person paxdiablo    schedule 29.09.2008

Существует коммерческий инструмент FlexTracer, который можно использовать для отслеживания запросов Oracle SQL.

person user449251    schedule 16.09.2010

Это документ Oracle, объясняющий, как отслеживать SQL-запросы, включая пару инструментов (SQL Trace и tkprof).

ссылка

person Code Trawler    schedule 29.09.2008

Судя по всему, нет маленькой простой дешевой утилиты, которая помогла бы выполнить эту задачу. Однако есть 101 способ сделать это сложным и неудобным способом.

Следующая статья описывает несколько. Наверняка есть еще десятки...

person Nikola Radosavljević    schedule 22.04.2015