Ich habe ein Stück Code, der Einfügungen in stark denormalisierten Tabellen ausführt. Die Tabellen haben Spaltennummern von ~ 100 bis 300+. Dies ist SQL Server 2008 R2, das unter Windows Server 2008 ausgeführt wird.
Jede Einfügung besteht aus dem Einfügen in eine Reihe von Tabellen unter derselben Transaktion. Einige Einfügungen werden von NHibernate gestapelt, andere jedoch nicht. Sie befinden sich jedoch alle in derselben Transaktion.
Wenn ich zum Beispiel 500-mal Einfügungen durch wiederholtes Aufrufen eines Teils des Codes durchführe, der die Einfügung ausführt, erhalte ich einen Durchschnitt von ~ 360 ms.
Das seltsame Bit ist, wenn ich den Testcode gleichzeitig mit 4 Prozessen ausführe (die gleiche Exe wird von 4 verschiedenen Eingabeaufforderungen unter Windows Server 2008 ausgeführt), wird die Einfügeleistung pro Aufruf viel besser. Ich sehe Bursts, die bis zu 90 ms schnell sind (fast X4 schneller). Ich messe die Einfügezeit aus dem Code.
Da die 4 Prozesse nichts voneinander wissen, gehe ich davon aus, dass dies etwas mit SQL Server zu tun hat, aber ich habe absolut keine Ahnung, warum. Ich würde gerne wissen, warum dies geschieht und ob es eine Konfiguration gibt, die es mir ermöglicht, die gleiche Leistung zu erzielen, wenn die Einfügungen nicht so häufig sind.
Vorschläge zu SQL Server-Überwachungsmethoden, um zu verstehen, was auf Datenbankebene vor sich geht, sind ebenfalls willkommen.