J'ai un morceau de code qui effectue des insertions dans des tables hautement dénormalisées. Les tableaux ont un nombre de colonnes allant de ~ 100 à 300+. Il s'agit de SQL Server 2008 R2, exécuté sur Windows Server 2008.
Chaque insert consiste à insérer dans un certain nombre de tables sous la même transaction. Certains encarts sont groupés par NHibernate, mais certains ne peuvent pas l'être, mais ils sont néanmoins tous soumis à la même transaction.
Lorsque j'effectue des insertions 500 fois par exemple en appelant à plusieurs reprises un morceau de code qui effectue l'insertion, j'obtiens en moyenne ~ 360 ms.
Le plus étrange est que lorsque j'exécute le code de test simultanément à l'aide de 4 processus (le même exe exécuté à partir de 4 invites de commande différentes sous Windows Server 2008), les performances d'insertion par appel s'améliorent beaucoup. Je vois des rafales qui vont aussi vite que 90 ms (presque X4 plus vite). Je mesure le temps d'insertion du code.
Étant donné que les 4 processus ne se connaissent pas, je suppose que cela a quelque chose à voir avec SQL Server, mais je ne sais absolument pas pourquoi. J'aimerais savoir pourquoi cela se produit et s'il existe une configuration qui me permettrait d'obtenir les mêmes performances lorsque les insertions ne sont pas si fréquentes.
Les suggestions concernant les méthodes de surveillance de SQL Server pour comprendre ce qui se passe au niveau de la base de données sont également les bienvenues.