Devo eseguire il mio database fuori da una configurazione RAID 5?


13

Ho sentito che a volte le prestazioni di scrittura di RAID 5 possono essere spaventose. Anche se desidero la ridondanza fornita, non voglio sacrificare i tempi di inserimento / aggiornamento del mio database.

È qualcosa di cui dovrei preoccuparmi e, in caso affermativo, quale sarebbe la raccomandazione di ottenere ridondanza con buone prestazioni di scrittura?


1
Quale DB? Oracle + RAID 5 era un no-no. Non sono sicuro se questo è ancora il caso.
cagcowboy,

In questo esempio particolare il database funziona su MySql e MSSQL.
Scott Saad,

Un po 'più di specificità nella domanda in merito all'applicazione (requisiti di lettura / scrittura DB, requisiti di tempo di attività e tempo di recupero) potrebbe ottenere una risposta più applicabile; queste cose potrebbero fare la differenza nella migliore soluzione.
Jay Stevens,

Risposte:


23

RAID 10 è di solito raccomandato poiché l'I / O è così casuale. Ecco un esempio I calcoli sono un po 'semplificati, ma piuttosto rappresentativi.

Supponiamo che tu abbia un array di 6 unità e che le tue unità possano eseguire 100 I / O al secondo (IOPS). Se hai letture al 100%, verranno utilizzate tutte e sei le unità e avrai circa 600 IOPS sia per RAID 10 che per RAID 5.

Lo scenario peggiore è il 100% delle scritture. In quello scenario, le prestazioni di RAID 10 saranno dimezzate (poiché ogni scrittura arriva a due unità), quindi otterrà 300 IOPS. RAID-5 convertirà ogni scrittura in due letture seguite da due scritture, quindi otterrà 1/4 delle prestazioni o circa 150 IOPS. È un grande successo.

Il tuo modello di lettura / scrittura effettivo si troverà da qualche parte tra questi due estremi, ma questo è il motivo per cui RAID 10 è generalmente raccomandato per i database.

Tuttavia, se non si dispone di un server di database occupato, è possibile persino eseguire RAID-6. Lo faccio spesso se so che il database non avrà colli di bottiglia poiché ti dà molta più sicurezza di RAID 10 o RAID 5.


22

Database transazionali

RAID-5 è relativamente lento da scrivere poiché il controller deve caricare abbastanza dati per ricalcolare la parità su una scrittura. Le operazioni di scrittura comporteranno almeno quattro operazioni su disco:

  • Lettura nel blocco di parità

  • Lettura nel vecchio blocco (supponendo che non sia già nella cache) per XOR il valore con il blocco di parità.

  • Scrittura del nuovo blocco di parità (vecchio blocco di parità XOR vecchio blocco di dati XOR nuovo blocco di dati)

  • Scrittura del nuovo blocco dati.

Se il sistema non utilizza la memorizzazione nella cache del write-back, significa che tutte queste opration si trovano sul percorso critico per il completamento dell'I / O. Spesso, questo è il caso delle scritture di database, infatti Microsoft (ad esempio) ha un programma di certificazione per apparecchiature SAN da utilizzare con il server SQL che richiede ai fornitori di garantire questo comportamento. A volte le apparecchiature RAID-5 precedenti non utilizzavano questa ottimizzazione e dovevano ricalcolare la parità da tutta la striscia.

RAID-10 ha un mirror per ogni singola unità e non è necessario leggere dati aggiuntivi per calcolare la parità. Ciò significa che le scritture richiedono molto meno I / O fisici.

RAID-50 si trova da qualche parte nel mezzo, con il volume suddiviso in più volumi RAID-5, che a loro volta sono a strisce. Su un RAID-50 composto da gruppi con striping in uno schema 3 + 1, una scrittura genera al massimo tre richieste I / O su disco aggiuntive. Se ti senti così incline puoi visualizzare RAID-5 e RAID-10 come casi speciali di RAID-50. RAID-50 viene utilizzato principalmente per fornire grandi volumi su molti dischi fisici

Esistono anche altri schemi di parità come RAID-6 (uno schema di parità con due dischi ridondanti per set), i dischi moderni sono abbastanza grandi da consentire al rebulding di un array di impiegare un tempo piuttosto lungo - abbastanza a lungo da rischiare un errore del secondo disco durante la ricostruzione è abbastanza significativa. RAID-6 mitiga questo rischio disponendo di un secondo disco di parità, che richiede tre errori del disco per causare la perdita di dati. Un trucco simile agli schemi RAID-50 può essere utilizzato per creare array RAID-60.

Infine, una singola coppia di mirroring (nota come RAID-1) può fornire ridondanza e prestazioni abbastanza buone per alcune attività. In particolare, probabilmente troverai che RAID-1 ti offre un throughput sufficiente per un bel po 'di traffico di log del database. Maggiori informazioni su questo sotto.

