Sono d'accordo con GBN e Marian.
Per rispondere alla tua domanda relativa a 2 CPU che gestiscono 25 richieste: Ho un sistema a 2 CPU che supporta circa 750 connessioni utente e una media corrente di richieste batch 4K al secondo. Diversi elementi sono importanti per me: progettazione, gestione e messa a punto. Se inizi con una progettazione scadente dell'applicazione e del database, non riuscirai al caricamento (pensa al ridimensionamento).
Una CPU elevata può indicare una pressione della memoria. Si menziona che sono disponibili solo 7 GB di memoria per SQL Server. Se si dispone di indici con prestazioni scarse (troppi indici, indici errati o nessun indice), ciò farà sì che il sistema inserisca più memoria del database in memoria per varie richieste, quindi se vi sono indici appropriati. Vorrei mettere in guardia la creazione selvaggia di indici poiché anche quelli sbagliati ti danneggeranno poiché ognuno ha il potenziale per richiedere un aggiornamento nel corso di un'operazione di aggiornamento di riga (Crea-Aggiorna-Elimina).
Inoltre, per utilizzare i DMV dell'indice mancante è necessario utilizzare ciò che si conosce dell'applicazione e del database e non solo implementare ciascun indice consigliato. Vorrei controllare le voci del blog di Kimberly Tripp riguardanti gli indici qui . Dopo la sezione Indice, guardare le altre categorie potrebbe essere utile per la tua situazione.
Se l'aggiornamento Java / Hibernate di 5 tabelle in una singola transazione sta eseguendo gli aggiornamenti tramite più round-trip al database, allora ti stai lasciando aperto alla contesa (richieste CRUD bloccate). Il problema peggiora se l'applicazione non è in grado di tornare al database in modo tempestivo. Durante l'applicazione, la transazione attiva associata potrebbe bloccare l'elaborazione di altre richieste e causare timeout delle richieste.
Aggiungi insieme i due problemi precedenti e inizi ad avere un brutto caso di mal di testa da prestazione.
Ridurre il numero di round trip del database nel contesto di una singola transazione sarebbe un'ottima cosa da perseguire. Forse una procedura memorizzata sarebbe di aiuto.
Il resto richiederà lavoro per ridimensionare l'applicazione. Potresti anche prendere in considerazione la memoria, ma ciò dovrebbe avvenire dopo aver effettuato una revisione del design e delle prestazioni e le modifiche necessarie implementate con l'aggiunta immediata di memoria maschereranno i tuoi problemi.
Segui assolutamente i suggerimenti che Marian ha delineato.
Direi che ti sei trovato una sfida meravigliosa e ti auguro un grande successo!