5

La mia applicazione ha problemi di prestazioni, quindi ho iniziato a indagare su questo dalla radice: "La connessione con il database".Per chiudere o non chiudere una connessione Oracle?

Le migliori pratiche dice: "Aprire una connessione, usarla e vicino è il più presto possibile", ma non so il sovraccarico che questo provoca, quindi la domanda è:

1 - "Open, Usa , Chiudere le connessioni il prima possibile è l'aproach migliore usando ODP.NET? "

2 - C'è un modo e come utilizzare il pool di connessioni con ODP.NET? Sto pensando di creare una lista per memorizzare alcune stringhe di connessioni e creare una logica per scegliere la "migliore" connessione ogni volta che ho bisogno. È questo il modo migliore per farlo?

+2

Stai parlando di un'applicazione client/server? O un'applicazione a tre livelli? Stai affermando di aver profilato l'applicazione e stabilito che l'apertura e la chiusura delle connessioni al database sono un collo di bottiglia? O stai solo indovinando che i problemi di prestazioni potrebbero essere correlati al database? –

+1

Di chi è la migliore pratica? L'apertura di una connessione al database è un'operazione costosa e dispendiosa in termini di tempo.Pertanto il miglior consiglio è di mantenere le connessioni aperte e in uso il più a lungo possibile. – APC

+0

Justin. Sì, è un'applicazione Asp.Net, quindi è client/server, con 3 o 4 livelli, la "Open Connection Operation" non è il collo di bottiglia, ma suppongo che contribuisca alla riduzione delle prestazioni (se non utilizzata correttamente). – Ewerton

risposta

6

] Ecco un mazzo diapositiva contenente Oracle di best practice raccomandate:

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

Si ottiene automaticamente un pool di connessione quando si crea un OracleConnection. Per la maggior parte delle applicazioni di livello intermedio, vorrai approfittarne. Sarà inoltre necessario ottimizzare il pool per un carico di lavoro realistico attivando i contatori delle prestazioni nel registro.

Vedere la guida in linea ODP.NET per i dettagli sul pool di connessioni. Le impostazioni del pool vengono aggiunte alla stringa di connessione.

Un altro problema che le persone incontrano molto con OracleConnections è che il garbage collector non si rende conto di quanto siano veramente a uso intensivo di risorse e non li pulisce prontamente. Ciò è aggravato dal fatto che ODP.NET non è completamente gestito e quindi alcune risorse sono nascoste dal garbage collector. Quindi la procedura migliore è chiudere() e Dispose() tutti gli oggetti Oracle ODP.NET (incluso OracleConnection) per forzare la loro pulizia.

Questo particolare problema sarà mitigata nel fornitore completamente gestito di Oracle (un beta sarà fuori a breve)

(EDIT: ODP.NET, Autista Gestito è ora disponibile.)

Christian Shay

Oracle

1

ODP.NET è un fornitore di dati per ADO.NET. La procedura consigliata per ADO.Net è Apri, Ottieni dati (in memoria), chiudi, utilizza i dati di memoria. Ad esempio, utilizzando un OracleDataReader per caricare i dati in un DataTable in memoria e chiudere la connessione.

[s '

0

Per una singola transazione questo è il migliore, ma per più transazioni in cui si impegnano alla fine, questa potrebbe non essere la soluzione migliore. È necessario mantenere la connessione aperta finché la transazione non viene confermata o annullata. Come gestirlo e anche come verificare che la connessione continui a esistere in quel caso? (Es. Errore di rete) C'è una proprietà ConnectionState.Broken che non funziona a questo punto.

Problemi correlati