Я работаю с sql server, но я должен перейти на приложение с Oracle DB. для отслеживания запросов к моим приложениям в Sql Server я использую замечательный инструмент Profiler. есть ли что-нибудь эквивалентное для Oracle?
sql-server
oracle
profiler
Стефано м
источник
источник
sql server profiler
? чем ты сейчас пользуешься?DBMS_PROFILER
(базовый и ограниченный, но супер-удобный) илиDBMS_HPROF
(более точный, но требует дополнительной настройки). Однако я не знаю SQL Server, поэтому, возможно, он имеет другую концепцию профилирования, чем любой из пакетов Oracle, и то, что вам нужно, больше похоже на трассировку в Oracle.Ответы:
Вы можете использовать Oracle Enterprise Manager для наблюдения за активными сеансами, с запросом, который выполняется, его планом выполнения, блокировками, некоторой статистикой и даже индикатором выполнения для более длительных задач.
См. Http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955
Перейдите в Экземпляр -> сеансы и посмотрите вкладку SQL каждого сеанса.
Есть и другие способы. Менеджер предприятия просто красит то, что уже доступно, в специальных представлениях, подобных тем, которые описаны здесь: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage
И, конечно, вы также можете использовать Explain PLAN FOR, инструмент TRACE и множество других способов инструментализации. В диспетчере предприятия есть несколько отчетов для самых дорогих SQL-запросов. Вы также можете искать последние запросы, хранящиеся в кеше.
источник
Я нашел простое решение
Шаг 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, и порядок их выполнения без использования специального инструмента.
источник
alter system set timed_statistics=true
--или же
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 - добавляются значения переменных связывания и события ожидания * /
- то же самое, если вы хотите отслеживать собственную сессию с большим уровнем:
alter session set events '10046 trace name context forever, level 12';
--выключи:
alter session set events '10046 trace name context off';
- файл с необработанной информацией трассировки будет расположен:
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 Оригинал полнее, но в любом случае это лучше, чем то, что опубликовали другие ИМХО
источник
GI Oracle Profiler v1.2
Это инструменты для Oracle для захвата запросов, выполняемых аналогично SQL Server Profiler. Незаменимый инструмент для обслуживания приложений, использующих этот сервер базы данных.
вы можете скачать его с официального сайта iacosoft.com
источник
Попробуйте PL / SQL Developer, он имеет удобный графический интерфейс для профилировщика. Довольно приятно попробовать. Я пользуюсь этим инструментом при работе с базами данных Oracle.
http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw
источник
Видя, как я только что проголосовал за недавний вопрос как дубликат и указал в этом направлении. . .
Еще пара - в SQL * Plus - SET AUTOTRACE ON - предоставит план объяснения и статистику для каждого выполненного оператора.
TOAD также позволяет профилировать на стороне клиента.
Недостатком обоих является то, что они сообщают вам только план выполнения для оператора, но не то, как оптимизатор пришел к этому плану - для этого вам понадобится трассировка на стороне сервера более низкого уровня.
Еще один важный момент, который необходимо понять, - это снимки состояния Statspack - они являются хорошим способом оценить производительность базы данных в целом. План объяснения и т. Д. Хороши для поиска отдельных операторов SQL, которые являются узкими местами. Statspack хорошо определяет тот факт, что ваша проблема заключается в том, что простой оператор с хорошим планом выполнения вызывается 1 миллион раз в минуту.
источник
Catch - это захват всех SQL-запросов между двумя точками времени. Как и SQL Server.
Бывают ситуации, когда полезно фиксировать SQL, который конкретный пользователь выполняет в базе данных. Обычно вы просто включаете трассировку сеанса для этого пользователя, но при таком подходе есть две потенциальные проблемы.
Быстрое и грязное решение проблемы - захват всех операторов SQL, выполняемых между двумя точками времени.
Следующая процедура создаст две таблицы, каждая из которых содержит моментальный снимок базы данных в определенной точке. Затем будет произведен запрос к таблицам для создания списка всех выполненных SQL за этот период.
Если возможно, вы должны делать это в системе, работающей без шума, иначе вы рискуете получить обратно слишком много данных.
Сделайте первый снимок Запустите следующий sql, чтобы создать первый снимок:
create table sql_exec_before as select executions,hash_value from v$sqlarea /
Заставьте пользователя выполнить свою задачу в приложении.
Сделайте второй снимок.
create table sql_exec_after as select executions, hash_value from v$sqlarea /
Проверьте результаты. Теперь, когда вы захватили 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 /
источник
Oracle вместе с другими базами данных анализирует данный запрос, чтобы создать план выполнения. Этот план - наиболее эффективный способ получения данных.
Oracle предоставляет '
explain plan
оператор ', который анализирует запрос, но не выполняет его, вместо этого заполняет специальную таблицу, которую вы можете запросить (таблица плана).Синтаксис (простая версия, есть и другие варианты, например, пометить строки в таблице плана специальным идентификатором или использовать другую таблицу плана):
explain plan for <sql query>
Анализ этих данных остается для другого вопроса или вашего дальнейшего исследования.
источник
Существует коммерческий инструмент FlexTracer, который можно использовать для отслеживания запросов Oracle SQL.
источник
Это документ Oracle, объясняющий, как отслеживать запросы SQL, включая несколько инструментов (SQL Trace и tkprof).
ссылка
источник
Судя по всему, нет небольшой простой дешевой утилиты, которая помогла бы выполнить эту задачу. Однако есть 101 способ сделать это сложным и неудобным способом.
В следующей статье описано несколько. Наверное, их еще десятки ... http://www.petefinnigan.com/ramblings/how_to_set_trace.htm
источник