Я работаю с сервером sql, но я должен перейти к приложению с Oracle DB. для отслеживания моих запросов приложений, в Sql Server я использую замечательный инструмент Profiler. есть ли что-то эквивалентное для Oracle?
Oracle: есть ли инструмент для отслеживания запросов, например Profiler for sql server?
Ответ 1
Вы можете использовать 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-запросов. Вы также можете искать последние запросы, хранящиеся в кеше.
Ответ 2
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'
- Узнайте, сколько сид и серийный номер сессии вам интересны:
select sid, serial# from v$session
where ...your_search_params...
--you может начать трассировку с событием 10046, четвертый параметр устанавливает уровень трассировки (12 - самый большой):
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
end;
--turn отключить трассировку с нулевым уровнем установки:
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;
/* возможные уровни: 0 - выключено 1 - минимальный уровень. Подобно набору sql_trace = true 4 - значения переменных привязки добавляются в файл трассировки 8 - добавляются ожидания 12 - добавляются значения привязки переменных и события ожидания */
--same, если вы хотите трассировать свою сессию с большим уровнем:
alter session set events '10046 trace name context forever, level 12';
--turn выключен:
alter session set events '10046 trace name context off';
--file с необработанной информацией о трассировке:
select value from v$parameter p
where name='user_dump_dest'
--name файла (*. Trc) будет содержать spid:
select p.spid from v$session s, v$process p
where s.paddr=p.addr
and ...your_search_params...
--also вы можете установить имя самостоятельно:
alter session set tracefile_identifier='UniqueString';
--finally, используйте 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>
--to посмотреть состояние использования файла трассировки:
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 Оригинал более полный, но в любом случае это лучше, чем другие, опубликованные IMHO
Ответ 3
Я нашел простое решение
Шаг1. подключиться к БД с помощью пользователя-администратора, используя PLSQL или sqldeveloper или любой другой интерфейс запросов
Step2. запустите script ниже; в столбце 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 и его порядок, не используя какой-либо конкретный инструмент.
Ответ 4
Видя, как я только что проголосовал за недавний вопрос как дубликат и указал в этом направлении.,.
Еще пара - в SQL * Plus - SET AUTOTRACE ON - предоставит план объяснения и статистику для каждого выполненного оператора.
TOAD также позволяет профилировать на стороне клиента.
Недостатком обоих из них является то, что они только сообщают вам план выполнения для оператора, но не то, как оптимизатор пришел к этому плану - для этого вам понадобится трассировка на стороне сервера более низкого уровня.
Еще один важный для понимания - моментальные снимки Statspack - это хороший способ взглянуть на производительность базы данных в целом. Объясните план и т.д., Хорошо разбираются в отдельных операторах SQL, которые являются узкими местами. Statspack хорошо идентифицирует тот факт, что ваша проблема заключается в том, что простое выражение с хорошим планом выполнения называется 1 миллион раз в минуту.
Ответ 5
Это инструмент для Oracle для захвата запросов, выполненных аналогично SQL Server Profiler. Незаменимый инструмент для обслуживания приложений, использующих этот сервер базы данных.
вы можете скачать его с официального сайта iacosoft.com
Ответ 6
попробуйте это (он также бесплатный): http://www.aboves.com/Statement_Tracer_for_Oracle.exe
Ответ 7
Попробуйте PL/SQL Developer, он имеет удобный пользовательский интерфейс GUI для профилировщика. Это довольно приятно дать пробную попытку. Клянусь этим инструментом при работе с базами данных Oracle.
http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw
Ответ 8
Catch - это захват всех SQL-операций между двумя моментами времени. Как и SQL Server.
Бывают ситуации, когда полезно захватить SQL, который конкретный пользователь запускает в базе данных. Обычно вы просто включаете трассировку сеанса для этого пользователя, но есть две потенциальные проблемы с этим подходом.
- Во-первых, многие веб-приложения поддерживают пул постоянных подключений к базе данных, которые совместно используются несколькими пользователями.
- Во-вторых, некоторые приложения подключаются, запускают некоторый 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 break on 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
/
Ответ 9
Oracle вместе с другими базами данных анализирует данный запрос для создания плана выполнения. Этот план является наиболее эффективным способом получения данных.
Oracle предоставляет оператор explain plan
, который анализирует запрос, но не запускает его, вместо этого заполняет специальную таблицу, которую вы можете запросить (таблица плана).
Синтаксис (простая версия, есть другие параметры, такие как отметка строк в таблице плана со специальным идентификатором или использование другой таблицы планов):
explain plan for <sql query>
Анализ этих данных оставлен для другого вопроса или ваших дальнейших исследований.
Ответ 10
Существует коммерческий инструмент FlexTracer, который может использоваться для отслеживания запросов Oracle SQL
Ответ 11
Это документ Oracle, объясняющий, как отслеживать SQL-запросы, в том числе несколько инструментов (SQL Trace и tkprof)
Ответ 12
По-видимому, нет простой простой дешевой утилиты, которая помогла бы выполнить эту задачу. Однако существует 101 способ сделать это сложным и неудобным образом.
В следующей статье описывается несколько. Есть, вероятно, еще десятки... http://www.petefinnigan.com/ramblings/how_to_set_trace.htm