Ich stimme GBN und Marian zu.
Um Ihre Frage zu 2-CPUs zu beantworten, die 25 Anforderungen bearbeiten: Ich habe ein 2-CPU-System, das etwa 750 Benutzerverbindungen und einen laufenden Durchschnitt von 4K-Stapelanforderungen pro Sekunde unterstützt. Für mich sind mehrere Punkte wichtig: Design, Management und Tuning. Wenn Sie mit einem schlechten Design Ihrer Anwendung und Datenbank beginnen, schlagen Sie beim Laden fehl (denken Sie an Skalierung).
Eine hohe CPU kann auf Speicherdruck hinweisen. Sie erwähnen, dass SQL Server nur 7 GB Speicher zur Verfügung hat. Wenn Sie schlecht funktionierende Indizes haben (zu viele Indizes, falsche Indizes oder keine Indizes), führt dies dazu, dass das System mehr Daten der Datenbank für verschiedene Anforderungen in den Speicher paginiert, als wenn geeignete Indizes vorhanden sind. Ich würde Sie davor warnen, wild wild zu sein, wenn Sie Indizes erstellen, da die falschen auch Sie verletzen, da jeder das Potenzial hat, im Verlauf einer Zeilenaktualisierung (Erstellen-Aktualisieren-Löschen) eine Aktualisierung erforderlich zu machen.
Für die Verwendung der DMVs mit fehlendem Index müssen Sie außerdem das verwenden, was Sie über Ihre Anwendung und Datenbank wissen, und nicht nur jeden empfohlenen Index implementieren. Ich würde Kimberly Tripps Blogeinträge zu Indizes hier lesen . Nach dem Abschnitt Index kann ein Blick auf die anderen Kategorien für Ihre Situation hilfreich sein.
Wenn Ihre Java / Hibernate-Aktualisierung von 5 Tabellen in einer einzelnen Transaktion die Aktualisierungen über mehrere Roundtrips zur Datenbank durchführt, sind Sie für Konflikte offen (blockierte CRUD-Anforderungen). Das Problem verschlimmert sich, wenn die Anwendung nicht rechtzeitig zur Datenbank zurückkehren kann. In der Anwendung kann die zugehörige aktive Transaktion die Verarbeitung anderer Anforderungen blockieren und Zeitüberschreitungen bei Anforderungen verursachen.
Addieren Sie die beiden oben genannten Probleme und Sie bekommen einen schlimmen Fall von Leistungskopfschmerzen.
Es wäre sehr gut, die Anzahl der Datenbank-Roundtrips im Rahmen einer einzelnen Transaktion zu reduzieren. Vielleicht würde eine gespeicherte Prozedur helfen.
Der Rest erfordert Arbeit, damit Ihre Anwendung skaliert werden kann. Sie können auch Speicher in Betracht ziehen, dies sollte jedoch erfolgen, nachdem eine Entwurfs- und Leistungsüberprüfung durchgeführt wurde und die erforderlichen Änderungen, die durch sofortiges Hinzufügen von Speicher implementiert wurden, Ihre Probleme maskieren.
Befolgen Sie unbedingt die Vorschläge, die Marian skizziert hat.
Ich würde sagen, Sie haben eine wunderbare Herausforderung gefunden und wünschen Ihnen viel Erfolg!