2012-01-12 15 views
5

Sto cercando di leggere una colonna di clob da oracle in .Net e osservare prestazioni molto scarse e un sacco di traffico di rete.Scarse prestazioni ottenendo il campo di clob da Oracle in .Net

Ho provato ODP + OCI, devArt + OCI modi per accedere ai dati con gli stessi risultati: occorrono circa 20 secondi per ottenere 1000 righe in un lettore di dati e leggere il valore di clob per ogni riga.

Esaminando le tracce wirehark, si scopre che ogni volta che provo a leggere il campo clob per una singola riga nel lettore, ci sono altri pacchetti TCP aggiuntivi inviati tra client e server. Quindi per 1000 righe questo diventa 1000 volte più lento rispetto a interrogare solo una riga.

Allo stesso tempo, se eseguo la stessa query in SQL Developer (che credo utilizzi un driver jdbc sottile invece di oci), ottengo immediatamente i risultati, compresi i valori di clob. Non prova a interrogare clob per ogni riga: li ottiene tutti in una volta sola!

Ma non vedo un thin client per .net. Come posso accelerare le cose? Per favore aiuto!

MODIFICA: il mio tipo di campo è in realtà XMLTYPE memorizzato come clob, non un vero clob. L'uso di getClobVal su di esso migliora il risultato del 50% a 10 secondi per 1000 righe. Ma allo stesso tempo, Sql Developer sta restituendo i risultati all'istante, non in 10 secondi.

+0

Hai mai risolto questo problema? Hai registrato una richiesta di supporto con il venditore? –

risposta

1

È stato correttamente osservato che Oracle ritarda il recupero di LOB. Pertanto, le prestazioni dell'applicazione sono limitate dal tempo di andata e ritorno della rete.

Con la InitialLOBFetchSize proprietà della classe OracleCommand (in ODP.NET, vedere documentation), si può dire Oracle per recuperare parte della LPP con il recupero iniziale della riga. Se i tuoi LOB non sono troppo lunghi, questo può fare la differenza.

+0

Grazie, stavo anche guardando a ieri, ma non stava facendo la differenza per me. In realtà non ero molto onesto nel mio messaggio: abbiamo il campo XmlType memorizzato come clob, non un clob diretto e forse questo sta causando problemi. Ho anche provato a chiamare getClobVal su di esso e dà un aumento delle prestazioni del 50%, ma questo è solo 10 secondi per 1000 righe, mentre lo sviluppatore SQL recupera 5000 praticamente all'istante. – neonknight