Eu tenho um pedaço de código que executa inserções em tabelas altamente desnormalizadas. As tabelas têm números de colunas variando de ~100 a 300+. Este é o SQL Server 2008 R2, rodando no Windows Server 2008.
Cada inserção consiste na inserção de um número de tabelas na mesma transação. Algumas inserções são agrupadas pelo NHibernate, mas outras não, mas estão todas sob a mesma transação.
Quando executo inserções, digamos, 500 vezes, chamando repetidamente um trecho de código que executa a inserção, obtenho uma média de ~ 360 ms.
O estranho é que, quando executo o código de teste simultaneamente usando 4 processos (o mesmo exe executado em 4 prompts de comando diferentes no Windows Server 2008), o desempenho de inserção por chamada fica muito melhor. Vejo rajadas que chegam a 90 ms (quase X4 mais rápido). Estou medindo o tempo de inserção do código.
Como os 4 processos não sabem nada um sobre o outro, presumo que isso tenha algo a ver com o SQL Server, mas não tenho a menor ideia do porquê. Gostaria de saber porque isso está acontecendo e se existe alguma configuração que me permita obter a mesma performance quando os inserts não são tão frequentes.
Sugestões relacionadas aos métodos de monitoramento do SQL Server para entender o que está acontecendo no nível do banco de dados são igualmente bem-vindas.