Se si dispone di un carico di lavoro pesante in scrittura, probabilmente si otterrà un miglioramento delle prestazioni da un volume RAID-10. Questa può essere una vittoria in quanto probabilmente puoi ottenere il throughput richiesto da un numero inferiore di dischi fisici, supponendo che i dischi abbiano abbastanza spazio). Alcuni elementi come i registri o le aree temporali su un server di database dovrebbero trovarsi su volumi RAID-1 o RAID-10, poiché ricevono molto traffico di scrittura.

logs

I volumi di registro sono caratterizzati da un modello di accesso ai dati prevalentemente sequenziale e sono essenzialmente un buffer ad anello costituito da comandi lungo le righe di "scrivere questi dati in questo blocco". Vengono scritti come produttori dal motore DBMS principale ed elaborati come conumer dalla funzione di lettura log. Una singola coppia con mirroring gestirà in realtà un bel po 'di traffico di log.

Sistemi e file server pesanti

Su un sistema pesante come un data warehouse, potresti voler utilizzare uno o più volumi RAID-5. Su un file server, gli accessi al disco saranno effettuati in gran parte su un intero file, quindi le scritture probabilmente scriveranno la maggior parte dei blocchi che compongono comunque il blocco di parità. In questo caso il peggioramento delle prestazioni per RAID-5 sarà più leggero.

In passato il risparmio sui costi sul disco potrebbe essere stato significativo, ma ora è meno probabile che sia un problema.

Cache di riscrittura e RAID-5

Su una SAN o su un controller RAID interno con una cache alimentata a batteria, è possibile abilitare la memorizzazione nella cache "write-back". Questa cache scrive e restituisce il controllo all'applicazione. L'I / O viene segnalato dal controller come completato. Tuttavia, non necessariamente scrive immediatamente i dati sul disco. Questa funzione consente di ottimizzare sostanzialmente le operazioni di lettura / scrittura della parità RAID-5 e può attenuare la penalità delle prestazioni di scrittura per i volumi RAID-5x.

Tuttavia, ciò comporta ancora un piccolo rischio di problemi di integrità dei dati. Al sistema host è stato detto che questa scrittura è stata completata quando in realtà non è così. È possibile che un guasto hardware crei incoerenze tra i volumi (diciamo) e i volumi di dati su un server di database. Per questo motivo, la memorizzazione nella cache del write-back non è consigliata per i sistemi transazionali, sebbene possa essere una vittoria delle prestazioni per qualcosa come un processo ETL.

Sommario

Al giorno d'oggi lo spazio su disco è così economico che i sistemi transazionali dovrebbero probabilmente utilizzare RAID-1 o RAID-10 per i volumi di registro e RAID-10 per i volumi di dati. È probabile che la dimensione del disco fisico sia molto più grande del database e RAID-10 consentirà una maggiore velocità di scrittura per lo stesso numero di dischi, riducendo potenzialmente il numero di volumi del disco necessari per supportare il sistema.

Su qualcosa come un data warehouse è ancora possibile masticare spazio con tabelle dei fatti di grandi dimensioni e fortemente indicizzate in modo da ottenere una piccola vincita con volumi di dati RAID-5 o RAID-50. Tuttavia, i registri e tempdb devono comunque essere collocati su un volume RAID-10 poiché probabilmente avranno molto lavoro durante l'elaborazione ETL. Tuttavia, è probabile che il risparmio sui costi del disco sia piuttosto ridotto.


Cache di write-back: se stai acquistando un controller RAID con una cache di write-back "a batteria", nota che la batteria non sembra essere inclusa. Assicurati di convincere il tuo fornitore a includerne uno.
David Hicks,

Alcuni lo fanno, altri no. Ho un bel po 'di Adaptec 2200s che non è venuto con le batterie. Alcuni vengono con loro come standard.
ConcernedOfTunbridgeWells

1
Hai un errore nella tua risposta. Non è necessario leggere ogni unità per ricalcolare la parità. Una scrittura diventa 2 letture e 2 scritture. Le altre 12 unità nell'array di 14 unità di esempio non verranno toccate da RAID5.
TorgoGuy,

In realtà, credo che l'uomo abbia ragione. È possibile leggere e XOR la ​​parità con il vecchio valore del blocco e di nuovo con il nuovo valore del blocco. Mai visto quello descritto prima, ma avrebbe funzionato.
ConcernedOfTunbridgeWells

3

Bene, dipende fortemente dalla tua tolleranza ai guasti / rischi. RAID5 ha molti problemi . Il mio server DB attualmente ha due unità con mirroring e, se dovessi ridimensionarlo, sceglierei qualcosa con più parità, probabilmente RAID6 o RAID10.

Inoltre, se la tua applicazione è critica per i tempi di attività, probabilmente consiglierei di avere due server di database con replica invece, master-master o hot spare o altro. Il RAID aiuta solo contro i guasti del disco, ma c'è molto di più che potrebbe andare storto su un server :)


3

Dipende da quanto stai scrivendo.

Se si tratta di una "app Web" abbastanza leggera, è improbabile che si verifichino danni alle prestazioni su RAID5.

Se stai costruendo un data warehouse multi-GB con ETL di grandi dimensioni, il buffer di scrittura su RAID 5 traboccerà rapidamente e ti ritroverai direttamente nelle "scarse prestazioni di scrittura" di RAID 5.

Ogni scrittura RAID5 causerà almeno 3 scritture (più un calcolo CRC). Se bufferizzato, questo è veloce e veloce (piccoli brevi scoppi di attività - aggiornamenti e inserimenti di singoli record). Se si tratta di scritture sostenute (inserimenti / aggiornamenti di grandi dimensioni), verrà notato.

È un equilibrio tra prestazioni e spazio. RAID 10 (mirror delle unità con striping) offre sia prestazioni che resilienza, ma riduzione del 50% della capacità.

RAID5 offre una maggiore capacità, buone prestazioni di lettura ma scarse (grandi) prestazioni di scrittura.


2

RAID 1, questa è la mia risposta finale

Motivi:

la coppia con mirroring offre un'adeguata ridondanza per i dischi guasti e il RAID continua a funzionare fino all'ultimo disco.

la coppia con mirroring produce prestazioni I / O maggiori per le letture se si posizionano i dati e gli indici con attenzione ... [suggerimento: utilizzare volumi separati per i dati e i relativi indici]. È possibile ottenere prestazioni ancora maggiori duplexando i controller.


Perché non RAID 1 + 0?
Brian Knoblauch,


2

Risposta breve: no.

Risposta lunga: a meno che tu non abbia un database molto piccolo o requisiti minimi, no. Il recupero dei dati dipende fortemente dalle operazioni di I / O del disco al secondo e l'overhead dello striping consumerà nel tempo l'accesso al disco, in particolare con lunghe esecuzioni di query. La maggior parte dei database viene eseguita su una configurazione in stile RAID 10 o con volumi specifici che contengono partizioni dei dati. Sì, RAID 10 vi costerà in scrittura, ma le prestazioni di lettura (con il giusto setup) andrà fino .


1

quale sarebbe la raccomandazione per ottenere ridondanza con buone prestazioni di scrittura?

Una cache di riscrittura di grandi dimensioni. Aumentare la RAM sul controller RAID hardware o la RAM disponibile per la soluzione RAID software (ad esempio per MDADM di Linux aumentare la RAM di sistema, i palloncini MDADM per utilizzare RAM di sistema altrimenti inutilizzata come cache di scrittura). Questo consiglio vale per determinati valori di "grande" - se sarai spesso (5% delle volte?) A scrivere dati a una velocità abbastanza veloce da riempire la cache di scrittura, non importa quanto sia grande, questo farà poca differenza.


1

Si tratta davvero di separare i file di dati, i file di registro, dal file del sistema operativo. I registri scrivono in sequenza I dati comportano molte letture casuali e alcune scritture casuali

Costruendo configurazioni RAID che supportano questi tratti, migliorerai notevolmente le prestazioni

Raid 1: il mirroring è ottimo per i file di registro Raid 10 è buono per i file di dati. Vale anche la pena cercare di separare TempbDB e backup in unità separate. L'aggiunta di filegroup è un altro modo per aumentare le prestazioni. Quando si tratta di SAN questo non è così chiaro. Dipende se si stanno creando configurazioni di raid specifiche per ciascun LUN o facendo affidamento sul numero di mandrini.


0

Nello spirito del recente articolo del blog StackOverflow che dice che non dovremmo presentare nuovamente le risposte già disponibili su Internet, ti suggerisco questo

RAID-5 non è unico nella ridondanza che fornisce, lo fa solo consumando meno dischi aggiuntivi rispetto ad alcune alternative. Puoi scegliere qualcos'altro con ridondanza uguale o migliore e prestazioni di scrittura migliori


0

L'esecuzione di un database fuori da RAID5 è in genere un errore. L'ho visto solo in due casi: database ben ingegnerizzati ad alta intensità di lettura con poche scritture e database in cui "sprecare spazio" a causa di RAID5 non era politicamente praticabile.

RAID5 distruggerà le prestazioni transazionali.

Inoltre, se stai considerando RAID5, vedi se riesci a far funzionare RAID6. L'affidabilità teorica è molto migliore, sebbene l'affidabilità nel mondo reale sia spesso peggiore a causa di implementazioni immature.

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.