Fazendo traces para investigar problemas

O DBMS_MONITOR é uma ótima opção para achar alguns SQL’s que estão degradando a performance do banco, para isso devemos habilitar um tipo de trace de acordo com o que estamos querendo. Tome cuidado, pois eu mesmo esqueci um trace ligado por alguns dias e arquivo ficou com 6.5 GB.
O pacote DBMS_MONITOR vem com as procedures abaixo:

CLIENT_ID_STAT_DISABLE ->
Desabilita coleta de Stats habilitada previamente para um Client ID;
CLIENT_ID_STAT_ENABLE ->
Habilita coleta de Stats para um Client ID;
CLIENT_ID_TRACE_DISABLE ->
Desabilita o trace previamente habilitado para um Client Id globalmente no Banco;
CLIENT_ID_TRACE_ENABLE ->
Habilita o trace para um Client Id globalmente no Banco;
DATABASE_TRACE_DISABLE ->
Desabilita o trace para todo o Banco ou uma instância específica em caso de RAC;
DATABASE_TRACE_ENABLE ->
Habilita o trace para todo o Banco ou uma instância específica em caso de RAC;
SERV_MOD_ACT_STAT_DISABLE ->
Desabilita coleta de Stats para uma combinação de Service Name, MODULE e ACTION;
SERV_MOD_ACT_STAT_ENABLE ->
Habilita coleta de Stats para uma combinação de Service Name, MODULE e ACTION;
SERV_MOD_ACT_TRACE_DISABLE ->
Desabilita o trace para todas as instâncias para uma combinação de Service Name, MODULE e ACTION globalmente;
SERV_MOD_ACT_TRACE_ENABLE ->
Habilita SQL tracing para uma combinação de Service Name, MODULE e ACTION globalmente, a menos que uma instância seja especificada;
SESSION_TRACE_DISABLE ->
Desabilita o trace para uma sessão (SID) na instância local;
SESSION_TRACE_ENABLE ->
Habilita o trace para uma sessão (SID) na instância local;

Exemplo:

SQL> EXEC DBMS_MONITOR.session_trace_enable;
SQL> EXEC DBMS_MONITOR.session_trace_enable(waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_MONITOR.session_trace_disable;

SQL> EXEC DBMS_MONITOR.session_trace_enable(session_id=>1234, serial_num=>1234);
SQL> EXEC DBMS_MONITOR.session_trace_enable(session_id =>1234, serial_num=>1234, waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_MONITOR.session_trace_disable(session_id=>1234, serial_num=>1234);

— Cliente Id use dbms_application_info

SQL> EXEC DBMS_MONITOR.client_id_trace_enable(client_id=>’client_id’);
SQL> EXEC DBMS_MONITOR.client_id_trace_enable(client_id=>’client_id’, waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_MONITOR.client_id_trace_disable(client_id=>’client_id’);

SQL> EXEC DBMS_MONITOR.serv_mod_act_trace_enable(service_name=>’nome_do_serviço’, module_name=>’nome_modulo’, action_name=>’running’);
SQL> EXEC DBMS_MONITOR.serv_mod_act_trace_enable(service_name=>’nome_do_serviço’, module_name=>’nome_modulo’, action_name=>’running’, –
> waits=>TRUE, binds=>FALSE);
SQL> EXEC DBMS_MONITOR.serv_mod_act_trace_disable(service_name=>’nome_do_serviço’, module_name=>’nome_modulo’, action_name=>’running’);

Para maiores informações consulte a documentação oficial em:
http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_monitor.htm

Para verificar quais são os traces estão habilitados no seu banco de dados, use aa consulta abaixo:

select
trace_type
, primary_id
, qualifier_id1
, qualifier_id2
, waits
, binds
, instance_name
from
dba_enabled_traces;

Depois dos traces prontos é hora usar o trcess (para unificar vários traces) e o nosso amigo tkprof para formatar a saída e ficar bem mais fácil de ser ler e achar problemas.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *