Je suis d'accord avec GBN et Marian.
Pour répondre à votre question concernant les 2 processeurs traitant 25 demandes: J'ai un système à 2 processeurs qui prend en charge environ 750 connexions utilisateur et une moyenne courante de demandes de lots 4K par seconde. Plusieurs éléments sont importants pour moi: la conception, la gestion et le réglage. Si vous commencez avec une mauvaise conception de votre application et de votre base de données, vous échouerez à la charge (pensez à la mise à l'échelle).
Un CPU élevé peut indiquer une pression mémoire. Vous mentionnez que SQL Server ne dispose que de 7 Go de mémoire. Si vous avez des index peu performants (trop d'index, des index incorrects ou pas d'index), cela entraînera le système à paginer davantage de la base de données en mémoire pour diverses requêtes, puis s'il existe des index appropriés. Je vous conseille de ne pas créer d'index comme des porcs, car les mauvais vous blesseront également car chacun a le potentiel de nécessiter une mise à jour au cours d'une opération de mise à jour de ligne (Créer-Mettre à jour-Supprimer).
En outre, l'utilisation des DMV d'index manquant nécessite l'utilisation de ce que vous savez de votre application et de votre base de données et pas seulement la mise en œuvre de chaque index recommandé. Je voudrais vérifier les entrées du blog de Kimberly Tripp concernant les index ici . Après la section Index, regarder les autres catégories pourrait vous être utile.
Si votre mise à jour Java / Hibernate de 5 tables en une seule transaction effectue les mises à jour via plusieurs allers-retours à la base de données, alors vous vous exposez à des conflits (demandes CRUD bloquées). Le problème s'aggrave si l'application n'est pas en mesure de revenir à la base de données en temps opportun. Dans l'application, la transaction active associée peut bloquer le traitement d'autres demandes et entraîner des délais d'attente.
Ajoutez les deux problèmes ci-dessus ensemble et vous commencez à avoir un cas désagréable de maux de tête de performance.
Réduire le nombre d’aller-retours dans la base de données dans le cadre d’une seule transaction serait une très bonne chose à poursuivre. Peut-être qu'une procédure stockée aiderait.
Le reste nécessitera du travail afin de faire évoluer votre application. Vous pouvez également envisager la mémoire, mais cela devrait venir après une révision de la conception et des performances et les modifications nécessaires mises en œuvre car l'ajout immédiat de mémoire masquera vos problèmes.
Suivez absolument les suggestions de Marian.
Je dirais que vous vous êtes trouvé un formidable défi et vous souhaite beaucoup de succès!