...
- Em que tela o usuário está travado?
- Que ação foi executada nesta tela para o travamento?
- A quanto tempo está parado?
- Consegue fazer outras coisas no computador?
- Isso ocorre com frequencia? Cuidado com esta pergunta pois é uma pergunta muito aberta e todos os usuários têm a tendência a dizer sim porém não sabem responder a próxima pergunta.
- Qual é a frequência? A que horas isso ocorre? Quantas vezes ao dia? Existe algum padrão?
- Normalmente, esperando um pouco mais o computador "destrava"? Qual é normalmente a ação tomada?
- O que ocorre depois disso? O usuário consegue trabalhar normalmente ou é necessário resetar o computador completamente?
- Isso ocorre somente com este usuário ou quando ocorre com ele acaba ocorrendo com outros usuários?
Todas as informações são importantes independente do que está ocorrendo pois, mesmo que seja um travamento por culpa de algum outro usuário atualizando a mesma tabela que este usuário, podemos identificar e simular mais rapidamente o problema.
Vamos supor então que o usuário está lá parado e você deseja ajudá-lo identificando qual o problema. Podem existir duas situações típicas: - Lentidão. Parece que o usuário está travado porém o processo que ele está executando está sendo executado só que mais lentamente do que ele presumira inicialmente.
- Travamento. O usuário está parado esperando a liberação de algum registro em outra tabela.
Lentidão
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.
O resultado segue abaixo.Bloco de código 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>
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).