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


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.


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


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.


2

Para SQL recente:

select * from v$sql

Para a história:

select * from dba_hist_sqltext
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.