Wir verwenden ODP.NET, um Abfragen auf Oracle-Datenbanken durchzuführen, und normalerweise funktioniert es gut. Es gibt eine bestimmte Datenbank und eine bestimmte Ansicht in dieser Datenbank, aber wir können eine Abfrage von .NET einfach nicht abschließen. Zum Beispiel:Oracle-Abfrage ist langsam (oder fehlschlägt) von .NET-App aber ist schnell von SQL Developer
SELECT some_varchar_field FROM the_view WHERE ROWNUM < 5;
Wenn ich diese Abfrage aus Oracle SQL Entwickler auszuführen, beendet es in weniger als einer Sekunde. Wenn ich eine identische Anfrage von unserer .NET-Anwendung unter Verwendung von ODP.NET mache, hängt es und erzeugt schließlich einen "ORA-03135: Verbindung verlorener Kontakt" Fehler. Ich denke, dass die Beschränkung auf nur wenige Zeilen die Möglichkeit ausschließt, dass es sich um ein FetchSize-Problem handelt.
Es gibt andere Abfragen, die ich erfolgreich ausführen kann, aber sie sind langsamer von unserem Programm als von SQL Developer. Auch hier stelle ich fest, dass SQL Developer anfangs nur Daten für die ersten 50 Zeilen erhält, aber ich denke, dass die ROWNUM-Bedingung das nicht berücksichtigt.
Was könnte anders sein an der Verbindung oder dem Befehl, den Oracle SQL Developer verwendet, im Vergleich zu dem, den unsere Anwendung verwendet, was zu einem Geschwindigkeitsunterschied führen würde?
Leider habe ich keinen Zugriff auf den Server (außer Oracle-Abfragen dagegen auszuführen).
Vielen Dank.
UPDATE: Ich habe die gleiche Abfrage mit Microsoft Oracle Provider versucht und es führt sehr schnell. Leider ist dieser Anbieter veraltet, so dass dies keine langfristige Lösung ist.
Im Anhang zu dieser sehr nützlichen Antwort fand ich, dass ALTER SESSION SET NLS_COMP = BINARY ausgeführt; ALTERSITZUNGS-SET NLS_SORT = BINARY; Setzen Sie die Sitzung auf ihre Standardeinstellungen zurück. Sicher, es schaltet die Groß-/Kleinschreibung ein, aber das ist nicht so schlimm wie langsame Abfragen. –
Wie haben Sie festgestellt, dass die von Ihnen verwendete Bibliothek diese Anweisungen ausführt? Ich habe ein ähnliches Szenario: sofort in Oracle Sql Developer, aber ein paar Sekunden von der Anwendung. Das gleiche Szenario auf Sql Server zu testen ist wirklich schneller. Vielleicht fehlt mir eine wichtige Konfiguration. –