Como encontrar as instruções SQL mais recentes no banco de dados?

25

Eu gosto de obter as últimas instruções executadas no meu banco de dados, juntamente com os indicadores de desempenho.

Como tal, eu gosto de saber quais instruções SQL foram mais intensivas em CPU / DISK.

Sebastian Roth
fonte

Respostas:

17

Aqui está o SQL para fazer o trabalho. Aberto para julgamento.

Etapa 1: Determine os IDs de instalação e de usuário.

SELECT inst_id,sid FROM gv$session WHERE username='<ENTER-USERNAME>';

Passo 2:

SELECT 
      s.sid
     ,s.CLIENT_INFO
     ,s.MACHINE
     ,s.PROGRAM
     ,s.TYPE
     ,s.logon_time
     ,s.osuser
     ,sq.sorts
     ,sq.DISK_READS
     ,sq.BUFFER_GETS
     ,sq.ROWS_PROCESSED
     ,sq.SQLTYPE
     ,sq.SQL_TEXT
 FROM gv$session s    
    , gv$sql sq
WHERE s.SQL_HASH_VALUE = sq.HASH_VALUE
  AND s.inst_id = :inst_id -- replace with instID from above
  AND s.sid = :sid -- replace with ID from above
  AND sq.inst_id = s.inst_id

Pode haver vários IDs e IDs de instância retornados. Portanto, cabe aos usuários a escolha de como usar esses dados em uma interface da web etc.

Sebastian Roth
fonte
Apenas uma pequena nota: suportes Oracle (nenhuma idéia de qual versão) inoperador com tuplas, de modo do exemplo acima... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
Betlista
11
'inst_id' representa o ID da instância, não significa o ID de instalação.
miracle173
13

O console do Oracles Enterprise Monitor mostra uma grande quantidade de informações sobre quais consultas SQL estão levando a CPU máxima, gargalos, atividade principal no banco de dados, bloqueando SQLs et al.

Para uma abordagem histórica, você pode usar os relatórios AWR do Oracle para definir áreas pontuais a seu respeito.

texto alternativo

insira a descrição da imagem aqui

Sathyajith Bhat
fonte
11
Por curiosidade - o AWR é uma ferramenta disponível para todas as licenças Oracle e eu poderia usá-lo apenas pela linha de comando?
Sebastian Roth
2
Desculpe, eu deveria ter mencionado - pelo que sei, o AWR exige um licenciamento separado - o Oracle Tuning & Diagnostic Pack . Prefiro usar o AWR no console do Enterprise Manager - fui abençoado com o privilégio (!) De utilizar o console do Enterprise Manager. Eu também descobri que você pode usar SQL Developer para SQLs do monitor, mas que requer acima de licenciamento
Sathyajith Bhat
11
O Oracle Enterprise Manager (OEM) é muito bom. Podemos monitorar nossa integridade do banco de dados quase em tempo real com gráficos atualizados automaticamente. Temos um grande monitor pendurado na parede mostrando o OEM para nossos bancos de dados primários 24x7 e é extremamente benéfico na identificação de problemas à medida que eles ocorrem.
#
4

Você também pode usar V$SQL, existem várias colunas interessantes RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXTetc.

Isso daria as 10 principais instruções por leitura de disco (nota - isso é cumulativo para todas as execuções):

select sql_id,child_number from
(
select sql_id,child_number from v$sql
order by disk_reads desc
)
where rownum<11

Se a instrução ainda estiver em, V$SQL_PLANé possível obter um plano de explicação real para a consulta:

select * from table(dbms_xplan.display_cursor('sql_id',child_number));

Também gosto de usar V$SQL_PLAN, pois contém boas informações. Se statistics_level=ALLvocê pode usar V$SQL_PLAN_STATISTICS.

gabrielp
fonte
2

Para SQL recente:

select * from v$sql

Para a história:

select * from dba_hist_sqltext
grokster
fonte