Tengo un fragmento de código que realiza inserciones en tablas altamente desnormalizadas. Las tablas tienen un número de columnas que van desde ~ 100 hasta 300+. Este es SQL Server 2008 R2, que se ejecuta en Windows Server 2008.
Cada inserción consiste en insertar en varias tablas bajo la misma transacción. NHibernate agrupa algunos insertos, pero otros no, pero todos están bajo la misma transacción.
Cuando realizo inserciones por ejemplo 500 veces llamando repetidamente a un fragmento de código que realiza la inserción, obtengo un promedio de ~ 360 ms.
Lo extraño es que, cuando ejecuto el código de prueba simultáneamente usando 4 procesos (el mismo exe se ejecuta desde 4 mensajes de comando diferentes en Windows Server 2008), el rendimiento de inserción por llamada mejora mucho. Veo ráfagas que van tan rápido como 90 ms (casi X4 más rápido). Estoy midiendo el tiempo de inserción del código.
Dado que los 4 procesos no saben nada el uno del otro, supongo que esto tiene algo que ver con SQL Server, pero no tengo ni idea de por qué. Me gustaría saber por qué sucede esto y si hay alguna configuración que me permita obtener el mismo rendimiento cuando las inserciones no son tan frecuentes.
Las sugerencias con respecto a los métodos de monitoreo de SQL Server para comprender lo que está sucediendo en el nivel de base de datos son igualmente bienvenidas.