Configurazione di SQL per prestazioni ottimali ... SSD o HDD?


8

Qualcuno è a conoscenza di confronti che mostrano come gli SSD si confrontano con gli HDD per le prestazioni in un ambiente SQL?

Sto cercando di capire quale tipo di vantaggio in termini di prestazioni potrebbe essere ottenuto passando a SSD.


1
Sono sicuro che una copia dello standard SQL funzionerà altrettanto bene sugli SSD che sugli HDD a piatto rotante. O forse sei interessato a un tentativo particolare di implementazione dello standard SQL?
Womble

Risposte:


14

Se stai facendo una grande quantità di letture piccole, gli SSD sono molto più veloci. Ecco uno dei pochi confronti che ruotano attorno alle prestazioni del database. Guarda il grafico in basso per la risposta breve.

Per le prestazioni non elaborate, gli SSD offrono molti vantaggi, il principale è che il tempo di ricerca è effettivamente 0, il che significa che tutti i piccoli hit HD che un database fa vengono gestiti molto più velocemente.

Ci sono tuttavia alcune preoccupazioni con l'attuale generazione sulla vita in scrittura, poiché dopo così tante scritture un blocco non è più utilizzabile. Riescono a scrivere un bel po ', credo che le informazioni fornite dicano intorno a un petabyte di byte per le loro unità da 32 GB prima che inizino a raggiungere livelli pericolosi di articoli ... questo migliorerà solo con il tempo.

Per una migliore comprensione del motivo per cui funzionano in modo molto migliore, leggi questo articolo di Anandtech sugli SSD . Entra nel dettaglio delle unità, di ciò che è buono, di ciò che non lo è e dei dettagli di come funzionano. Nella parte superiore è anche presente un collegamento a un articolo di follow-up che copre le ultime serie di unità.


2
In termini di usura a causa di cicli di scrittura limitati, i buoni SSD si stanno avvicinando alla sicurezza dei dischi rotanti in questi giorni a causa di una combinazione di una maggiore capacità del ciclo di scrittura delle singole celle, scrivere "trucchi" per ridurre i cicli di blocco di scrittura richiesti e livellare l'usura algoritmi. Anche per applicazioni con elevato carico di IO come un database molto attivo, un buon SSD non ha molte più probabilità di uscire prima della sostituzione di routine di un disco rotante. Mantenere backup regolari, regolarmente testati, come con qualsiasi soluzione di archiviazione.
David Spillett,

Sono d'accordo, è per questo che lo chiamo una preoccupazione, non uno show-stopper ... un disco economico ha un vero problema con questo in questo momento, ed è più un problema di firmware. Entro 6 mesi non credo che il livello di usura sarà più aumentato, è progredito molto bene, molto rapidamente.
Nick Craver

1
Buona risposta. Solo per aggiungere ad esso, penso che nella maggior parte dei casi il registro dovrebbe rimanere su un normale disco rigido in quanto è scritto in sequenza e i dischi rigidi sono economici. Basta avere il database effettivo su un SSD poiché è lì che si trova l'accesso casuale.
PeteT,

@PeteT - varia / dipende un po ', ricorda che un particolare registro è sequenziale sì, ma su un server che ospita molti database (come Stack Exchange che ospita molti siti in un database per) il comportamento effettivo è molto più vicino all'accesso / scrittura casuale di sequenziale, quindi dipende da cosa / quanto stai correndo.
Nick Craver

Una cosa bella è che quando un SSD raggiunge la fine della sua vita e non può più essere scritto, è ancora leggibile. Non si può dire che su un disco rotante che si rompe.
Djangofan,

4

È possibile installare il sistema operativo e il software SQL su un disco rigido standard e quindi aggiungere un SSD per contenere solo i file del database. Ciò dovrebbe limitare il numero di scritture riscontrate dall'unità SSD e massimizzare anche la quantità di spazio disponibile per i dati sull'unità.



2

La risposta di Nick Craver è buona; Voglio solo aggiungere due avvertimenti agli SSD di cui penso che le persone dovrebbero essere a conoscenza:

a) I problemi di SSD con l'usura della scrittura non stanno scomparendo, sono fondamentali per le celle flash utilizzate. Le celle SLC hanno una resistenza di scrittura molto più elevata rispetto a MLC, quindi l'OP dovrebbe prendere in considerazione l'idea di ottenere un'unità SLC su MLC. Naturalmente, SLC è anche significativamente più costoso.

b) I dati correnti memorizzano nella cache i dati sull'unità prima di scriverli. Pertanto esiste il rischio di perdita di dati se si interrompe l'alimentazione durante un'operazione di scrittura. È qualcosa su cui puoi aggirare, ma la cache è lì sia per le prestazioni, sia per ridurre l'amplificazione della scrittura.

