eu trabalho com sql server, mas devo migrar para um aplicativo com banco de dados Oracle. para rastrear minhas consultas de aplicativos, no Sql Server eu uso a ferramenta Profiler maravilhosa. existe algo equivalente para Oracle?
sql-server
oracle
profiler
Stefano m
fonte
fonte
sql server profiler
? O que você está usando agora?DBMS_PROFILER
(básico e limitado, mas superconveniente) ouDBMS_HPROF
(mais preciso, mas requer mais configuração). No entanto, não conheço o SQL Server, então é possível que ele tenha um conceito diferente de criação de perfil do que qualquer um dos pacotes Oracle e o que você quer é mais parecido com rastreamento no Oracle.Respostas:
Você pode usar o Oracle Enterprise Manager para monitorar as sessões ativas, com a consulta que está sendo executada, seu plano de execução, bloqueios, algumas estatísticas e até uma barra de progresso para as tarefas mais longas.
Consulte: http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955
Vá para Instância -> sessões e observe a guia SQL de cada sessão.
Existem outras maneiras. O gerenciador empresarial apenas coloca com cores bonitas o que já está disponível em visualizações especiais como as documentadas aqui: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage
E, claro, você também pode usar a ferramenta Explain PLAN FOR, TRACE e muitas outras formas de instrumentalização. Existem alguns relatórios no gerenciador corporativo para as consultas SQL mais caras. Você também pode pesquisar consultas recentes mantidas no cache.
fonte
Eu encontrei uma solução fácil
Passo 1. conectar ao banco de dados com um usuário administrador usando PLSQL ou sqldeveloper ou qualquer outra interface de consulta
Passo 2. execute o script abaixo; na coluna S.SQL_TEXT, você verá as consultas executadas
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;
O único problema com isso é que não consigo encontrar uma maneira de mostrar os valores dos parâmetros de entrada (para chamadas de função), mas pelo menos podemos ver o que é executado no Oracle e a ordem dele sem usar uma ferramenta específica.
fonte
alter system set timed_statistics=true
--ou
alter session set timed_statistics=true --if want to trace your own session
- deve ser grande o suficiente:
select value from v$parameter p where name='max_dump_file_size'
- Descubra o número secundário e de série da sessão de seu interesse:
select sid, serial# from v$session where ...your_search_params...
- você pode começar o rastreamento com 10046 eventos, o quarto parâmetro define o nível de rastreamento (12 é o maior):
begin sys.dbms_system.set_ev(sid, serial#, 10046, 12, ''); end;
--desligue o rastreio com a definição do nível zero:
begin sys.dbms_system.set_ev(sid, serial#, 10046, 0, ''); end;
/ * níveis possíveis: 0 - desligado 1 - nível mínimo. Muito parecido com set sql_trace = true 4 - valores de variáveis de ligação são adicionados ao arquivo de rastreamento 8 - esperas são adicionadas 12 - ambos os valores de variáveis de ligação e eventos de espera são adicionados * /
--mesmo se você quiser rastrear sua própria sessão com um nível maior:
alter session set events '10046 trace name context forever, level 12';
--desligar:
alter session set events '10046 trace name context off';
- o arquivo com informações de rastreamento brutas será localizado:
select value from v$parameter p where name='user_dump_dest'
--name do arquivo (*. trc) conterá spid:
select p.spid from v$session s, v$process p where s.paddr=p.addr and ...your_search_params...
--também você pode definir o nome sozinho:
alter session set tracefile_identifier='UniqueString';
--finalmente, use
TKPROF
para tornar o arquivo de rastreamento mais legível: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>
- para ver o estado de uso do arquivo de rastreamento:
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; /
Apenas traduzido http://www.sql.ru/faq/faq_topic.aspx?fid=389 Original é mais completo, mas de qualquer forma é melhor do que o que outros postaram IMHO
fonte
GI Oracle Profiler v1.2
É uma ferramenta para Oracle para capturar consultas executadas de forma semelhante ao SQL Server Profiler. Ferramenta indispensável para a manutenção das aplicações que utilizam este servidor de banco de dados.
você pode baixá-lo do site oficial iacosoft.com
fonte
Experimente o PL / SQL Developer, ele tem uma interface gráfica amigável para o profiler. É muito bom dar uma chance ao teste. Eu juro por esta ferramenta ao trabalhar em bancos de dados Oracle.
http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw
fonte
Visto que acabei de votar uma questão recente como uma duplicata e apontei nesta direção. . .
Mais alguns - em SQL * Plus - SET AUTOTRACE ON - fornecerão o plano de explicação e estatísticas para cada instrução executada.
O TOAD também permite a criação de perfis do lado do cliente.
A desvantagem de ambos é que eles apenas informam o plano de execução da instrução, mas não como o otimizador chegou a esse plano - para isso, você precisará de rastreio do lado do servidor de nível inferior.
Outro ponto importante para entender são os instantâneos do Statspack - eles são uma boa maneira de observar o desempenho do banco de dados como um todo. Plano de explicação, etc, são bons para localizar instruções SQL individuais que são gargalos. O Statspack é bom em identificar o fato de que seu problema é que uma instrução simples com um bom plano de execução está sendo chamada 1 milhão de vezes por minuto.
fonte
A captura é capturar todo o SQL executado entre dois pontos no tempo. Assim como o SQL Server também faz.
Existem situações em que é útil capturar o SQL que um determinado usuário está executando no banco de dados. Normalmente, você simplesmente ativaria o rastreamento de sessão para esse usuário, mas há dois problemas potenciais com essa abordagem.
Uma solução rápida e suja para o problema é capturar todas as instruções SQL que são executadas entre dois pontos no tempo.
O procedimento a seguir criará duas tabelas, cada uma contendo um instantâneo do banco de dados em um ponto específico. As tabelas serão então consultadas para produzir uma lista de todos os SQL executados durante aquele período.
Se possível, você deve fazer isso em um sistema de desenvolvimento silencioso - caso contrário, você corre o risco de obter muitos dados de volta.
Faça o primeiro instantâneo Execute o seguinte sql para criar o primeiro instantâneo:
create table sql_exec_before as select executions,hash_value from v$sqlarea /
Faça com que o usuário execute sua tarefa no aplicativo.
Faça o segundo instantâneo.
create table sql_exec_after as select executions, hash_value from v$sqlarea /
Verifique os resultados Agora que você capturou o SQL, é hora de consultar os resultados.
Esta primeira consulta listará todos os hashes de consulta que foram executados:
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; /
Este irá exibir o hash e o próprio SQL: definir páginas 999 linhas 100 quebra em 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. Arrume Não se esqueça de remover as tabelas de instantâneo assim que terminar:
drop table sql_exec_before / drop table sql_exec_after /
fonte
O Oracle, junto com outros bancos de dados, analisa uma determinada consulta para criar um plano de execução. Este plano é a maneira mais eficiente de recuperar os dados.
A Oracle fornece o '
explain plan
instrução ' que analisa a consulta, mas não a executa; em vez disso, preenche uma tabela especial que você pode consultar (a tabela de plano).A sintaxe (versão simples, existem outras opções, como marcar as linhas na tabela de plano com um ID especial ou usar uma tabela de plano diferente) é:
explain plan for <sql query>
A análise desses dados é deixada para outra questão, ou para suas pesquisas futuras.
fonte
Existe uma ferramenta comercial FlexTracer que pode ser usada para rastrear consultas Oracle SQL
fonte
Este é um documento da Oracle que explica como rastrear consultas SQL, incluindo algumas ferramentas (SQL Trace e tkprof)
ligação
fonte
Aparentemente, não existe um pequeno utilitário simples e barato que ajude a realizar essa tarefa. No entanto, existe uma maneira de fazer isso de uma maneira complicada e inconveniente.
O artigo a seguir descreve vários. Provavelmente existem dezenas de outros ... http://www.petefinnigan.com/ramblings/how_to_set_trace.htm
fonte