Announcement

Collapse
No announcement yet.

Netzwerkperformance-Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Netzwerkperformance-Problem

    Hallo,

    ich habe eine Anwendung, die über ODBC-Schnittstelle auf einen entfernten SQL-Server zugreift. Es müssen mehrere MByte SQL-Daten übertragen werden und Wireshark zeigt mir 0.050 MBit/s Durchsatz an, wenn ich auf den Datenbankverkehr filtere. Sonstiger Verkehr hat das 50-fache.

    Kann ich an der SQL-Server-Einstellungen etwas drehen, dass der Durchsatz größer wird? Ich habe eine MSSQL 2005 Express installiert, mit Standardeinstellungen.

  • #2
    Hallo,

    ..zeigt mir 0.050 MBit/s Durchsatz an...
    der Grund für diesen geringen Wert liegt darin, dass die Ergebnismenge einer SELECT-Abfrage nicht als eine (große) Datei über das Netzwerk transportiert wird, sondern analog zum Ping-Pong-Spiel in sehr vielen kleinen Häppchen unterteilt, wobei jedes Mal auch Statusinformationen zwischen Client und Server ausgetauscht werden. Es werden somit sehr viele kleine Pakete im Netzwerk transportiert, so dass sich die unvermeidliche Latenzzeit im WAN entsprechend negativ bemerkbar macht.

    ...die über ODBC-Schnittstelle auf einen entfernten SQL-Server zugreift.
    Eine Three-Tier-Anwendung ist für dieses Szenario ausgelegt, denn dort betrifft das Ping-Pong-Spiel nur das auf dem Anwendungsserver installierte Geschäftsobjekt. Dieses verpackt die Ergebnismenge in einen großen Datenblock, der dann am Stück zum Client transportiert wird. Der Client selbst hat überhaupt keine Verbindung zur Datenbank.

    ..dass der Durchsatz größer wird?
    Man könnte zwar die Paketgröße für den Netzwerktransport erhöhen und als 1. Anweisung SET NOCOUNT ON (die Anweisung SET NOCOUNT ON unterdrückt das Senden der DONE_IN_PROC-Meldung an den Client, die sonst für jede Anweisung in einer Stapelanweisung gesendet wird) in der Stapelanweisung ausführen, aber am grundsätzlichen Problem ändert das nichts. Nur eine Three-Tier-Architektur der Anwendung löst das Problem grundlegend. In diesem Fall kann das Geschäftsobjekt alle Datensätze der Ergebnismenge in eine DataSet-Instanz packen, wobei die Transportgröße über die folgenden Eigenschaften minimiert wird:
    • RemotingFormat = SerializationFormat.Binary
    • SchemaSerializationMode = SchemaSerializationMode.ExcludeSchema
    Zuletzt editiert von Andreas Kosch; 19.12.2007, 08:13.

    Comment


    • #3
      - Mit welchen Komponenten/IDE/System wird auf die DB zugegriffen
      - Wird serverseitige oder clientseitiger Curser verwendet.
      - Sind Firewalls dazwischen die man Testhalber mal abschalten kann.

      Comment

      Working...
      X