IMHO nessuno dei precedenti è un dealbreaker. Sarei pronto a distribuire gli SSD alla produzione oggi, ma con una pianificazione prima.

  1. Se un piccolo rischio di perdita di dati è inaccettabile, i dischi rigidi SAS convenzionali con la memorizzazione nella cache dei dati disattivata potrebbero essere una scelta migliore.
  2. Penso che dovresti misurare la quantità di dati scritti sull'unità SSD in un giorno normale. Sulla base di questo e dei produttori indossare specifiche, calcolare la durata prevista dell'SSD con il proprio modello di utilizzo. Se la durata prevista è inferiore alla durata pianificata dei server, impostare una data di sostituzione preventiva per l'SSD. Proprio come le parti di un aeroplano, sostituiscilo prima che rischia di fallire.

Parti dell'aeroplano? Non la migliore analogia se la estendi alle navette della NASA, che girano su computer IBM AP101S con un enorme 1GB di RAM e nessun HDD. La necessità di prevedibilità e affidabilità è al di sopra di tutte le altre considerazioni.
CJM,

1

Qualcosa da tenere a mente.

Se stai colpendo il database abbastanza da rallentare le tue letture e hai bisogno di SSD, allora devi correggere i tuoi indici o cercare di aggiungere più RAM al server.

La maggior parte dei server di database, una volta ottimizzati, non necessita di SSD per funzionare correttamente.


Le mie letture in realtà non stanno rallentando. Stiamo cercando di ottimizzare una query "primo colpo" in cui occorrono circa 120-130 ms la prima volta che la query viene eseguita e 80 ms dopo. Questi tempi escludono la creazione dei piani di query e la lettura delle statistiche pertinenti. Possiamo vedere che la differenza di tempo nel nostro caso è spesa leggendo dal disco, quindi provando ad esplorare come posso fare quel primo colpo più vicino agli 80ms.
spoon16,

Quindi, anche dopo la prima manche, ci vogliono ancora 80ms? Sono per lo più letture di dati o molta CPU (aggregazione o ordinamento)? Penso ancora che ci sia molto spazio per l'ottimizzazione "tradizionale" prima di passare a tecnologie di archiviazione esotiche.
BradC,

Se devi andare sul disco al primo avvio della query, per qualche motivo SQL sta eliminando i dati dalla cache. Potresti innanzitutto voler vedere qual è l'aspettativa di vita della tua pagina. Se è basso, è necessaria più RAM. Qual è la percentuale di riscontri nella cache prima, durante e dopo la query? Se è inferiore al 99,8%, l'indicizzazione e più RAM sono in ordine. Stai eseguendo QUALSIASI scansione? In tal caso, potrebbe essere necessario un numero maggiore di indicizzazione.
mrdenny,

Su un carico di lavoro pesante con scrittura con cache di scrittura (ovvero dati fisicamente impegnati su disco prima che la chiamata ritorni) dovresti ottenere prestazioni di scrittura notevolmente migliori da un SSD, supponendo che la tua applicazione sia realmente legata all'I / O. Si noti che questa è la strategia di memorizzazione nella cache preferita per SQL Server, in particolare su SAN e MS richiedono SAN per garantire questo comportamento per ottenere la certificazione per l'utilizzo con SQL Server.
ConcernedOfTunbridgeWells,

1

Leggi questo articolo (abbastanza vecchio - 2009):

Riepilogo: sostituisci le unità SAS RPM 24 x 15k con 6 (sì sei) SSD e ottieni ancora il 35% di prestazioni in più. Questo è accaduto con gli Intel X25M che non sono più i migliori per gli SSD.

Per gli utenti del database questo è fantastico poiché puoi avere server più piccoli e più veloci che consumano meno energia.


1

Una cosa da considerare è avere il log delle transazioni su un HDD e il tuo MDF su un SSD. Anche la durata della vita dipenderà molto dal tipo di applicazione. OLTP può masterizzare rapidamente anche se i dati staticamente ragionevoli non dovrebbero avere problemi.


1

La mia esperienza è stata mescolata qui ...

Test su Windows 7 con SQL Server 2008 Express R2. In esecuzione su un desktop i7 con un Sandy Bridge e un ram installato 12G (penso DDR3?). Scusate il fatto che l'installazione sia desktop, subito dopo ho visto quanti record posso gestire sulla piattaforma i7 prima di creare un server.

Ho eseguito questi test per la prima volta sull'unità 7200rpm da 1,5 TB installata per ottenere i tempi di base.

10k record con procs di aggiornamento, ottimizzato le tabelle per archiviare i dati precedentemente correlati in una tabella piatta, aggiunti indici fino a quando non ho ridotto i tempi a pochi secondi come punto di partenza, quindi ho duplicato i record fino a 1,2 milioni e ho ottenuto un timing di 0: 3: 37 per gli stessi aggiornamenti. 3 1/2 minuti non sono male per questa configurazione non raid.

La duplicazione dei record fino a 2,56 milioni mi ha portato a un tempo di 0:15:57 - quasi un aumento di 5 volte. Probabilmente dovuto principalmente al paging oltre la memoria 12G installata.

