7

SfondoRintracciare connessione al database emette

Abbiamo un certo numero di applicazioni web su diversi server web che si collegano a un singolo server di database. Negli ultimi due mesi, abbiamo notato che ogni tanto i nostri server web non sono in grado di connettersi al server del database.

nostro ambiente

Abbiamo un paio diversi ambienti web, un po 'di ColdFusion in esecuzione e altri che eseguono .NET. Le app .NET sono sia Web Form che MVC. Si estendono su più versioni da 2.0 a 4.5. Entrambi i server Web ColdFusion e .NET sono macchine basate su Windows. Sia gli ambienti Web ColdFusion che .NET sono raggruppati in cluster e alcune macchine sono fisiche mentre altre sono virtuali.

Il nostro server di database è SQL Server 2008 r2. Ospita più database. Ogni applicazione ha il proprio utente di database che si connette al server che gli fornisce solo l'accesso a un determinato database.

Altri fatti

  • quando notiamo problemi, si verificano in brevi sequenze che durano ovunque da un paio di secondi per un paio di minuti.
  • Quando notiamo dei problemi, il burst contiene errori da più applicazioni diverse, non solo una app alla volta.
  • Quando riscontriamo problemi, il burst contiene errori da applicazioni provenienti da diversi ambienti web. (Questo ci fa pensare che possiamo escludere che le app stesse siano il problema)
  • Lo scoppio di problemi di connessione si verificano in varie ore durante il giorno e la notte. Non sono sempre nei periodi di elevato utilizzo.
  • Abbiamo monitorato cose come il numero di connessioni utente, memoria, IO, utilizzo della CPU, ecc ... e non abbiamo visto picchi o qualsiasi altra cosa che potrebbe indicare un problema.
  • Abbiamo installato wireshark sul web e server db nella speranza di cogliere il problema senza successo.

Domande

  1. Qualcuno ha suggerimenti su dove devo cercare il prossimo?
  2. Esistono proprietà del database che potrebbero causare questo?
  3. C'è un modo per "monitorare" la connessione tra il database e il server web in un modo migliore?
  4. C'è qualcosa che può essere fatto sul lato app per capire meglio cosa sta succedendo?

errori catturati dalle applicazioni

  • errori NET
    • Una rete correlati o si è verificato l'errore specifico esempio mentre stabilisce una connessione a SQL Server. Il server non è stato trovato o non era accessibile.Verificare che il nome dell'istanza sia corretto e che SQL Server sia configurato per consentire le connessioni remote. (provider: Named Pipes Provider, errore: 40 - Impossibile aprire una connessione a SQL Server)
    • Timeout scaduto. Il periodo di timeout è trascorso prima del completamento dell'operazione o il server non risponde.
    • Si è verificato un errore a livello di trasporto durante la ricezione dei risultati dal server. (provider: Provider TCP, errore: 0 - Il periodo di timeout del semaforo è scaduto.)
    • Timeout scaduto. Il periodo di timeout è trascorso prima di ottenere una connessione dal pool. Ciò potrebbe essere dovuto al fatto che tutte le connessioni in pool erano in uso e che è stata raggiunta la dimensione massima del pool.
  • errori ColdFusion
    • Errore durante l'esecuzione di query di database. La connessione TCP/IP all'host non è riuscita. java.net.ConnectException: Timeout della connessione: connessione
      L'errore si è verificato sulla riga 38.
    • Errore durante l'esecuzione della query del database. Connessione ripristinata dal peer: errore di scrittura socket
      L'errore si è verificato sulla riga 91.
    • Errore durante l'esecuzione della query del database. Timeout cercando di stabilire il collegamento
      L'errore si è verificato sulla linea 38.
+1

Sembra più un problema di connettività di rete che un problema di database. –

+0

Questo sembra davvero un problema di rete con la scheda NIC, switch, router, cavo, ecc. –

+0

Quale sarebbe il modo migliore per * sapere * di sicuro o per rintracciarlo? – Jason

risposta

1

In CF, una volta ho avuto un problema come quello che stavano vedendo. Ho avuto CF su 1 server e sql 2008 r2 su un altro server. Vedrei gli errori CF come te pubblicati qui sotto. Per aiutare a rintracciare ad un errore di rete che ho scritto qualcosa di simile:

1) ha creato un down.bat

tracert serverip

2) Ho poi messo un giro la query.

Quando la query ha generato l'errore avrei eseguire

<cfmail to="ME" from="Server" subject="SQL DOWN"> 

    Server Debugging Info: 
    ------------------------------------------------------------  
    #now()# 

    #cfcatch.Detail# 

    #cfcatch.Message# 

    #log#   

    </cfmail> 

Questo mi ha aiutato a risolvere la mia situazione, che ha finito per essere l'hardware al datacenter.

Problemi correlati