Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Podemos identificar se um usuário está ou não executando algo no servidor através de dois procedimentos (depende se o FoxHound está disponível ou não). Caso você não tenha o FoxHound, execute o comando abaixo.

Bloco de código
titlelast_req.sql
select connection_property('ReqStatus', sci.Number) as ReqStatus, usu.usuario, sci.*  
from sa_conn_info() sci 
INNER JOIN usuarioConexaoBanco usu on (sci.number = usu.IdConexao)
WHERE USUARIO = <NOME USUARIO INVESTIGADO> 

O resultado segue abaixo.

Note que, como não existe nenhuma informação nas informações vindas da conexão (pois todas se logam como DBA), o Sispetro registra, quando o usuário faz o login, na tabela UsuarioConexaoBanco o número da conexão (Number) juntamente com o nome do usuário sempre sobreescrevendo o último valor apresentado.
Podemos ver acima que o usuário Futura não está realizando nenhum trabalho no banco (pois a coluna ReqStatus está com o valor Idle e a coluna LastReqTime está com uma data/hora muito distante de quando foi executado o comando). Além disso, ele não está travado por nenhuma outra conexão (apareceria o número da conexão na coluna BlockedOn).
Uma outra alternativa é utilizar o FoxHound sendo que antes devemos pesquisar o número da conexão (ou números pois o Sispetro utiliza 2 conexões ativas).

Um outro SELECT interessante para se ter uma noção de quais usuários estão consumindo mais CPU do banco de forma rápida é o seguinte:

Bloco de código
titlecpu_por_conexao.sql
SELECT con.Number AS connection_number, CONNECTION_PROPERTY ( 'Name', Number ) AS connection_name, usu.usuario , CONNECTION_PROPERTY ( 'Userid', Number ) AS user_id,
CAST ( Value AS NUMERIC ( 30, 2 ) ) AS approximate_cpu_time
FROM sa_conn_properties() con
INNER JOIN usuarioConexaoBanco usu ON ( con.NUmber = usu.IdConexao )
WHERE PropName = 'ApproximateCPUTime' ORDER BY approximate_cpu_time DESC;

...

  • Sem FoxHound.
    Bloco de código
    titleusuario_travado.sql
    SELECT NUMBER(*) AS #,  Name, usu.usuario, UserId, Number, BlockedOn FROM sa_conn_info() as con 
    INNER JOIN usuarioConexaoBanco usu ON ( con.Number = usu.IdConexao ) 
    WHERE con.BlockedOn <> 0 
    OR EXISTS( SELECT * FROM sa_conn_info() as con2 WHERE con2.BlockedOn = con.BlockedOn )
    ORDER BY BlockedOn, Name, UserId, number;
    
  • Com FoxHound

    O mais importante a saber sobre travamento é que eles irão ocorrer (pois existem recursos compartilhados que serão atualizados simultaneamente) e serão ou de baixa frequência com uma duração de até 10 segundos ou com uma frequencia que o usuário não irá notar (serão frequentes porém de curta duração).

...