Installato il disco SSD e spostato i database, il tempo è effettivamente aumentato a poco più di 20 minuti. Suppongo che ciò sia dovuto al fatto che i file di paging sono per disco rigido e non ce n'era nessuno per impostazione predefinita sull'unità SSD in quanto non era installato come unità del sistema operativo (bluescreens a volontà quando l'ho provato).

Aggiunto un file di paging all'unità SSD e rieseguito il test, 0: 5: 52 -m, quindi il file di paging sembra aver fatto il trucco, ma non sono sicuro che un file di paging sia adatto per un'unità SSD per tutti i motivi sopra indicati, sono fortemente scritti e possono aggiungere un'eccessiva usura sull'unità.

Un avvertimento, ho anche abilitato Smartboost su quell'unità e che potrebbe anche aver influenzato i tempi, si ripeterà senza di essa.

Il mio miglior senso è che è più facile aggiungere memoria in questi giorni, e per il costo forse un raid 0 + 1 di dischi ibridi farebbe un lavoro altrettanto buono senza i problemi.

modifica: disabilita il file di paging sull'SSD e lascia che smart boost faccia il suo lavoro, i tempi sono migliorati da 5:52 minuti a 4:55 minuti per 2,56 milioni di record con una serie di 3 aggiornamenti ciascuno. Adesso proverò la cache ssd 8G sull'unità ibrida seagate 750G. quindi se non è male, li proverò nel raid 0 + 1.

ultimo aggiornamento su questo dato che si tratta di un vecchio thread - ma volevo mettere i risultati che ho ottenuto lì in modo che qualcuno possa trovarli.

Spostando il database su Seagate 750G Hybrid con una cache SSD 8G, ho eseguito il test alcune volte in modo che la cache SSD potesse apprendere. Mi dà un tempo di 5:15 m: s per lo stesso test, aggiornando 2,56 milioni di record, il che è abbastanza vicino alle prestazioni dell'SSD (4:55 m: s con Intel Smartboost) per me da considerare il costo.

A circa $ 50 in più ($ 239 contro $ 189 in questo momento) l'ibrido fornisce oltre 6 volte lo spazio di archiviazione e quasi le stesse prestazioni, senza eseguire alcun software aggiuntivo per l'ottimizzazione. In un raid 0 + 1 mi aspetto di migliorare notevolmente i tempi e questa unità ha una garanzia di 5 anni, spera che non ne avrò bisogno.


0

Personalmente, non userei SSD per i motivi già menzionati; rallenteranno gradualmente prima di fallire. Non sappiamo ancora veramente quando sarà - le stime attuali sono proprio questo - stime. Ricordi quando acquistammo tutti quei CD "indistruttibili" all'inizio / metà degli anni '80? Alcuni anni dopo, abbiamo considerato la memorizzazione a termine dei dati su CD tanto folle quanto l'utilizzo di floppy disk.

Se l'hardware, il sistema operativo e il DB sono tutti configurati correttamente, non sarà necessario giocare d'azzardo su SSD.

Tra qualche anno, quando i prodotti saranno maturati un po ', sarà uno scenario diverso. Ma fino ad allora ...


0

L'articolo di Microsoft Research riguarda il costo per GB anziché il guadagno in termini di prestazioni. In realtà non si adatta e testa le unità ma utilizza un algoritmo di retro-casting basato su file di registro provenienti da server reali.

Alcune cose che vengono in mente con SSD e SQL:

1 / Se trascuri di aggiungere gli indici giusti, SSD sarà molto più indulgente poiché i tempi di ricerca casuali sono così bassi.

2 / I costi sono decisamente inferiori rispetto a quando lo studio è stato svolto e per le piccole applicazioni Web, ad esempio per l'esecuzione del back-end di un'app del telefono, non dei server Exchange aziendali, le prestazioni potrebbero ridurre le spese per l'assunzione di un consulente per ottimizzare SQL Server.

3 / Una singola unità SSD con copia shadow deve sicuramente essere più economica di un gruppo di mandrini in un armadio RAID, controller e connessioni. Per non parlare della potenza, del riscaldamento e dello spazio del rack.

4 / I mandrini sono noti per essere la parte che più comunemente muore su un computer. L'SSD non ha parti in movimento e un'ora di inattività potrebbe costare il prezzo di un SSD in una volta sola.

5 / L'usura è un problema ma hanno dei modi per gestirlo (che coinvolgono blocchi di scattering) che sono possibili perché i dati frammentati casualmente non rallentano un SSD. Inoltre, un piccolo database su un disco di grandi dimensioni probabilmente non si esaurirà in tempo per acquistarne uno più economico in futuro.

6 / C'è una tendenza verso database non relazionali e fare join nel livello intermedio. Questo potrebbe davvero cambiare le cose: I / O a semplici tabelle non indicizzate su unità SSD su frammenti senza penalità per le prestazioni e con una proposta di ridimensionamento molto più semplice. Risparmio anche sulle licenze di SQL Server per frammento.

7 / Questo è tutto teorico. Se qualcuno ha test delle prestazioni del mondo reale contro i mandrini, mi piacerebbe vedere.

Luca

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.