2008-09-29 2 views
65

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

+33

Почему вы приняли неправильный ответ? Объясните, что план не делает то, что делает профайлер. Это совершенно не связано. – Jasmine 2013-05-07 20:46:04

+1

Вы нашли лучший инструмент, например, `sql server profiler`? что вы используете сейчас? – 2015-09-18 09:43:55

+0

Я написал книгу о трассировке приложений Oracle. Он доступен в формате PDF по адресу http://method-r.com. – 2016-02-11 16:26:21

ответ

1

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

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

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

explain plan for <sql query> 

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

0

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

link

19

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

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

Перейти к Instance -> сессий и смотреть SQL Tab каждой сессии.

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

И, конечно, вы можете также использовать Объяснить ПЛАН, инструмент трассировки и тонны других способов инструментализации. В менеджере предприятия есть несколько отчетов для самых дорогостоящих SQL-запросов. Вы также можете искать последние запросы, хранящиеся в кеше.

5

попробовать это (также бесплатно): http://www.aboves.com/Statement_Tracer_for_Oracle.exe

+5

Я попытался использовать это программное обеспечение, но я не видел способа настройки строки подключения. Может ли кто-нибудь помочь? – 2014-02-21 15:33:13

+0

Удивительный! Работает красиво ... но насколько я могу сказать только на локальном хосте базы данных. – vmassuchetto 2014-09-22 15:58:46

+6

Это ссылка на исполняемый файл - очень нет, нет! – 2015-08-24 22:35:36

3

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

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

4

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

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

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

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

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

1

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

2

Улов Захват все 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 
/
13
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... 

--Вы может начать трассировку с 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 = истинные 4 - значения переменных связывания добавляется файл трассировки - ожидания добавляются 12 - как связать значения переменных и ждать событий добавляются */

--same, если вы хотите, чтобы проследить собственный сеанс с большим уровнем:

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

--turn от:

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

--file с необработанной информации трассировки будет находиться:

(. * TRC)
select value from v$parameter p 
where name='user_dump_dest' 

--name файла будет содержать спид:

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> 

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

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 Оригинал полнее, но в любом случае это лучше, чем то, что другие размещены ИМХО

13

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

Step1. подключиться к БД с пользователем администратора, используя 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 и порядке его без использования определенного инструмента.

4

GI Oracle Profiler v1.2

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

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

0

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

Следующая статья описывает несколько. Есть, вероятно, еще десятки ... http://www.petefinnigan.com/ramblings/how_to_set_trace.htm