Parlando per esperienza che è modesta ma penso che valga la pena condividerla, il principale collo di bottiglia con i database SQL (Sybase e SQL server qui) è lo storage.
Ma penso sia giusto che qualcuno prima faccia un benchmark della propria configurazione prima di fare ipotesi sbagliate. Nel mio caso, l'utilizzo della CPU non è mai aumentato abbastanza da giustificare l'aggiornamento della CPU in qualunque momento presto. Invece, ho aggiornato da un singolo disco a RAID 1 e poi a RAID 10 + un bump da 8 GB a 16 GB di RAM.
Tutti questi aggiornamenti RAID hanno contribuito a ridurre i tempi di attesa precedenti di un fattore da 2 a 6. Sospetto che l'aggiornamento a SSD sarebbe ancora migliore. Se ci pensate, può essere tutto ridotto alla larghezza di banda (teorica). La tua combinazione [(Velocità RAM + Dimensione RAM + Controller memoria) alla CPU] ha un limite di larghezza di banda che sarebbe il fattore più importante nelle operazioni di lettura quando i tuoi dati dovrebbero essere sempre memorizzati nella cache, il tuo particolare spazio di archiviazione (RAID) ha un limite di larghezza di banda ( influisce sulle letture in caso di perdita della cache e sulle scritture durante lo svuotamento o quando molti client scrivono molti dati combinati).
Normalizza tutti i limiti il più possibile (avvicinali in modo da non avere risorse sprecate) e aumentali il più possibile (aggiorna dove necessario e solo se necessario, non lasciare che le risorse vengano sprecate se il sistema ha vinto ' essere in grado di usarli perché sono presenti altri colli di bottiglia). Alla fine, il tuo peggior collo di bottiglia sarà il sottosistema server meno performante (con meno larghezza di banda) nella tua particolare configurazione.
Potrei anche aggiungere che, durante il processo di aggiornamento, ho creato configurazioni RAID separate per i file di database e i file di registro del database. Il motivo era che i file di registro del database tendono ad essere ad alta intensità di scrittura. Un file di registro viene utilizzato per ripristinare un database da un arresto anomalo ed è sempre scritto immediatamente quando viene eseguita una transazione prima che qualsiasi dato venga scritto nel file di database.
Un file di registro viene utilizzato anche da alcuni server di replica del database, ma la maggior parte della replica non viene eseguita immediatamente ma frequentemente, quindi l'impatto sulle prestazioni di lettura è minimo qui. Almeno credo. Ho eseguito un benchmark minimo durante l'aggiornamento, quindi consiglio a chiunque di confrontare prima le loro diverse configurazioni e prima di tutto l'archiviazione, quindi la RAM e il collegamento di rete, prima di pensare di aggiornare le loro CPU.
Dopo aggiornamenti più estesi su più di 5 server, sono tornato per condividere la mia esperienza. Sicuramente sostengo ancora prima di aggiornare l'archiviazione, quindi la RAM e poi la CPU. Il motivo è la disparità delle larghezze di banda nel sistema tra memoria, RAM e CPU, in ordine dal più basso al più alto. Quindi ho aggiornato un sacco di server da RAID10 e doppi RAID1 a SSD.
Il modo in cui l'ho fatto per motivi di costi (ho 20 server in più da aggiornare) è spostare i dati del database e i file degli oggetti su un SSD (sì, solo un SSD in RAID0) e spostare il registro delle transazioni più tempdb su un RAID10 4xHDD configurazione. Ho provato anche con tempdb su SSD con grandi risultati (in effetti risultati molto belli con query più di 15 volte più veloci a volte, producendo alcuni report che richiedevano secondi invece di minuti in passato) ma in seguito ho spostato tempdb sul disco RAID10 perché di gravi problemi di usura da scrittura per l'SSD.
Quindi ora sostanzialmente ho osservato tempi di risposta 10-15 volte più veloci per alcune delle query più lunghe. L'SSD è ottimo per leggere rapidamente i dati nella RAM perché SQL Server non porta i dati nella RAM fino a quando non viene richiesto e, naturalmente, i dati devono prima essere caricati nella RAM per essere elaborati dalla CPU (in seguito, nella cache L1, L2, L3) , quindi gli SSD aiutano a ridurre di molto il tempo di attesa iniziale. E gli SSD aiutano anche a ridurre i tempi di scambio ... svuotando la RAM e caricando nuovi dati, specialmente se il tuo database è più grande di quanto possa adattarsi alla RAM.
Tutto sommato, siamo molto soddisfatti e abbiamo funzionato così per diversi mesi in una sorta di lento processo di migrazione per consentire ai server di funzionare in modo che io possa raccogliere informazioni sul livello di usura prima di passare tutti i miei server a questa configurazione. E questo è solo SQL Server Express! : D - Assicurati solo che i tuoi SSD possano fornire IOPS costanti perché è un'altra cosa che fa una grande differenza (basta cercarlo su Google). Ecco perché ho scelto SSD serie Intel DC (DataCenter).