2017-03-21 2 views
0

Ich habe eine C# .NET 4.5 Konsole Anwendung mit Entity Framework 6.1 und Ich verwende das Muster der Arbeitseinheit. Ein typisches Beispiel für Code, wo ich einen Eintrag in meiner tblFills Tabelle hinzuzufügen:Die Verwendung von lokalen sqlexpress mit EF beschleunigt die Leistung mehr als erwartet. Warum?

var fillRep = UnitOfWork.Instance.GetRepository<tblFills>(); 

    fillRep.Add(fill); 

    UnitOfWork.Instance.Commit(); 

Einer meiner Simulationen macht 900 Datenbank schreibt.

Mit einem Remote-Server (Hosting von SQL Server auf einem Remote-Cloud-Server) dauert meine Simulation 6:21 Minuten (6 Minuten, 21 Sekunden). Das sind durchschnittlich 25 Sekunden pro Transaktion (es macht auch andere Dinge). Am Anfang von meinem Code, mache ich 10 Datenbank schreibt in eine Dummy-Tabelle, um es zu Zeit ... dann um 10 zu teilen, um meine durchschnittliche Datenbankzugriffszeit zu erhalten. Diese Simulation zeigte eine Zugriffszeit von 61 ms.

Meine Leistung Testcode:

Private void SqlPerformanceTest() 
{ 
    Logger.Debug("Starting SQL Performance Test..."); 
    int iterations = 10; 
    TempPerformance tp = new TempPerformance(); 
    tp.Quantity = 10; 
    TimeSpan startTime = DateTime.Now.TimeOfDay; 
    for (int i = 0; i < iterations; i++) 
    { 
     UnitOfWork.Instance.GetRepository<TempPerformance>().Add(tp); 
     UnitOfWork.Instance.Commit(); 
    } 
    DateTime elapsedTime = DateTime.Now.Subtract(startTime); 
    Logger.Debug("Done. Average SQL access for adding entires is: {0} ms", elapsedTime.TimeOfDay.TotalMilliseconds/iterations); 
} 

ich dann meine Verbindungszeichenfolge zu einer lokalen SQLEXPRESS Instanz wechseln, ich habe laufen und meine Simulationszeit geht von mehr als 6 Minuten und 10 Sekunden.

Dies macht für mich keinen Sinn, da ich glaube, dass meine Datenbankzugriffszeiten der einzige Unterschied in den beiden Simulationen sind.

Kann mir jemand helfen zu verstehen?

Zusammenfassend: 1) Mit der externen Datenbank mit Datenbankzugriffszeiten von 61 ms, 900 Datensätze in die Datenbank, dauert die Simulation über 6 Minuten. 2) Bei Verwendung der lokalen Datenbank dauert die Simulation 10 Sekunden.

Jede Hilfe oder Hinweise würde wirklich geschätzt werden.

Mein Remoteserver führt SQL Server 2014 auf einem Windows 2008 Server R2 Datacenter aus. Ich denke nicht, dass das wichtig ist, da ich die Zugriffszeiten gemessen habe, aber ich dachte, ich würde es erwähnen.

Dank -Ed

Antwort

0

Antwort auf Ihre Frage in diesem Satz ist: Remote-Cloud-Server

Es ist nicht Datenbank-Zugriffszeiten, aber Netzwerk-Latenzzeit, die hier zählt. Je nachdem, wie der Repository- und Dienstclient implementiert ist, ist Ihre Anwendung möglicherweise ziemlich gesprächig. Lokal ist das egal, aber die Verwendung von Cloud macht jede Menge Unterschied.

Stellen Sie sicher, dass Sie Ihre App testen, die remote bereitgestellt wird (dh nicht von Ihrem lokalen PC aus, der eine Verbindung mit dem Remote-SQL Server herstellt). Überprüfen Sie die Datenbankeinstellungen für die geografische Position, damit Sie sicher sind, dass der Datenbankserver und der Anwendungsserver sich am selben Speicherort und perfekt im selben Datencenter befinden.

Aber seien Sie sich bewusst, dass Sie niemals so gute Ergebnisse erzielen werden wie einstufige (sql + app Server auf demselben Rechner), da dieses Szenario keine Netzwerkschnittstelle verwendet.

+0

Vielen Dank. Ich denke, ich verstehe Ihre Antwort ... würde die 61ms Round-Trip-Messung, die ich oben gemacht habe, nicht genau das messen: Server + SQL-Latenz? Aber ich stimme Ihrer letzten Aussage zu, dass ich versuchen werde, app + db auf dem gleichen Server zu implementieren, obwohl ich irgendwie einen Spiegel brauche ... –

Verwandte Themen