Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #105111
    Avatar de mpvargasmpvargas
    Participante

      Bom dia amigos,
      tenho um banco de dados usado para emissão de Nota Fiscal eletrônica que fica com vários processos ativos… com isso, com o passar do tempo, estoura o numero de processos que tenho alocado.
      Minha dúvidas são:
      1 – É possível saber se esses processos estão ficando “presos”?
      2 – Como saber em determinado momento, qtos processos estão ativos?
      3 – Uma sessão abre somente um processo ou pode abrir vários processos, no caso se eu verificar que a sessão está SNIPED (Perdida) ou INATIVA eu posso “matá-la”?
      4 – Qual o valor máximo de processos posso definir no parâmetro?

      Obrigado

      #105112
      Avatar de rmanrman
      Participante

        @mpvargas

        Funciona da seguinte forma, quando um cliente oracle se conecta no listener, o listener cria um processo no servidor, esse processo se manterá até que a sessão for finalizada. Utilizando a view V$SESSION é possível ver a quantidade de sessões no momento, essas sessões podem estar ativas ou inativas.

        A quantidade de processos é configurado através dos parâmetros: PROCESSES, SESSIONS, TRANSACTIONS e ENQUEUE_RESOURCES. Consulte a documentação oficial para entender melhor, existem parâmetros derivados que devem ser configurados em conjunto.

        Eu já tive problemas de conexões presas devido a arquitetura da aplicação, como a aplicação era feito em Delphi utilizando 3 camadas, as vezes, a aplicação cliente fechava de forma irregular, a aplicação servidor não fechava a conexão com o banco. A solução encontrada foi implementar um keep alive no socket que comunicava a aplicação cliente com a aplicação servidor. Não sei se é o seu caso.

        O ideal é não precisar matar nenhuma conexão, primeiro é preciso entender por que existem essas conexões presas e então resolver a origem do problema.

        Em aplicações Web é interessante criar um pool de conexão ao invés de criar um conexão a cada requisição ao servidor web.

        #105114
        Avatar de Fábio PradoFábio Prado
        Participante

          @mpvargas,

          Complementando o que o @rman respondeu:

          1- É possível saber se esses processos estão ficando “presos”?
          R.: Esse assunto é bastante extenso, mas vc pode olhar o valor de algumas colunas da visão V$SESSION, tal como: FINAL_BLOCKING_SESSION_STATUS

          2 – Como saber em determinado momento, qtos processos estão ativos?
          R.: Sim, execute:
          select * from v$session where username is not null and status = ‘ACTIVE’;

          3 – Uma sessão abre somente um processo ou pode abrir vários processos, no caso se eu verificar que a sessão está SNIPED (Perdida) ou INATIVA eu posso “matá-la”?
          R.:Se vc executar uma query paralela ela pode abrir múltiplos processos ou sessões, mas uma sessão que executa algo em modo serial (em conexão dedicado) abre um processo. Não mate nada INATIVO, descubra o porquê dela estar inativa! Processos SNIPED são eliminados pelo Oracle sozinho (demora um pouco mas acontece).

          4 – Qual o valor máximo de processos posso definir no parâmetro?
          R.: Não sei o valor máximo dos parametros PROCESSES, SESSIONS, TRANSACTIONS, mas tenho certeza de que é muito maior do que vc precisa!

          []s

          #105115
          Avatar de mpvargasmpvargas
          Participante

            rman e fabio
            Obrigado pela ajuda.

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress