Extremamente Alto V_ $ SYSTEM_EVENT Tempos de Espera no Oracle DB

2

Estou trabalhando na solução de problemas de um Oracle DB que está tendo alguns problemas gerais de desempenho. Eu corri a seguinte consulta:

SELECT event AS "Event|Name",
       total_waits "Total|Waits",
       round(time_waited / 100, 0) "Seconds|Waiting",
       total_timeouts "Total|Timeouts",
       average_wait / 100 "Average|Wait|(in secs)"
  FROM sys.v_$system_event e
  ORDER BY time_waited DESC;

As primeiras linhas retornaram da seguinte maneira. Milhões de segundos de tempo de espera! (Por comparação, nossos outros bancos de dados são < 10 segundos de tempo de espera para os principais eventos.) O que esses eventos fazem e o que poderia causar esses enormes tempos de espera? O banco de dados está ativo há 30 dias, por isso estamos vendo a agregação ao longo do tempo.

Event Name                                 Waits    Seconds Timeouts  Avg Wait
----------------------                 ---------   -------- --------  --------
SQL*Net message from client            488397968   32050594        0    0.0656
rdbms ipc message                       91335556    2455744  9529486    0.0269
DIAG idle wait                           5214769     347077  5214769    0.0666
Streams AQ: qmn coordinator idle wait     186521     173696    93278    0.9312
Streams AQ: qmn slave idle wait            95359     173692       51    1.8215
Space Manager: slave idle wait            523165     173647   521016    0.3319
pmon timer                                968303     173630   870108    0.1793
fbar timer                                  8770     173403     8713   19.7723
smon timer                                 14103     173278     7006   12.2866
log file sync                           57967889      90402   649458    0.0016
og file parallel write                  86618366      39509        0    0.0005
db file sequential read                244286101      11171        0         0
control file parallel write              1274395       3949        0    0.0031
db file scattered read                 157316868       1635        0         0
db file parallel read                   11948170       1190        0    0.0001
    
por jeffspost 18.09.2009 / 23:55

2 respostas

3

"SQL mensagem de rede do cliente" é o tempo gasto pelo banco de dados esperando para ser solicitado a fazer algo por um cliente (eu também interpretaria isso como um indicador do número de SQL Net solicitações processadas pelo banco de dados). AskTom tem mais informações sobre o evento. Não parece uma espera média muito longa, então talvez você tenha um aplicativo que faz MUITAS solicitações pequenas para o servidor? Isso é muita espera em 30 dias (média de 16 milhões por dia).

Quanto à mensagem ip do rdbms, isso significa (Oracle 10g Reference ) :

"Os processos em segundo plano (LGWR, DBWR, LMS0) usam esse evento para indicar que estão inativos e aguardando que os processos em primeiro plano enviem uma mensagem IPC para fazer algum trabalho."

Geralmente, esse não é um evento de uma perspectiva de ajuste. (Burleson)

    
por 19.09.2009 / 00:48
0

selecionar a partir de v $ system_event sozinho é de uso limitado. A visualização contém tempos de espera totais e conta todos os eventos de espera desde que o banco de dados foi iniciado pela última vez. A última hora em que o banco de dados foi iniciado pode ser há um ano ou alguns minutos atrás, mas de qualquer forma, geralmente estou interessado apenas no que está acontecendo agora com minha instrução sql, trabalho em lote ou usuários finais. Os usuários finais aguardam por esperas não em segundo plano não ociosas, mas v $ system_event contém todos os eventos, incluindo mais de 50 eventos ociosos e muitos aguarda por processos em segundo plano, não-usuários, que cuidam do banco de dados. Em vez de executar essa consulta, tente executar o relatório do AWR ou o relatório do statspack ou observar a tela de desempenho ou atividade principal no Enterprise Manager. uma maneira rápida de ver o que está acontecendo agora no banco de dados é executar a seguinte instrução select:

select  nvl(s.username,s.program) username
,   s.sid sid
,   s.serial# serial
,   s.sql_hash_value sql_hash_value
,   substr(decode(w.wait_time, 0, w.event, 'ON CPU'),1,15) event
,   w.p1 p1
,   w.p2 p2
,   w.p3 p3
from    v$session s
,   v$session_wait w
where   w.sid=s.sid
and s.status='ACTIVE'
and s.type='USER';

que lhe dirá quem está esperando e quem está solicitando a CPU. Ao executar a consulta repetidamente, você pode ter uma ideia de quais afunilamentos existem em um sistema. A visualização 10g e superior do Oracle v $ active_session_history contém essas informações coletadas uma vez por segundo. Seus dados muito mais poderosos do que v $ system_event, mas os dados podem ser difíceis de explorar. Para minerar os dados, você pode usar a tela principal de atividades do Enterprise Manager, mas se você não tiver OEM, existe uma ferramenta gratuita e legal

link

    
por 13.03.2011 / 19:26