Zum Inhalt springen

SELECT-Abfrage sehr langsam (Microsoft ODBC for Oracle)


tune

Empfohlene Beiträge

Ich greife mit Hilfe von ADO.NET (ODBC-Provider) auf eine Oracle 9i DB zu.

Die Methode dataAdapter.Fill(ds) dauert bei mir bis zu 10 Sekunden!

Wenn ich dieselbe SELECT-Abfrage im Oracle SQL Developer ausführe benötigt sie max. 0,4 Sekunden.

Wie kann ich das Problem beheben? Ist der Treiber allg. so langsam?

Link zu diesem Kommentar
Auf anderen Seiten teilen

hm ich hab dem letzt eine sql abfrage nur mit odbc realisiert .. ganz ohne ado.net und es ging einwandfrei. performence probleme hat ich dabei ebenfalls keine...


 Dim MyConString As String = "DRIVER={MySQL ODBC 3.51 Driver};" & _

            "SERVER=XXXXXXXXXX;" & _

            "DATABASE=XXXXXXXXXX;" & _

            "UID=XXXXXXXXXX;" & _

            "PASSWORD=XXXXXXXXXX;" & _

            "OPTION=3;"

            Dim MyConnection As New OdbcConnection(MyConString)

            MyConnection.Open()

            Dim MyCommand As New OdbcCommand

            MyCommand.Connection = MyConnection

            MyCommand.ExecuteNonQuery()

        MyConnection.Close()

        Catch ex As System.Data.Odbc.OdbcException

            MessageBox.Show(ex.ToString)

        End Try

Link zu diesem Kommentar
Auf anderen Seiten teilen

welche version von ADO.NET (respektive, welches framework) verwendest du?

welchen ODBC-treiber verwendest du - den von Oracle oder den von MS?

wenns möglich ist, poste doch auch davon die versionsnummer.

versuche auch mal, das ODBC-logging und/oder SQL*Net tracing zu aktivieren.

es macht im übrigen oftmals sinn - und ist auch tatsächlich realisierbar - dass eine anwendung sowohl für ADO.NET als als für ODBC.NET funktioniert. dass du dir aus nachvollziehbaren gründen allerdings die arbeit nicht antun willst, erscheint logisch.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

welche version von ADO.NET (respektive, welches framework) verwendest du?

welchen ODBC-treiber verwendest du - den von Oracle oder den von MS?

wenns möglich ist, poste doch auch davon die versionsnummer.

versuche auch mal, das ODBC-logging und/oder SQL*Net tracing zu aktivieren.

es macht im übrigen oftmals sinn - und ist auch tatsächlich realisierbar - dass eine anwendung sowohl für ADO.NET als als für ODBC.NET funktioniert. dass du dir aus nachvollziehbaren gründen allerdings die arbeit nicht antun willst, erscheint logisch.

s'Amstel

Verwende das .NET Framework 2.0 unter Visual Studio 2005 Express, außerdem verwende ich den Microsoft ODBC Treiber (Microsoft ODBC for Oracle, 2.575.1117.00, MSORCL32.DLL).

Habe das mit dem Logging mal versucht. Dazu muss man doch im ODBC Data Source Administrator (Administrative Tools) das Tracing aktivieren? Oder geht das an anderer Stelle? Weil der schreibt bei mir kein Logfile.

Sorry, bin noch neu auf dem Gebiet.

Schon mal vielen Dank für die Unterstützung!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dazu muss man doch im ODBC Data Source Administrator (Administrative Tools) das Tracing aktivieren?

ja.

Oder geht das an anderer Stelle?

nein, ausser direkt über die entsprechenden registry-einstellungen.

eine andere möglichkeit ist das von mir angesprochene tracing des oracle-client (sqlnet.log o.ä.).

Weil der schreibt bei mir kein Logfile.

das ist manchmal ein gefrickel - u.u muss der pfad zur sql.log angepasst werden und IMO auch manchmal die zu loggende anwendung neu gestartet werden. siehe auch -> How To Generate an ODBC Trace with ODBC Data Source Administrator und verlinkte KB-artikel.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit dem DataReader werde ich mal ausprobieren wenn ich so nicht mehr weiter komme!

Habe es immer noch nicht geschafft das ODBC Tracing zu aktivieren. Verwende in meinem Programm auch keinen System / User DSN als Datenquelle, sondern verbinde mich direkt über einen ConnectionString. Ist das der Fehler?

Das Tracing des Oracle-Clients kann ich leider auch nicht laufen lassen. Habe hier keinen Oracle-Client installiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Verwende in meinem Programm auch keinen System / User DSN als Datenquelle, sondern verbinde mich direkt über einen ConnectionString. Ist das der Fehler?

kannst du den connectstring hier bitte mal posten? allenfalls um sensitive daten entschärft.

Das Tracing des Oracle-Clients kann ich leider auch nicht laufen lassen. Habe hier keinen Oracle-Client installiert.

wie greifst du ohne installierten oracle client auf oracle zu?

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Programm soll nachher auch auf PCs läuffähig sein, auf welchen kein Oracle-Client installiert ist. Deswegen dachte ich mir nehme ich den ODBC-Treiber von Microsoft.

Hier der "entschärfte" ConnectionString:

strCon = "Driver={Microsoft ODBC for Oracle};server=servername;uid=username;pwd=geheim"
Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Idee hatte ich auch schon, aber dazu müsste ich mein komplettes Projekt umschreiben.

Kleiner Tipp: Benutz Interfaces, dann fällt dieses Problem weitgehend geringer aus und zu musst nurnoch sehr wenige spezifische Codestellen anpassen wenn Du mal was umstellen willst.

IDbConnection, IDbCommand, IDbDataAdapter ...

Gruß

Markus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Oder nimm den .NET Provider von Oracle (ODP.NET), dann haste eine OracleConnection, OracleCommand

Benutz das ganze in Verbindung mit den Inderfaces, dann kannst die Provider nach belieben austauschen.

IDbConnection connection = new OracleConnection ...

IDbConnection connection = new OleDbConnection ...

IDbConnection connection = new OdbcConnection ...

IDbConnection connection = new SqlConnection ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und zwar war nicht der Microsoft ODBC-Treiber schuld, sondern ich hatte versehentlich "dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey" eingestellt. :hells:

Werde jetzt bei dem Microsoft ODBC-Treiber bleiben. Einfach deshalb, weil das Programm dann auf jedem XP-Rechner mit installiertem .NET Framework 2.0 lauffähig ist und der Oracle-Client nicht zwangsweise installiert werden muss.

Außerdem bin ich mit der Performance jetzt sehr zufrieden!

Nochmal vielen Dank für Eure Untersützung!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...