Ho un pezzo di codice che esegue inserimenti in tabelle altamente denormalizzate. Le tabelle hanno numeri di colonne che vanno da ~ 100 a 300+. Questo è SQL Server 2008 R2, in esecuzione su Windows Server 2008.
Ogni inserimento consiste nell'inserimento in un numero di tabelle nella stessa transazione. Alcuni inserti sono raggruppati da NHibernate, ma alcuni non possono esserlo, ma sono comunque tutti nella stessa transazione.
Quando eseguo inserimenti per esempio 500 volte chiamando ripetutamente un pezzo di codice che esegue l'inserimento, ottengo una media di ~ 360 ms.
La cosa strana è che, quando eseguo il codice di test contemporaneamente usando 4 processi (lo stesso exe viene eseguito da 4 diversi prompt dei comandi in Windows Server 2008), le prestazioni di inserimento per chiamata migliorano molto. Vedo scoppi che vanno fino a 90 ms (quasi X4 più veloce). Sto misurando il tempo di inserimento dal codice.
Poiché i 4 processi non si conoscono a vicenda, presumo che ciò abbia a che fare con SQL Server, ma non ho assolutamente idea del perché. Vorrei sapere perché questo sta accadendo e se esiste una configurazione che mi consenta di ottenere le stesse prestazioni quando gli inserti non sono così frequenti.
Suggerimenti sui metodi di monitoraggio di SQL Server per comprendere cosa sta succedendo a livello di db sono ugualmente benvenuti.