none
TCP Provider: An existing connection was forcibly closed by the remote host.

    問題

  • Periodicamente ricevo il seguende messaggio di errore accedendo al DB (SQL Azure) 

    TCP Provider: An existing connection was forcibly closed by the remote host.

    Qualcuno ha informazioni in merito?


    • 已編輯 dsmwb 2012年4月10日 上午 10:58
    2012年4月10日 上午 10:54

所有回覆

  • ciao

    dalla stessa macchina o da diverse?
    se il problema è da più macchine, considera che SQL azure ha un firewall molto personalizzabile, verifica nel caso che le policy siano aperte per l'IP da cui fai la chiamata

    a presto


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     

    2012年4月10日 下午 12:34
  • praticamente, a turno, l'errore viene riportato da tutte le mie VM... spesso non contemporaneamente...

    Stiamo parlando di connessioni all'interno del data center e il firewall è correttamente configurato altrimenti l'errore sarebbe persistente e invece si presenta apparentemente con casualità...

    2012年4月10日 下午 12:36
  • ah ok

    adesso mi è più chiaro

    il datacenter è lo stesso Windows Azure? o ne usi uno diverso?


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     

    2012年4月10日 下午 12:38
  • tutto in un solo data center Windows Azure.
    2012年4月10日 下午 12:42
  • allora suppongo che il problema sia applicativo

    che uso fai del DB?

    quante connessioni usi?

    usi connessioni statiche?

    usi connessioni aperte solo all'ultimo momento? nel caso usi lo "using"?

    che tipo di applicazione è? quanti utenti ha? hai provato a vedere se il problema è legato a tempi o indici di carico??

    scusami se ti faccio domande, ma altrimenti è impossibile trovare 1 soluzione

    a presto


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     

    2012年4月10日 下午 12:44
  • che uso fai del DB? <- domanda la cui risposta è decisamente difficile e articolata

    quante connessioni usi? <- non capisco cosa intendi... dipende dal numero di utenti e da altri fattori, insomma non ho una statistica precisa, ma posso dirti che il problema si presenta anche quando il carico delle VM è nullo

    usi connessioni statiche? <- no

    usi connessioni aperte solo all'ultimo momento? <- la connessone al DB è fatta solo in caso di richieste

    nel caso usi lo "using"? <- no

    che tipo di applicazione è? <- php

    quanti utenti ha? <- non tanti da giustificare superamento di limiti

    hai provato a vedere se il problema è legato a tempi o indici di carico?? <- sì, il problema si presenta casualmente, senza specifiche cause ed in genere ad orari in cui il carico di utenti è praticamente nullo

    grazie per l'aiuto

    2012年4月10日 下午 12:53
  • ciao

    "che uso fai del DB? <- domanda la cui risposta è decisamente difficile e articolata"

    :) ovviamente intendevo da un punto di vista tecnico e non "che ci metti dentro"

    usando PHP non saprei darti indicazioni precise, posso solo darti delle linee guida:

    tra le mie applicazioni non ho mai riscontrato un problema simile, quindi suppongo che non sia un problema di SQL azure

    stai attento a chiudere sempre le connessioni e ad aprirle solo nel momento del bisogno (per ridurre il numero di connessioni utilizzate)

    .NET usa un concetto di connection-pooling, non so le API di PHP x sqlazure se lo usino, e nel caso inverso se questo può essere il problema (forse va in protezione il DB, o il firewall, etc)

    se non riesci a gestire il pooling da API, prova a farlo a mano riusando le connessioni già aperte e verifica se questo è il problema

    se mi vengono in mente altre idee ti scrivo :)

    a presto


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     

    2012年4月10日 下午 01:00
  • effettivamente faccio esattamente quello da te consigliato... apro e chiudo sempre le connessioni (ne sono sicuro, ho verificato) e riutilizzo le connessioni finché aperte...

    l'unica cosa che mi viene in mente è che possa essere causato da una sorta di timeout che interviene a causa di processamenti asincroni "lunghi"... sai per caso se c'è un modo per verificare se una connessione precedentemente aperta al DB sia ancora attiva o sia intervenuto un timeout? in genere i processamenti avvengono secondo lo schema:

    1. apertura connessione
    2. processamento
    3. chiusura connessione

    secondo me la strada e la causa è questa e quello che dici te in un certo senso me lo conferma...

    esempi anche in .NET sono ben accetti, non credo che il problema sia legato al linguaggio usato, al limite al driver...


    • 已編輯 dsmwb 2012年4月10日 下午 01:21
    2012年4月10日 下午 01:19
  • in genere una connessione condivisa si usa solo in un contesto sincrono dove mai vengono usate da più punti contemporaneamente, per evitare conflitti nell'uso di transazioni, etc...

    frequentemente si usa il concetto di "constructor dependency injection" dove appunto si creano logiche in classi con in costruttore richiedono la connection da usare

    se hai logiche asincrone, queste dovrebbero nascere tutte in un gestore della connessione che faccia 1 po da padre dell'esecuzione, e che abbia la connessione di "contesto" da usare al suo interno

    questo evita di mischiare connessioni sincrone/asincrone, e garantisce l'uso di una sola connessione per volta

    a presto


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     

    2012年4月10日 下午 01:25
  • beh in linea di principio il problema non dovrebbe essere legato all'uso di più connessioni (finché non si superino i limiti e sono sicuro non sia il mio caso), visto che in ogni caso questo è all'ordine del giorno in un sistema cloud... o sbaglio?


    • 已編輯 dsmwb 2012年4月10日 下午 01:30
    2012年4月10日 下午 01:30
  • infatti non credo sia il limite delle connessioni su SQL il tuo problema (peraltro non limitato su sqlazure)

    più che altro l'uso delle connessioni stesse sul tuo sistema che in qualche modo le "schianta".... non so se usi le stesse connessioni in più punti, se vai in dead-lock, o altro, ma credo che l'occhio dovresti buttarlo in quella direzione


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     

    2012年4月10日 下午 01:33
  • grazie per la dritta... io sono abbastanza sicuro di usare un'unica connessione per processamento, quindi il numero di connessioni al DB è sempre minore o uguale al numero di VM. Comunque controllerò nella direzione che mi hai indicato...

    grazie per l'aiuto

    2012年4月10日 下午 01:55
  • ciao

    se davvero ne hai 1 per VM, allora potresti avere problemi di timeout o di scadenza delle connessioni

    è meglio avere 1 connessione per request utente o tramite qualche connection-pool

    a presto


    Antonio Esposito [MCT, MCPD, MCTS, MCP]
    dotnetlombardia.org | blog | web | @tonyexpo
    Italy
     

    2012年4月10日 下午 01:56