none
Usar mesma pool do Sql para vários workprocess RRS feed

  • Pergunta

  • Pessoal, 

    sei que poucos devem saber sobre isso mas espero encontrar ajuda aqui.

    Possuo muitas aplicações que se conectam a um mesmo banco de dados e elas ficam configuradas no IIS com pools que executam vários workprocess.

    A muito tempo vendo tendo problema de timeout no sql e hoje resolvi tirar um tempo para investigar e descubro que uma query simples que executa muitas vezez, deixou ums 300 pools iniciadas.

    Examinei e re-examinei e a conexão era fechada, tudo certinho dentro de try catch e tudo mais..

    Foi então que resolvi fazer alguns testes locais e descobri que o sql abre nova pool mesmo que a string de conexão seja igual para todos, se o ID do processo que executou for outro e claro, como são vários workprocess , eu terei vários ids de serviços e portanto eles vão abrindo novas conexões a toda hora..

    Feito isso descobri que se eu usar Integrated Security=SSPI na conexão ele passa a autenticar no sql, pelo usuário do IIS e para de criar pool baseado no ID.. fiz isso e resolveu mesmo porém quando fui jogar para aplicação real descobir que no web.config de lá está configurado o <identity impersonate="true"/> e com esta tag não conecta dejeito nenhum no sql de destino.. Não sei porque mas o usuário vai em branco para o sql..

    se eu passar o username e senha na tag acima dai ele conecta..

    Minha questão é : eu preciso que o sql pare de abrir novas pools por eu rodar vários workprocess e não gostaria de mudar o web.config destas aplicações porque isso envolve mudança de usuários e pode me dar outros problemas..

    Quando isso foi adicionado foi por outra pessoa e lembro que foi uma dor de cabeça e não quero correr riscos..


    Tem alguma forma de manter o identity impersonate no web.config mas mesmo assim conectar no sql com integrated security ( windows authentication ? ) 

    terça-feira, 17 de setembro de 2013 00:30

Todas as Respostas

  • Rafael,

    Você como sempre com problemas legais! =D

    Quando você usa Identity Impersonate + Integrated Security, o que é passado para autenticação no SQL é a credencial do usuário que está acessando, logo este precisa ter acesso também ao SQL Server.

    Neste caso o que você pode fazer é colocar na connectionString usuário/senha do SQL Server e configurar  este para autenticação windows.

    Att,


    terça-feira, 17 de setembro de 2013 18:13
  • Filipe, 

    Enquanto está dentro dos meus limites eu nem posto no forum, mas quando posto é para dar trabalho hehehe..

    Bom, antes de mais nada obrigado por tentar me ajudar, como sempre =)

    Algumas perguntinhas : 

    1- Quando eu ativei o Identity Impersonate + Integrated Security ele passa o usuário em branco para o SQL. 

    Até onde eu li ele deveria passar o usuário do IIS, mas não é isso que ocorre.. No erro mesmo aparece que o usuário "" ( duas aspas sem nada dentro ) não tem acesso. Quando eu coloco o username e senha dentro do web.config ai sim ele aparece que o usuario "xxxx" não tem acesso.. Neste segundo caso eu crio no sql o usuário e dá tudo certinho . O problema é que eu não queria configurar o usuário e senha dentro do web.config.. Eu queria que ele pegasse o usuário do iis.. Não tem como ?

    2 - Tem certeza que da para passar o usuario e senha com windows autentication mode ? Quando é desta forma não é sem senha ? Ontem li bastante sobre isso mas o pessoal falava que com windows authentication ele pega direto do usuario do IIS e que quando passo usuario e senha não posso usar o Integrated Security=SSPI. Será que estou confundindo as coisas ?

    O que eu preciso muito é deixar o integrated security ativo ( para que não crie uma pool por serviço ) e que não mexa no meu web.config.. Se tiver como eu fazer isso via código me resolve o problema.


    Abraços e obrigado !

    terça-feira, 17 de setembro de 2013 18:55
  • Veja

    http://stackoverflow.com/questions/14105345/iis-app-pools-worker-processes-app-domains


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    terça-feira, 24 de setembro de 2013 14:26
    Moderador
  • Seilor, 

    amigo não sei se eu que não entendi seu link ou você que não entendeu o meu.

    Não é sobre pool do IIS meu problema.

    Vou tentar explicar de uma forma mais resumida.


    Quando você trabalha com vários workprocess cada um tem um ID.
    Uma mesma aplicação ao realizar uma consulta no SQL server abre uma nova pool de conexão ( não confundir com pool do IIS ) no sql.. Isso porque o sql diferencia cada workprocess e abre uma pool para cada um portanto se eu tenho 10 workprocess e cada requisição ser atendida por uma, eu tenho no minimo 10 conexões abertas no sql.

    Isso que eu quero eliminar.. Quero que todos os workprocess trabalhem usando a mesma pool de conexão do sql.

    Abraços


    • Editado Rafael Metring terça-feira, 24 de setembro de 2013 14:31 erro
    terça-feira, 24 de setembro de 2013 14:30